以下作品
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?
答案 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