以下代碼在工作表的單元格A3
中添加了一個ComboBox
。它還會寫入代碼,以便在ComboBox
中更改值時,將使用該值更新單元格A2
。下面是代碼:
將代碼分配給組合框的_Change方法
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
(動態創建),並且工作表中會有多行
這裏的問題是試圖動態插入新的VBA。您可以重新使用共享事件,而不是爲每個控件創建新事件。看到這[問題](http://stackoverflow.com/questions/1083603/vba-using-withevents-on-userforms/1923457#1923457)爲一個良好的解決方案。 –
@ destination-data這正是我想要做的。我會放棄它。謝謝 – Zac