声明工作表时,无法使用工作表中的对象

时间:2015-07-31 18:44:41

标签: 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时调用btnAfkeurMin?

2 个答案:

答案 0 :(得分:4)

我怀疑是因为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.Shapes("cmbDate").Value

答案 1 :(得分:0)

使用

WS.OLEObjects("btnAfkeurMin").Visible = True

如果您想直接使用Object,那么您也可以使用此

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