通过Excel中的自定义加载项来修改ActiveX控件

我正在将一个工作表移动到一个加载项中,这样我就可以更新代码,而无需向每个人提供新的工作簿。 这个过程相当直接,直到我到了附加代码需要修改表单中存在的ActiveX控件的区域。

我之前使用的代码来修改这些:

If Sheet1.Range(RowHighlightToggle.LinkedCell).Value = True Then RowHighlightToggle.Caption = "Row Highlight - On" HighlightStatus = 0 Else RowHighlightToggle.Caption = "Row Highlight - Off" HighlightStatus = 1 End If 

RowHightlightToggle是有问题的ActiveX控件。 在加载项内编码时,我不确定如何引用此button。 我试过做Sheet1.RowHighlightToggle.LinkedCell ,这也给我一个错误。 我没有在加载项中使用Sheet1 ,因为我有一个函数从目标工作簿中获取代码名,所以Sheet1通常是类似AWSheet1东西,但它是一个Worksheetvariables,所以这也不是问题。 我可以很容易地阅读链接的单元格的值,但我没有办法改变button标题,而不用参考代码中的button。

此button将始终存在于正在制作此加载项的工作簿中,我还有其他代码以确保加载项仅在该工作簿中可见,并隐藏其他任何人。

有没有办法通过加载项引用button或可能的方式将标题链接到单元格,所以我可以更改单元格值来更新标题?

经过多一点的研究后,我发现我可以通过使用OLEObjects来引用它,包括其余的sub的工作代码如下。

 Sub RowHighlightToggle() '-----Startup Code-------- With Application .ScreenUpdating = False .DisplayStatusBar = False .DisplayAlerts = False End With '------------------------ Dim HighlightStatus As Long, AWSheet1 As Worksheet, ThisButton As Object If TargetWorkbook Is Nothing Then Set TargetWorkbook = ActiveWorkbook Set AWSheet1 = GetWsFromCodeName(TargetWorkbook, "Sheet1") Set ThisButton = AWSheet1.OLEObjects("RowHighlightToggle") Call Common_Functions.StartUnlock If AWSheet1.Range(ThisButton.LinkedCell).Value = True Then ThisButton.Object.Caption = "Row Highlight - On" HighlightStatus = 0 Else ThisButton.Object.Caption = "Row Highlight - Off" HighlightStatus = 1 End If Call Common_Functions.StartLock If Worksheets.Count > 6 Then Call Common_Functions.SheetArrayBuild(TargetWorkbook) For i = LBound(SheetArray) To UBound(SheetArray) Sheets(SheetArray(i, 1)).Range("Z1").Value = HighlightStatus Next i End If '-----Finish Code-------- With Application .ScreenUpdating = True .DisplayStatusBar = True .DisplayAlerts = True .EnableEvents = True End With '------------------------ End Sub 

以及从工作簿中获取工作表的function

 Function GetWsFromCodeName(wb As Workbook, CodeName As String) As Excel.Worksheet Dim ws As Excel.Worksheet For Each ws In wb.Worksheets If ws.CodeName = CodeName Then Set GetWsFromCodeName = ws Exit For End If Next ws End Function 

假设控件在Sheet1上,你应该可以使用:

 Sheet1.RowHightlightToggle.Caption = "Row Highlight - On" 

但是你也可以使用形状集合进行控制:

 Sheet1.Shapes("RowHightlightToggle").DrawingObject.Object.Caption = "Row Highlight - On" 

或者,使用更通用的工作簿variables:

 Dim userWorkbook as Workbook Set userWorkbook = Workbooks("UserData.xlsm") userWorkbook.Worksheets("Foo").Shapes("RowHightlightToggle").DrawingObject.Object.Caption = "Row Highlight - On"