• ベストアンサー

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 = ・・・

質問者が選んだベストアンサー

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.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)
回答No.2

こんにちは、 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)
回答No.1

変数xがグローバル変数にしていないとか。 http://www.grapecity.com/japan/devclub/consultants/business_app/Consultant26.htm

関連するQ&A