2010-06-09 3 views
0
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(Now()) = vbMonday Then 

    Set omail = CreateItem(olMailItem) 

    ROW_BEGIN = 1 
    ROW_END = 72 

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

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

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


    With omail 

    .Subject = "M Daily Report" 
    .BodyFormat = olFormatHTML 
    .HTMLBody = "<a href ='" & fileFri & "'>Key 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" 
    .Display 

    End With 

    Set omail1 = CreateItem(olMailItem) 

    With omail1 

    .Subject = "R Daily Report" 
    .BodyFormat = olFormatHTML 
    .To = "You" 
    .Attachments.Add fileFri 
    .Attachments.Add fileSat 
    .Attachments.Add fileSun 
    .Display 

    End With 

    Set omail2 = CreateItem(olMailItem) 

    With omail2 

    .Subject = "Mc Daily Report" 
    .BodyFormat = olFormatHTML 
    .To = "them" 
    .Attachments.Add fileFri 
    .Attachments.Add fileSat 
    .Attachments.Add fileSun 
    .Display 

End With 

Else 

    ROW_BEGIN = 1 
    ROW_END = 72 

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


    Set omail = CreateItem(olMailItem) 

    With omail 

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

    End With 

    Set omail1 = CreateItem(olMailItem) 

    With omail1 

    .Subject = "R Daily Report" 
    .BodyFormat = olFormatHTML 
    .To = "You" 
    .Attachments.Add fileSun 
    .Display 

    End With 

    Set omail2 = CreateItem(olMailItem) 

    With omail2 

    .Subject = "Mc Daily Report" 
    .BodyFormat = olFormatHTML 
    .To = "them" 
    .Attachments.Add fileSun 
    .Display 

End With 

End If 

'ActiveWorkbook.Close 
Set omail = Nothing 

End Sub 

У меня есть код в vba, где, если будний день в понедельник, excel будет генерировать 3 сообщения электронной почты с 3 прикреплениями/ссылками. Но если это не в понедельник, excel будет генерировать 3 сообщения электронной почты только с одним вложением/ссылкой. Моя проблема заключается в том, что в моей таблице Excel есть вкладка Actual и она заполняется датой. Если эта дата в моей электронной таблице Excel изменяется в понедельник, в любой другой день недели, мой код vba по-прежнему будет обрабатывать программу, как будто это понедельник. Мне нужен оператор IF, который позволит создавать 3 письма с 3-мя связями/ссылками, указанными на вкладке «Фактическое» в моей электронной таблице. Надеюсь, это не смущает.IF Statement in VBA

ответ

1

Чтобы указать другое действие в пятницу или субботу, вы должны добавить второе заявление, используя Elseif.

If Weekday(Worksheets("Actual").Range("A1").Value) = vbMonday Then 
    'Do this 
Elseif Weekday(Worksheets("Actual").Range("A1").Value) = vbFriday or _ 
Weekday(Worksheets("Actual").Range("A1").Value) = vbSaturday Then 
    'Do this instead 
Else 
    'What happens for all other days 
End If 

«сделай это вместо того, чтобы» если день пятницу или субботу может быть столь же просто, как «Exit Sub», который означает, что ничего не происходит. Обратите внимание, что оператор «или» требует, чтобы вы переформулировали все условия. Псевдокод: «Если сегодня пятница или суббота» не будет работать, вы должны использовать «Если сегодня пятница или сегодня - суббота».

Если вы обнаружили, что ваши потребности еще более конкретны, вы можете настроить оператор switch для каждого дня недели.

1

В настоящее время строка кода, которая оценивает равенство с понедельника (If Weekday(Now()) = vbMonday Then ), проверяет дату текущего, а не дату на листе, называемую «Фактическая». Вы должны изменить эту строку, чтобы быть чем-то вроде так:

If Weekday(Worksheets("Actual").Range("A1").Value) = vbMonday Then 

Вы хотите заменить A1 с местоположением значения даты, что вы против проверки, но должен возвращать дату, если он правильно отформатирован ,

+0

Спасибо, Бен. Еще один вопрос. Если я не хочу, чтобы он генерировал какие-либо письма в день пятницы или субботы, как я могу изменить/добавить в оператор IF? – Edmond

+0

@Edmond. Вам нужно изменить раздел 'Else' вашего кода на что-то вроде:' ElseIf Not Weekday (Work ...) = vbSaturday, а не Weekday (Work ...) = vbFriday Then'. Таким образом, раздел 'Else' кода выполняется, только если день не в субботу или пятницу. –