1

I have a module that creates command buttons during run-time. It will create the command buttons in a specified user-form. Program works fine, when I execute the module.

However when I use the user-form to call the module instead, I have a error stating

Run-time error '91': Object variable or With block variable not set

Code

 Sub AddButtonAndShow()

    Dim Butn As CommandButton
    Dim Line As Long
    Dim objForm As Object
    Dim i As Integer
    Dim x As Integer

    Set objForm = ThisWorkbook.VBProject.VBComponents("Current_Stock")



For i = 1 To 3
    Set Butn = objForm.Designer.Controls.Add("Forms.CommandButton.1")
    With Butn
        .Name = "CommandButton" & i
        .Caption = i
        .Width = 100
        .Left = 300
        .Top = 10 * i * 2
    End With
Next

    For x = 1 To 3
        With objForm.CodeModule
            Line = .CountOfLines
            .InsertLines Line + 1, "Sub CommandButton" & x & "_Click()"
            .InsertLines Line + 2, "MsgBox ""Hello!"""
            .InsertLines Line + 3, "End Sub"
      End With
    '
     Next x

End Sub

Kindly advise.

4

1 に答える 1

2

編集された投稿: VBProject フォーム コンポーネントに基づく

以前の投稿は、Excel シートのボタンに関するものです。フォーム ボタンについては、それ自体captionを直接参照して設定できることに気付きました。button私はあなたのコードを試しました。エラーが見つからないようです。私が行った追加の唯一のことは、参照ライブラリ(MS VB Extensibility 5.3)、Privateスコープをコードに追加し、コードを1つのwithステートメントに結合することでした。

このMr.Excel の記事do Eventsによると、 VB エディターを閉じたときにコードを実行するには、追加する必要があります。あなたのエラーは、記事で言及されているものと非常によく似ているようです。

改訂されたコード:

Sub AddButtonAndShow()

    Dim Butn As CommandButton
    Dim Line As Long
    Dim objForm As Object
    Dim i As Integer
    Dim x As Integer
    Dim code As String

        Application.DisplayAlerts = False
        DoEvents
        On Error Resume Next
        Set objForm = ActiveWorkbook.VBProject.VBComponents.Add(vbext_ct_MSForm)
        objForm.Name = "thisform1"

        For i = 1 To 3
            Set Butn = objForm.Designer.Controls.Add("Forms.CommandButton.1")
            With Butn
                    .Name = "CommandButton" & i
                    .Caption = i
                    .Width = 100
                    .Left = 100
                    .Top = (i * 24) + 10

                    Line = objForm.CodeModule.CountOfLines + 1
                    code = "Private Sub " & Butn.Name & "_Click()" & vbCr
                    code = code & "MsgBox ""Hello!""" & vbCr
                    code = code & "End Sub"
                    objForm.CodeModule.InsertLines Line, code
              End With
        Next
        Application.DisplayAlerts = False
   VBA.UserForms.Add(objForm.Name).Show
End Sub

Excel コマンド ボタンのコード:

Private Sub CommandButton3_Click()
Call AddButtonAndShow
End Sub

出力: Excel シート ボタンを使用して、新しく作成されたボタン付きのフォームを開きます。

ここに画像の説明を入力


最初の投稿:

参考までに、この投稿をご覧ください: Excel VBA create a button beside cell

  • ( object doesn't support property or method)によるエラーの可能性は、Captionプロパティの範囲内です。で設定する必要があるためtheBttn.Object.Caption

これを試してください:

With Butn
  .Name = "CommandButton" & i
  .Object.Caption = i
  .Width = 100
  .Left = 300
  .Top = 10 * i * 2
End With
于 2013-01-01T09:31:27.253 に答える