Excel 中的多对象表达式,函数在所有工作表中循环

Excel 中的多对象表达式,函数在所有工作表中循环,excel,vba,Excel,Vba,我有一个Excel电子表格,由两张表组成(Sheet1和Sheet2)。 在每张纸上我都有一个按钮1 为了在两张图纸中将此按钮移动到范围(“D9:E11”),我使用以下VBA参考解决方案: 到目前为止,所有这些都非常有效 然而,现在这个Excel文件将变得更大,而不是两张表,我将有更多的表(例如30张)。在这种情况下,我必须将所有这些工作表添加到子示例() 我需要在上面的代码中做什么更改才能使其独立于图纸数量,这样无论我有多少张图纸,按钮都会在所有图纸中移动到范围(“D9:D11”)。这非常简

我有一个Excel电子表格,由两张表组成(
Sheet1
Sheet2
)。 在每张纸上我都有一个
按钮1

为了在两张图纸中将此按钮移动到
范围(“D9:E11”)
,我使用以下VBA参考解决方案:

到目前为止,所有这些都非常有效


然而,现在这个Excel文件将变得更大,而不是两张表,我将有更多的表(例如30张)。在这种情况下,我必须将所有这些工作表添加到
子示例()


我需要在上面的代码中做什么更改才能使其独立于图纸数量,这样无论我有多少张图纸,按钮都会在所有图纸中移动到
范围(“D9:D11”)

这非常简单。遵循相同的逻辑并声明一个
可选的
布尔变量,比如说,
AllSheets

Sub Sample()
    MoveButton Sheet1, "Button 1", True
End Sub

Sub MoveButton(sh As Worksheet, btnName As String, Optional AllSheets As Boolean)
    Dim Range_Position As Range
    Dim ws As Worksheet

    Set Range_Position = sh.Range("D9:E11")

    If AllSheets = True Then
        For Each ws In ThisWorkbook.Sheets
            With ws.Buttons(btnName)
                .Top = Range_Position.Top
                .Left = Range_Position.Left
                .Width = Range_Position.Width
                .Height = Range_Position.Height
                .Text = "Button"
            End With
        Next ws
    Else
        With sh.Buttons(btnName)
            .Top = Range_Position.Top
            .Left = Range_Position.Left
            .Width = Range_Position.Width
            .Height = Range_Position.Height
            .Text = "Button"
        End With
    End If
End Sub

对于代码,我在ws.Buttons(btnName)上出现运行时错误1004,可能是因为没有具有该名称的按钮?调试代码并检查在eOri发现问题时的工作表名称。原因是有一张纸没有这个按钮1。我想知道是否也有办法从代码中排除这一页。是的,有。用ws.Buttons(btnName)检查该按钮是否存在于行
之前。试一试,如果你被卡住了,那么把你试过的代码贴出来,我们会从那里拿走吗?
Sub Sample()
    MoveButton Sheet1, "Button 1", True
End Sub

Sub MoveButton(sh As Worksheet, btnName As String, Optional AllSheets As Boolean)
    Dim Range_Position As Range
    Dim ws As Worksheet

    Set Range_Position = sh.Range("D9:E11")

    If AllSheets = True Then
        For Each ws In ThisWorkbook.Sheets
            With ws.Buttons(btnName)
                .Top = Range_Position.Top
                .Left = Range_Position.Left
                .Width = Range_Position.Width
                .Height = Range_Position.Height
                .Text = "Button"
            End With
        Next ws
    Else
        With sh.Buttons(btnName)
            .Top = Range_Position.Top
            .Left = Range_Position.Left
            .Width = Range_Position.Width
            .Height = Range_Position.Height
            .Text = "Button"
        End With
    End If
End Sub