Vba 声明工作表时不能使用工作表中的对象

Vba 声明工作表时不能使用工作表中的对象,vba,excel,Vba,Excel,所以下面的工作 Sheet1.btnAfkeurMin.Visible = True 下面是不起作用的 Dim WS As Worksheet For Each WS In ThisWorkbook.Worksheets If cmbDate.Value = WS.Name Then WS.btnAfkeurMin.Visible = True end if next cmdDate.Value和WS.Name是相同的。值机控制台 使用WS时如何调用btn

所以下面的工作

Sheet1.btnAfkeurMin.Visible = True
下面是不起作用的

Dim WS As Worksheet

For Each WS In ThisWorkbook.Worksheets
    If cmbDate.Value = WS.Name Then
         WS.btnAfkeurMin.Visible = True
    end if
next
cmdDate.Value和WS.Name是相同的。值机控制台
使用WS时如何调用btnAfkeurMin?

我怀疑问题是因为btnAfkeurMin只分配了一次。在循环浏览工作表时,需要重新引用新工作表上的“新建”按钮

例如,此代码将在每个工作表中循环并隐藏所有名为btnAfkeurmin的按钮

Option Explicit

Sub TestFormControls()

        Dim WS As Worksheet

        For Each WS In ThisWorkbook.Worksheets
                WS.Shapes("btnAfkeurMin").Visible = msoFalse
        Next WS

End Sub
适应您的代码:

Option Explicit

Sub TestFormControls()
        Dim WS As Worksheet

        For Each WS In ThisWorkbook.Worksheets
            If cmbDate.Value = WS.Name Then
                 WS.Shapes("btnAfkeurMin").Visible = True
            End If
        Next

End Sub
如果需要引用名为cmbDate的不同组合框,则类似的逻辑也适用。如果您总是引用代码中前面声明的一个,那么这很好,我根据您的cmbDate.Value=WS.Name计算结果为true的语句收集到的结果就是这样

但是,如果出于某种原因,您需要引用的每张工作表上都有一个不同的组合框,那么您可以使用相同的方式:


WS.ShapescmbDate.Value

我怀疑问题是因为btnAfkeurmin只分配了一次。在循环浏览工作表时,需要重新引用新工作表上的“新建”按钮

例如,此代码将在每个工作表中循环并隐藏所有名为btnAfkeurmin的按钮

Option Explicit

Sub TestFormControls()

        Dim WS As Worksheet

        For Each WS In ThisWorkbook.Worksheets
                WS.Shapes("btnAfkeurMin").Visible = msoFalse
        Next WS

End Sub
适应您的代码:

Option Explicit

Sub TestFormControls()
        Dim WS As Worksheet

        For Each WS In ThisWorkbook.Worksheets
            If cmbDate.Value = WS.Name Then
                 WS.Shapes("btnAfkeurMin").Visible = True
            End If
        Next

End Sub
如果需要引用名为cmbDate的不同组合框,则类似的逻辑也适用。如果您总是引用代码中前面声明的一个,那么这很好,我根据您的cmbDate.Value=WS.Name计算结果为true的语句收集到的结果就是这样

但是,如果出于某种原因,您需要引用的每张工作表上都有一个不同的组合框,那么您可以使用相同的方式:

WS.ShapescmbDate.Value

使用

WS.OLEObjects("btnAfkeurMin").Visible = True
如果要直接使用对象,也可以使用此

Worksheets(WS.Name).btnAfkeurMin.Visible = True
使用

如果要直接使用对象,也可以使用此

Worksheets(WS.Name).btnAfkeurMin.Visible = True

你说不工作是什么意思?您是否得到错误或意外的结果?cmbDate和'btnAfkeurMin1分别是一个组合框和按钮吗?@JoshuaRoss我得到一个错误,关于方法的一些东西没有找到。不过是荷兰语。它们确实是一个组合框和一个按钮。您是否声明了变量cmbDate和btnAfkeurMin?@JoshuaRoss是的,请记住,如果我使用工作表的实际名称而不是WS,则代码可以正常工作,但我需要在所有工作表中循环。我之所以问这个问题,是因为btnAfkeurMin在任何地方都设置过一次,而且,即使您正在更改工作表,您似乎也没有更改按钮。我阅读它的方式是,每张工作表上都有一个按钮,但是btnAfkeurmin并没有随着工作表的变化而改变定义。你说的不工作是什么意思?您是否得到错误或意外的结果?cmbDate和'btnAfkeurMin1分别是一个组合框和按钮吗?@JoshuaRoss我得到一个错误,关于方法的一些东西没有找到。不过是荷兰语。它们确实是一个组合框和一个按钮。您是否声明了变量cmbDate和btnAfkeurMin?@JoshuaRoss是的,请记住,如果我使用工作表的实际名称而不是WS,则代码可以正常工作,但我需要在所有工作表中循环。我之所以问这个问题,是因为btnAfkeurMin在任何地方都设置过一次,而且,即使您正在更改工作表,您似乎也没有更改按钮。我阅读它的方式是,每张工作表上都有一个按钮,但btnAfkeurmin并没有随着工作表的变化而改变定义。