こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

投稿日時 - 2006-11-07 21:58:50

QNo.2524459

困ってます

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

こんにちは。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

投稿日時 - 2006-11-08 12:17:49

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.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が表示されますが、

このような感じでは、駄目なのですか??

投稿日時 - 2006-11-08 12:08:06

ANo.1

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

投稿日時 - 2006-11-08 02:33:57

あなたにオススメの質問