【问题标题】:IF Statement in VBAVBA 中的 IF 语句
【发布时间】:2010-08-12 16:30:42
【问题描述】:

我有一个 If 语句如下:

If Weekday(Worksheets("Actual").Range("C1").Value) = vbSunday Then

此 If 语句的作用是创建 3 封电子邮件,其中包含周六和周五的数据附件和链接,以在工作表中输入的日期是周日时发送。如果星期日日期是一个月的第一天,即(2010 年 8 月 1 日),则为星期六(2010 年 7 月 31 日)和星期五(2010 年 7 月 30 日),则 If 语句不识别月份更改,因此无法创建 3带有必要附件和链接的电子邮件。

如何创建/更改我的 If 语句,以便当新月份的第一天是星期日或星期一并且我必须从上个月提取数据时,它会识别月份更改并创建正确的附件和链接??

这是我创建电子邮件的完整代码...

Private Sub sendemail(esubj)

    Sheets("Actual").Select
    myfridate = Cells(1, 3).Value
    myfridate = DateAdd("d", -2, myfdate)
    myfridate = Format(myfridate, "mm-dd-yy")

    Sheets("Actual").Select
    mysatdate = Cells(1, 3).Value
    mysatdate = DateAdd("d", -1, myfdate)
    mysatdate = Format(mysatdate, "mm-dd-yy")


If Weekday(Worksheets("Actual").Range("C1").Value) = vbSunday Then

    Set omail = CreateItem(olMailItem)

    ROW_BEGIN = 1
    ROW_END = 72

    Sheet1.Activate
    Range("I7").Select
    fileSat = "\\firework\public\FINANCE\Daily Report\FY10\Key Indicator\"
    fileSat = fileSat & Left(Range("I7"), 3) & Right(Year(Date), 2)
    fileSat = fileSat & "\Key Indicator Daily Report - " & mysatdate & ".xls"

    Sheet1.Activate
    Range("I7").Select
    fileSun = "\\firework\public\FINANCE\Daily Report\FY10\Key Indicator\"
    fileSun = fileSun & Left(Range("I7"), 3) & Right(Year(Date), 2)
    fileSun = fileSun & "\Key Indicator Daily Report - " & mysundate & ".xls"

    Sheet1.Activate
    Range("I7").Select
    fileFri = "\\firework\public\FINANCE\Daily Report\FY10\Key Indicator\"
    fileFri = fileFri & Left(Range("I7"), 3) & Right(Year(Date), 2)
    fileFri = fileFri & "\Key Indicator Daily Report - " & myfridate & ".xls"


    With omail

    .Subject = "M Key Indicator Daily Report"
    .BodyFormat = olFormatHTML
    .HTMLBody = "<a href ='" & fileFri & "'>Key Indicator Daily Report - " & myfridate & "</a><br><a href ='" & fileSat & "'>Key Indicator Daily Report - " & mysatdate & "</a><br><a href ='" & fileSun & "'>Key Indicator Daily Report - " & mysundate & "</a>"
    .To = "me.com"
    .Display

    End With

    Set omail1 = CreateItem(olMailItem)

    With omail1

    .Subject = "R Key Indicator Daily Report"
    .BodyFormat = olFormatHTML
    .To = "you.com"
    .Attachments.Add fileFri
    .Attachments.Add fileSat
    .Attachments.Add fileSun
    .Display

    End With

    Set omail2 = CreateItem(olMailItem)

    With omail2

    .Subject = "K Key Indicator Daily Report"
    .BodyFormat = olFormatHTML
    .To = "them.com"
    .Attachments.Add fileFri
    .Attachments.Add fileSat
    .Attachments.Add fileSun
    .Display

End With

ElseIf Weekday(Worksheets("Actual").Range("C1").Value) = vbFriday Or _
    Weekday(Worksheets("Actual").Range("C1").Value) = vbSaturday Then

Else

    ROW_BEGIN = 1
    ROW_END = 72

    Sheet1.Activate
    Range("I7").Select
    fileSun = "\\firework\public\FINANCE\Daily Report\FY10\Key Indicator\"
    fileSun = fileSun & Left(Range("I7"), 3) & Right(Year(Date), 2)
    fileSun = fileSun & "\Key Indicator Daily Report - " & mysundate & ".xls"


    Set omail = CreateItem(olMailItem)

    With omail

    .Subject = "M Key Indicator Daily Report"
    .BodyFormat = olFormatHTML
    .HTMLBody = "<a href ='" & fileSun & "'>Key Indicator Daily Report - " & mysundate & "</a>"
    .To = "me.com"
    .Display

    End With

    Set omail1 = CreateItem(olMailItem)

    With omail1

    .Subject = "R Key Indicator Daily Report"
    .BodyFormat = olFormatHTML
    .To = "you.com"
    .Attachments.Add fileSun
    .Display

    End With

    Set omail2 = CreateItem(olMailItem)

    With omail2

    .Subject = "K Key Indicator Daily Report"
    .BodyFormat = olFormatHTML
    .To = "them.com"
    .Attachments.Add fileSun
    .Display

End With

End If

'ActiveWorkbook.Close
Set omail = Nothing

End Sub

【问题讨论】:

    标签: ms-access vba


    【解决方案1】:

    只需在您的 IF 语句之前添加一个检查,它会根据星期日的日期是 1 还是星期日的后一天是 1 来确定正确的 mysundate

    If DatePart("d", mysundate) = 1 _ 
            Or DatePart("d", DateAdd("d",1,mysundate) ) = 1 Then
        mysundate = DateAdd("m",-1,mysundate)
        mysatdate = DateAdd("m",-1,mysatdate)
        ...
    End If
    

    【讨论】:

    • @Thomas,谢谢你的帮助。但是文件扩展名最终让我感到困惑。 “I7”是我工作簿中具有“AUGUST”的单元格。所以我的文件 ext 正在读取 \\firework\public\FINANCE\Daily Report\FY10\Key Indicator\AUG10\Key Indicator Daily Report - 07\30\2010。什么时候 AUG10 实际上应该是 JUL10,随着日期的变化。
    猜你喜欢
    • 1970-01-01
    • 2018-12-30
    • 1970-01-01
    • 2018-12-06
    • 2018-03-28
    • 2017-03-06
    • 1970-01-01
    • 2017-11-30
    相关资源
    最近更新 更多