Excel 根据星期几自动运行宏
我正在尝试设置工作簿,该工作簿将查看一周中的某一天,并为该天提取相应的宏。例如,我每周都有7个宏的标题,因为今天是星期三,我希望用户打开工作簿时打开星期三宏 我有以下代码,但不确定哪里出错Excel 根据星期几自动运行宏,excel,vba,Excel,Vba,我正在尝试设置工作簿,该工作簿将查看一周中的某一天,并为该天提取相应的宏。例如,我每周都有7个宏的标题,因为今天是星期三,我希望用户打开工作簿时打开星期三宏 我有以下代码,但不确定哪里出错 Private Sub Workbook_Open() Dim sDate As String sDate = Format(Date, "ddmmyyyy") If Weekday(sDate, vbSunday) = 1 Then Call SundayEfficiency Else If Wee
Private Sub Workbook_Open()
Dim sDate As String
sDate = Format(Date, "ddmmyyyy")
If Weekday(sDate, vbSunday) = 1 Then
Call SundayEfficiency
Else
If Weekday(sDate, vbMonday) = 2 Then
Call MondayEfficiency
Else
If Weekday(sDate, vbTuesday) = 3 Then
Call TuesdayEfficiency
Else
If Weekday(sDate, vbWednesday) = 4 Then
Call WednesdayEfficiency
Else
If Weekday(sDate, vbThursday) = 5 Then
Call ThursdayEfficiency
Else
If Weekday(sDate, vbFriday) = 6 Then
Call FridayEfficiency
Else
If Weekday(sDate, vbSaturday) = 7 Then
Call SaturdayEfficiency
End If
End Sub
问题在于您构建代码的方式。如果我缩进您的代码,您的代码将如下所示
If Weekday(sDate, vbSunday) = 1 Then
Call SundayEfficiency
Else
If Weekday(sDate, vbMonday) = 2 Then
Call MondayEfficiency
Else
If Weekday(sDate, vbTuesday) = 3 Then
Call TuesdayEfficiency
Else
If Weekday(sDate, vbWednesday) = 4 Then
Call WednesdayEfficiency
Else
If Weekday(sDate, vbThursday) = 5 Then
Call ThursdayEfficiency
Else
If Weekday(sDate, vbFriday) = 6 Then
Call FridayEfficiency
Else
If Weekday(sDate, vbSaturday) = 7 Then
Call SaturdayEfficiency
End If
使用上述代码遇到的第一个问题是,必须为每个If添加End If
你真正想要的是
If Weekday(sDate, vbSunday) = 1 Then
Call SundayEfficiency
ElseIf Weekday(sDate, vbMonday) = 2 Then
Call MondayEfficiency
ElseIf Weekday(sDate, vbTuesday) = 3 Then
Call TuesdayEfficiency
ElseIf Weekday(sDate, vbWednesday) = 4 Then
'
'~~> And so on...
'
End If
或者,您可以使用selectcase
如果查看for the Weekday函数,您将看到第二个参数设置了一周中的哪一天应作为第一天。因此,调用WeekdaysDate,vbTuesday将返回1表示星期二,2表示星期三,以此类推
因此,您的代码只有在星期天才能正常工作。星期二将运行MondayEfficiency,因为如果将一周的第一天设置为vbMonday,则星期二是一周的第二天。星期三将运行FridayEfficiency,因为如果您从星期五开始,星期三是第6天
在我们进行此项工作时,还有一些其他方面可以改进:工作日可以采用日期序列值,因此无需转换为字符串;在这里,case语句更有效,可读性更强
综合起来:
Private Sub Workbook_Open()
Select Case Weekday(Date, vbSunday)
Case 1
Call SundayEfficiency
Case 2
Call MondayEfficiency
Case 3
Call TuesdayEfficiency
Case 4
Call WednesdayEfficiency
Case 5
Call ThursdayEfficiency
Case 6
Call FridayEfficiency
Case 7
Call SaturdayEfficiency
End Select
End Sub
你还没说出什么问题。你的代码现在怎么了?啊,我很抱歉。确切地说,这没什么用。我保存VBA,然后重新加载工作表,但它没有运行今天的宏。好的,这很有意义,它编译得很好,但当我现在加载工作簿时,它会返回一个错误“隐藏模块中的编译错误:模块6”。当代码与此应用程序的版本、平台或体系结构不兼容时,通常会发生此错误。我正在使用2016版Excel。您需要为此创建一个新问题。不过,谷歌搜索错误消息会带来一些看起来很有希望的线索。
Private Sub Workbook_Open()
Select Case Weekday(Date, vbSunday)
Case 1
Call SundayEfficiency
Case 2
Call MondayEfficiency
Case 3
Call TuesdayEfficiency
Case 4
Call WednesdayEfficiency
Case 5
Call ThursdayEfficiency
Case 6
Call FridayEfficiency
Case 7
Call SaturdayEfficiency
End Select
End Sub