下面的代码会在工作表的单元格ComboBox
中添加A3
。它还会编写代码,以便在ComboBox
中更改值时,将使用值更新单元格A2
。这是代码:
Sub AddComboBox()
Dim oWS As Worksheet: Set oWS = ThisWorkbook.Worksheets("Sheet7")
Dim oRN As Range: Set oRN = oWS.Range("A3")
Dim oCB As Object
Dim sCode As String
Dim iLR As Integer
' Get last row for column D (holds the values for combobox)
With oWS
iLR = .Cells(.Rows.Count, "D").End(xlUp).Row
End With
' Create Combobox
With oRN
Set oCB = oWS.OLEObjects.Add("Forms.Combobox.1", Left:=.Left, Top:=.Top, Height:=.Height, Width:=.Width)
oCB.ListFillRange = "Sheet7!D1:D" & iLR
oCB.Name = "cmbTest1"
oCB.Object.Font.Size = 8
End With
' Set code to add for the Combobox
sCode = "Private Sub " & oCB.Name & "_Change()" & Chr(13) & _
" ThisWorkbook.Worksheets(" & Chr(34) & oWS.Name & Chr(34) & ").Range(" & Chr(34) & "A2" _
& Chr(34) & ").Value = Me." & oCB.Name & ".Value" & _
"End Sub"
' Add the code for Combobox
With ThisWorkbook.VBProject.VBComponents(oWS.Name).CodeModule
.InsertLines .CountOfLines + 1, sCode
End With
End Sub
代码工作正常,但要使其正常工作,用户必须确保在信任中心中选择了Trust access to the VBA project object model
。我的问题是,有没有其他方法来解决这个问题,以便用户不必更改他们的PC上的设置?也许只是在Class模块中分配一个宏。我确实尝试了this但是我需要能够将ComboBox
的名称传递给被调用的UDF,但是不知道如何做到这一点,或者这种方法是否可行?我想传递ComboBox
名称的原因是:ComboBox
的命名约定将为我提供创建ComboBox
的单元格地址。我需要这个,因为工作表中的每一行都有多个ComboBoxes
(动态创建),并且工作表中会有多行
答案 0 :(得分:0)
信托中心是有原因的。
为了解决这个问题,您可以将xl-vba文件放在特定的文件夹中。然后通过可信设置将此文件夹添加为受信任位置,如下所示: 信任中心>信任中心设置>信任位置
但我不确定这是否比确保选择Trust访问权限要少。但是,这是一个选择。