2016-10-31 17 views
1

コードの_Changeメソッドにコードを割り当てると、ワークシートのセルA3ComboBoxが追加されます。 ComboBoxで値が変更されると、セルA2がその値で更新されるようにコードを書き込みます。ここでは、コードは次のようになります。
Combobox

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の設定を変更する必要がないように、この問題に近づく別の方法がありますか?つまり、クラスモジュールでマクロを割り当てるだけかもしれません。私はthisを試してみましたが、私はComboBoxの名前をUDFに渡すことができる必要がありますが、これを行うにはどうしたらいいのでしょうか、それともこの方法でも可能でしょうか?私がComboBoxの名前を渡したい理由は、ComboBoxの命名規則が私にComboBoxが作成されたセルアドレスを与えるからです。シートの各行に複数のComboBoxes(動的に作成された)があり、シートに複数の行があります。

+0

ここでの問題は、新しいVBAを動的に挿入しようとしていることです。各コントロールに新しいイベントを作成する代わりに、共有イベントを再利用することができます。十分に提示されたソリューションについては、この[質問](http://stackoverflow.com/questions/1083603/vba-using-withevents-on-userforms/1923457#1923457)を参照してください。 –

+0

@ destination-dataこれはまさに私がやりたいことです。私はそれを行こう。お返事ありがとう – Zac

答えて

0

理由のために、セキュリティセンターがあります。

これを回避するために、xl-vbaファイルを特定のフォルダに置くことができます。このフォルダを信頼できる場所として、次のような信頼できる設定として追加します。 信頼センター>信頼センター設定>信頼できる場所

しかし、信頼アクセスが選択されていることを確認するよりも、 。しかし、それはオプションです。

+1

返信ありがとうございます。残念ながら、このアプローチは、ユーザーが私と同じフォルダにアクセスできないため、私にとってはうまくいかない。私は完全に同意し、信頼センターの背後にある推論を理解します。したがって、私が使用できる別のアプローチがあるかどうかという疑問です。 – Zac

+0

@Zac、あなたが答えを見つけたら、私にタグをつけてください。 – Vityata