Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 根据星期几自动运行宏_Excel_Vba - Fatal编程技术网

Excel 根据星期几自动运行宏

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

我正在尝试设置工作簿,该工作簿将查看一周中的某一天,并为该天提取相应的宏。例如,我每周都有7个宏的标题,因为今天是星期三,我希望用户打开工作簿时打开星期三宏

我有以下代码,但不确定哪里出错

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