2

以下の私のコードは、行にエラーを出しています

Set VM = AP.VBProject.VBComponents("ViewManager").Designer.Controls

動作するコードの多くの例を調べましたが、エラーを引き起こすために私の設定がどのように異なっているかわかりません。

エラーはRun-time error '91': Object variable or With block variable not set

助けてくれてありがとう。

Private Sub btnAdd_Click()
    Dim View As String
    Dim FField As String
    Dim TField As String
    View = cmbView.Value
    FField = cmbFrmFld.Value
    TField = cmbToFld.Value

    'if it is the first add change one way, if after the first add change another
    If ViewManager.Height = 116 Then
        ViewManager.Height = ViewManager.Height + 64.5
    ElseIf frmViews.Height > 116 Then
        ViewManager.Height = ViewManager.Height + 30
    End If

    Dim AP As Project
    Set AP = ActiveProject
    Dim lbl As MSForms.Label
    Dim VM As Object

    Set VM = AP.VBProject.VBComponents("ViewManager").Designer.Controls
    With VM
        Set lbl = .Add("Forms.Label.1")
    End With

    With lbl
        .Left = 6
        .Top = ViewManager.Height - 32
        .Width = 156
        .Caption = View
    End With
End Sub
4

1 に答える 1

1

あなたの問題は、VBIDE Forms Designer を使用して、ロード時に ViewManager フォームにコントロールを追加していることだと思いますが、これは不可能です。モジュールに次のコードを追加し、マウスが停止する 'VM' VBComponent にウォッチを追加することを確認できます (右クリックしてウォッチを追加します)。「Designer」プロパティが「Nothing」であることがわかりますが、フォームが読み込まれていないときに同じコードを実行すると、Designer プロパティとそのすべてのプロパティにアクセスできます。

Sub CheckVBComponent()
    Dim AP As Project, VM as VBIDE.VBComponent

    Set AP = ActiveProject
    'Note also this assumes that you've named your ViewManager correctly in the VBProject
    Set VM = AP.VBProject.VBComponents("ViewManager")

    'Add watch here
    Stop
End Sub

ここでの簡単な回避策は、実行時にコントロールをフォームに直接追加し、VBIDE を使用しないことです。例えば:

Sub AddLabeltoMSProject
   Dim frmLbl As MSForms.Label

   Set frmLbl = ViewManager.Controls.Add("Forms.Label.1")

   With frmLbl
       .Caption = "I really love labels"
       .Top = ViewManager.Height - 32
       .Left = 6
       .Width = 156
   End With
End Sub
于 2013-01-30T22:43:46.187 に答える