21

プロジェクトの「モジュール」セクションにtransfer記述したマクロを実行するために、Excel ユーザーフォームフォームで動的に作成したボタンを取得しようとしています。Module 1

以下に、これまでに書いたコードをユーザーフォームに貼り付けました。これにより、実際にTransfer to Sheetフレーム内にボタンを作成できます (これも動的に作成しました) が、何らかの理由で、VBA を実行すると、次のような438 errorメッセージが表示されます。Object doesn't support this property or method.

どうすればこれを解決できるか教えてもらえますか?

コードは次のとおりです。

Dim framecontrol1 As Control

Set workitemframe = Controls.Add("Forms.Frame.1")
With workitemframe
    .Width = 400
    .Height = 400
    .Top = 160
    .Left = 2
    .ZOrder (1)
    .Visible = True
End With

workitemframe.Caption = "Test"
Set framecontrol1 = workitemframe.Controls.Add("Forms.commandbutton.1")

With framecontrol1
    .Width = 100
    .Top = 70
    .Left = 10
    .ZOrder (1)
    .Visible = True
    .Caption = "Transfer to Sheet"
End With
framecontrol1.OnAction = "transfer"
4

2 に答える 2

25

ここに例があります。必要に応じて修正してください:)

この例では、コマンド ボタンを作成し、ボタンを押すと "Hello World" が表示されるようにコードを割り当てます。

このコードをコマンド ボタンのクリック イベントに貼り付けます。これにより、新しいコマンド ボタンが動的に作成され、コードが割り当てられます。

Option Explicit

Dim cmdArray() As New Class1

Private Sub CommandButton1_Click()
    Dim ctl_Command As Control
    Dim i As Long

    i = 1

    Set ctl_Command = Me.Controls.Add("Forms.CommandButton.1", "CmdXYZ" & i, False)

    With ctl_Command
        .Left = 100
        .Top = 100
        .Width = 255
        .Caption = "Click Me " & CStr(i)
        .Visible = True
    End With

    ReDim Preserve cmdArray(1 To i)
    Set cmdArray(i).CmdEvents = ctl_Command

    Set ctl_Command = Nothing

End Sub

このコードをクラスモジュールに貼り付けます

Option Explicit

Public WithEvents CmdEvents As MSForms.CommandButton

Private Sub CmdEvents_Click()

    MsgBox "Hello Word"

End Sub

スナップショット

ここに画像の説明を入力 ここに画像の説明を入力

于 2012-04-19T09:13:25.293 に答える
9

コードをプログラムで UserForm に追加する必要があります。このvbax 記事のコードを参照として使用しました

以下のコード:

  1. 通常のモジュールから実行
  2. UserForm1 というUserFormにボタンを追加します。
  3. クリックイベントのユーザーフォームにこのコードを追加します

    Private Sub CommandButton1_Click()
    Call Transfer
    End Sub
    

通常のモジュールからの VBA

    Sub AddToForm()
    Dim UF As Object
    Dim frameCOntrol1 As Object
    Set UF = ActiveWorkbook.VBProject.VBComponents("UserForm1")
    Set frameCOntrol1 = UF.designer.Controls.Add("Forms.CommandButton.1")
    With frameCOntrol1
        .Width = 100
        .Top = 70
        .Left = 10
        .ZOrder (1)
        .Visible = True
        .Caption = "Transfer to Sheet"
    End With

    With UF.CodeModule
        .InsertLines 2, _
                     "Private Sub " & frameCOntrol1.Name & "_Click()" & Chr(13) & _
                     "Call Transfer" & Chr(13) & _
                     "End Sub"
    End With

End Sub
于 2012-04-19T11:14:34.553 に答える