根据不同的变量对工作表名称运行两个不同的测试

To run two different tests on sheet names dependant on different variables

提问人:Sijam 提问时间:11/15/2023 最后编辑:Sijam 更新时间:11/18/2023 访问量:58

问:

我有单独的员工职责周表,有些表我不想公开。

我想使用宏将每周值班表按顺序发布到另一个多周电子表格上。

我还希望能够在对私人工作簿进行更改时更新这些工作表,从此公共工作簿中删除多余的工作表,并在完成后对其进行保护。

以下是我到目前为止所拥有的,我已经尝试了变体,但宏需要采取不同的操作,具体取决于周表是否已经存在以及是否有冗余表。 我可以让一些组合起作用,但不是全部。

我缺少哪些步骤或命令,或者我是否需要不同的方法?

Private Sub CommandButton1_Click()
    'To set variables
    Dim sht As Worksheet
    
    'Current dated sheet
    Dim sname As String
    sname = Sheets("Calc").Range("C18")
    
    'Prior dated sheet
    Dim pname As String
    pname = Sheets("Calc").Range("G18")
    
    'Redundant dated sheet
    Dim delname As String
    delname = Sheets("Calc").Range("C33")
    
        
        'To copy over sheet to Duty Sheets workbook
        'To check if dated sheet exists
        For Each sht In Workbooks("SCL Duties.xlsm").Worksheets
            If sht.Name = sname Then
                'Replace existing sheet with new one
                Application.DisplayAlerts = False
                Workbooks("SCL Duties").Sheets(sname).Delete
                Application.DisplayAlerts = True
                ThisWorkbook.Sheets(sname).Copy After:=Workbooks("SCL Duties.xlsm").Sheets(pname)
    
            End If
    
            'To check for redundant sheet and delete
            If sht.Name = delname Then
                Application.DisplayAlerts = False
                Workbooks("SCL Duties").Sheets(delname).Delete
                Application.DisplayAlerts = True
            End If
        Next sht
    
        ThisWorkbook.Sheets(sname).Copy After:=Workbooks("SCL Duties.xlsm").Sheets(pname)
        Application.DisplayAlerts = False
        ThisWorkbook.Sheets(sname).Delete
        Application.DisplayAlerts = True
        
End Sub
Excel VBA

评论

1赞 Sijam 11/15/2023
感谢 ipStack 的编辑 - 非常感谢
0赞 SJR 11/15/2023
我认为不清楚你在问什么。也许阅读最小的可重复示例
0赞 Sijam 11/16/2023
工作表名称有两种不同的测试,其结果取决于它们是否存在。我似乎只能运行其中一个测试,而不会在第二个“For Each sht In Workbooks(”SCL Duty.xlsm“)上出现错误。工作表“或第二个”If sht.Name = delname Then”。我不能同时得到“如果 sht.Name = X Then“测试才能正常工作。
0赞 Sijam 11/17/2023
当它到达“If sht.Name = delname 然后“我得到并出错。将鼠标悬停在“If Sh.Name”部分上会给出 Automation 错误,但将鼠标悬停在 delname 上会给出正确的变量。

答:

0赞 Sijam 11/18/2023 #1

我发现我需要将两个不同的对象定义为工作表,然后我可以在工作簿中进行两次单独的搜索。

Dim sht As Worksheet

Dim shta As Worksheet

然后我可以使用进行两次搜索

For Each sht In Workbooks("SCL Duties.xlsm").Worksheets

For Each shta In Workbooks("SCL Duties.xlsm").Worksheets