- ベストアンサー
Excel VBAについて
Excel VBAにおいて、Sheetの選択した行によって値を表示するUserFormを変更したいと思っています。 現在以下のようにしたのですが、実行すると「SubまたはFunctionが定義されていません」というエラーが表示されます。 「Controls("UserForm" & x).Label1.Caption =」のところをどのようにしたらよいのでしょうか。 Private Sub CommandButton1_Click() If ActiveCell.Row = 5 Then UserForm1.Show x = 1 ElseIf ActiveCell.Row = 6 Then UserForm2.Show x = 2 End If End Sub Private Sub Worksheet_Selection Change(Byval Target As Range) Controls("UserForm" & x).Label1.Caption = ・・・
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。KenKen_SP です。 > Controls("UserForm" & x).Label1.Caption このような書き方がしたいなら、 ThisWorkbook.VBProject.VBComponents(Index)・・・・ ですが、マクロのセキュリティー設定で 「Visual Basic プロジェクトへのアクセスを信頼する」 にチェックが入ってなければいけなかったような...確認してないですが。 こんな風にしたらどうですか? Private msCaption As String Private Sub CommandButton1_Click() Select Case ActiveCell.Row Case 5 With UserForm1 .Label1.Caption = msCaption .Show End With Case 6 With UserForm2 .Label1.Caption = msCaption .Show End With End Select End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) msCaption = Target.Address ' 取り合えずアドレスを入れてみた End Sub
その他の回答 (2)
- tom11
- ベストアンサー率53% (134/251)
こんにちは、 Private Sub Worksheet_Selection Change(Byval Target As Range) これ、シートを選んだ時のイベント処理ですよね。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Row = 5 Then UserForm1.Label1.Caption = "100" UserForm1.Show ElseIf Target.Row = 6 Then UserForm2.Label1.Caption = "200" UserForm2.Show End If End Sub このような、イベント処理にすれば、 5行を選択するとuserform1が表示され、 6行を選択すると、userform2が表示されますが、 このような感じでは、駄目なのですか??
- popesyu
- ベストアンサー率36% (1782/4883)
変数xがグローバル変数にしていないとか。 http://www.grapecity.com/japan/devclub/consultants/business_app/Consultant26.htm