• ベストアンサー

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

  • VBA DoEvents関数の働きと使い方を知りたい

    下記のような UserForm上の Module コードを書いてももらったのですが、DoEvents の働きが分からないのです。どなたか分かりやすく説明していただけませんでしょうか? Private i As Integer Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) If Me.TextBox1.Value = Me.Label1.Caption Then Me.Label2.Caption = "正解です" Else Me.Label2.Caption = "不正解です" End If DoEvents If i < 20 Then i = i + 1 Label_Up Me.TextBox1.Value = "" Cancel = True Else MsgBox "終了です" End If End Sub Private Sub UserForm_Initialize() i = 1 Label_Up End Sub Private Sub Label_Up() Me.Label1.Caption = Sheets("Sheet1").Range("A1:A20").Cells(i).Value DoEvents End Sub

  • 文字列連結演算子を使った繰り返し(ループ)について

    Text1・Command1・Label1 と並んだBoxでText1に数字を入力しCommand1を押すと漢数字(一,二…)となるプログラムなのですが、一桁ずつ求めて行き最後に文字列連結演算子を使って求める場合はどのようにしたらよいのでしょうか? エラーが出るのでどこかが変なんだと思うのですが、何度みてもわからなくて。。。今途中の段階ですが当方がやったところまでを乗せておきますので。違うところや付け足すところなど指摘したり教えていただけたらと思っています。よろしくお願いします。 Private Sub Command2_Click() Dim a As Integer Dim b As String a = Val(Text1.Text) For x = 1 To 5 If a = 1 Then Label1.Caption = "一" ElseIf a = 2 Then Label1.Caption = "二" ElseIf a = 3 Then Label1.Caption = "三" ElseIf a = 4 Then Label1.Caption = "四" ElseIf a = 5 Then Label1.Caption = "五" ElseIf a = 6 Then Label1.Caption = "六" ElseIf a = 7 Then Label1.Caption = "七" ElseIf a = 8 Then Label1.Caption = "八" ElseIf a = 9 Then Label1.Caption = "九" Else Label1.Caption = "〇" sText1 = "1" & "2" & "3" & "4" & "5" & "6" & "7" & "8" & "9" sLabel1 = "一" & "二" & "三" & "四" & "五" & "六" & "七" & "八" & "九" End If End Sub

  • Excel VBAフォーム 登録ボタンの作成方法

    いつもお世話になっています。 初めて、Excelのフォームで入力画面を作りました。 複数の項目があって、それを最後に[登録]ボタンをクリックで 表に入れたいのですが、一度にまとめて実行する方法が分かりません。 アドバイスよろしくお願いいたします。 Private Sub cmd_1() Dim i As String If man.Value = True Then ActiveCell = man.Caption End If If woman.Value = True Then ActiveCell = woman.Caption End If ActiveCell.Offset(0, 1).Select End Sub Private Sub cmd_2() Dim i As String If man.Value = True Then ActiveCell = Yes.Caption End If If woman.Value = True Then ActiveCell = No.Caption End If ActiveCell.Offset(0, 1).Select End Sub Private Sub cmd_downlist() Dim ListNo As Long ListNo = group.ListIndex ActiveCell.Value = group.List(ListNo, i) ActiveCell.Offset(0, 1).Select End Sub Private Sub cmd_comment() ActiveCell = comment.Text ActiveCell.Offset(1, -3).Select End Sub

  • エクセルVBAについて

    エクセルのVBAについて、質問させて下さい。 下記コードはform上に記述しました。 オプションコマンドのオブジェクト数をcaseで選択し、その選択したものを格納しています。 Private Sub CommandButton1_Click() Dim i As Long lngData(1) = 0 For i = 1 To 12 If Me.Controls("OptionButton" & i).Value Then lngData(1) = i Exit For End If Next Select Case lngData(2) '←次のUserForm Case 1 Unload Me UserForm2.Show ・・・・ End Select End Sub でまた別form上で呼び出しているのですが、 この時にオプションコマンドcaptionを格納するにはどういったコードになるのでしょうか? またそれに際してコードに変更がある場合も教えてください。 素人質問ですので、そもそもオプションボタンのcaptionは格納なんてできないのなら諦めます。 では、よろしくお願い致します。 以上

  • Excel ユーザーフォーム呼び出し時エラー

    WindowsVista HomePremium Excel 2007 Microsoft Visual Basic 6.5 です。 Excelでユーザーフォーム(UserForm1)を作り、   Sub Auto_Open()     UserForm1.Show   End Sub で起動時に呼び出すようにしました。 確認のため、一度Excelを閉じ起動し直したところ正常に動作しました。 もう一度確認のため同じように再起動をすると、  実行時エラー '2110': コントロールが表示されていない、利用できない、またはフォーカスを持てないため、そのコントロールにフォーカスを移すことはできません。 と出て、それ以降何度やっても動作しなくなってしまいました。 解決法か原因がわかる方いらっしゃいましたら、ぜひご教授ください。よろしくおねがいします。 ユーザーフォーム関係のコードを以下に書いておきます。(内容は小遣い帳のようなものです。) ―――――――――――――――――――― Private Sub CommandButton1_Click() Dim NUM As Integer If TextBox1.Text = "" Then MsgBox "概要が記入されていません。" TextBox1.SetFocus GoTo 100 ElseIf TextBox2.Text = "" Then MsgBox "収支が記入されていません。" TextBox2.SetFocus GoTo 100 ElseIf ComboBox1.ListIndex = -1 Then MsgBox "収支の種類が選択されていません。" ComboBox1.SetFocus GoTo 100 End If Range("F6").Select NUM = 0 Do While ActiveCell.Offset(NUM, 0) <> "" NUM = NUM + 1 Loop ActiveCell.Offset(NUM, 0).Select ActiveCell = TextBox1.Value If CheckBox1 = True Then TextBox2 = -TextBox2 End If If ComboBox1.ListIndex = 0 Or ComboBox1.ListIndex = 1 Then ActiveCell.Offset(0, ComboBox1.ListIndex + 1) = TextBox2.Value Else ActiveCell.Offset(0, ComboBox1.ListIndex + 2) = TextBox2.Value End If TextBox1 = "" TextBox2 = "" CheckBox = Falses ComboBox1.ListIndex = -1 100 End Sub ―――――――――――――――――――― Private Sub CommandButton2_Click() Dim NUM As Integer If TextBox3.Text = "" Then MsgBox "移動金額が記入されていません。" TextBox3.SetFocus GoTo 100 ElseIf ComboBox2.Text = "" Then MsgBox "移動元が選択されていません。" ComboBox2.SetFocus GoTo 100 ElseIf ComboBox3.ListIndex = -1 Then MsgBox "移動先が選択されていません。" ComboBox3.SetFocus GoTo 100 End If Range("F6").Select NUM = 0 Do While ActiveCell.Offset(NUM, 0) <> "" NUM = NUM + 1 Loop ActiveCell.Offset(NUM, 0).Select ActiveCell = "移動" If ComboBox2.ListIndex = 0 Or ComboBox2.ListIndex = 1 Then ActiveCell.Offset(0, ComboBox2.ListIndex + 1) = -TextBox3.Value Else ActiveCell.Offset(0, ComboBox2.ListIndex + 2) = -TextBox3.Value End If If ComboBox3.ListIndex = 0 Or ComboBox3.ListIndex = 1 Then ActiveCell.Offset(0, ComboBox3.ListIndex + 1) = TextBox3.Value Else ActiveCell.Offset(0, ComboBox3.ListIndex + 2) = TextBox3.Value End If TextBox3 = "" ComboBox2.ListIndex = -1 ComboBox3.ListIndex = -1 100 End Sub ―――――――――――――――――――― Private Sub CommandButton3_Click() Unload Me End Sub ―――――――――――――――――――― Private Sub CommandButton4_Click() Unload Me End Sub ―――――――――――――――――――― Private Sub UserForm_Initialize() myarray1 = Array("収支", "クレジット", "郵便局", "机", "500", "1") For i = 0 To 5 ComboBox1.AddItem myarray1(i) ComboBox2.AddItem myarray1(i) ComboBox3.AddItem myarray1(i) Next i TextBox1.SetFocus End Sub

  • EXCEL VBAのユーザーフォームに引数を渡す方法について

    すいません、EXCEL VBAのユーザーフォームに引数を渡す方法についてご質問があります。 シート上にコマンドボタンを2つ用意する。 コマンドボタン1を押すと変数mは1 コマンドボタン2を押すと変数mは2 としてユーザーフォームを呼び出す。 Public m As Integer Private Sub CommandButton1_Click()  m = 1  Call フォーム呼び出し(m) End Sub Private Sub CommandButton2_Click()  m = 2  Call フォーム呼び出し(m) End Sub Sub フォーム呼び出し(m As Integer)  UserForm1.Show End Sub 次にユーザフォームにコマンドボタンを1個置き、 ボタンを押したとき、mが1であれば「ボタン1」 mが2であれば「ボタン2」 とメッセージボックスを出し、ユーザーフォームを閉じる。 Private Sub CommandButton1_Click()   If m = 1 Then    MsgBox "ボタン2"   ElseIf m = 2 Then    MsgBox "ボタン2"   End If  Unload UserForm1 End Sub プロシージャ間の引数渡しは色々なテキストに載っているのですが ユーザーフォームに引数を渡す方法はどうも見つからず、 Private Sub CommandButton1_Click(m) としても、コンパイルエラーとなってしまいます。 よろしくご教示をお願いいたします。

  • excel 2003 マクロですっきりさせたい

    お世話になります。 ユーザーフォーム上の テキストボックス 商品名_1の値が空白になったら ラベルも空白にするというマクロを組みました。 ラベルがたくさんあり、何かすっきりとできる方法があれば 教えてください!>< よろしくお願いします。 Private Sub 商品名_1_Change() If 商品名_1.Value = "" Then Label1_1.Caption = "" Label1_2.Caption = "" Label1_3.Caption = "" Label1_4.Caption = "" Label1_5.Caption = "" Label1_6.Caption = "" Label1_7.Caption = "" End If End Sub

  • エクセルVBAで

    CommandButton2がクリックされた時に、 すでに表示されているUserForm1を消したいのですが、 Private Sub CommandButton2_Click() UserForm1.(  ) End Sub (  )にくる言葉は何でしょうか?

  • エクセルVBAについて質問です

    お世話になります。 早速ですが、下記の構文を作成しましたが、Activecell.Rowの部分で悪さをし 上手く動きません。 行いたかった事としては、Functionにて関数を手作りしようと試みたのですが、 結局は壁にぶちあたってしまったって所です。。。 内容としては、エクセルが手動計算だった場合は、一回りで動作が終了するので 問題なく想定の値が叩き出されますが、自動計算にした途端に「別セルに入れた 計算式まで、Activecell.Rowに引きずられて計算をし、別の値に変わってしまう」 現象となってしまいました。。。(説明下手で済みません) Public Function Shotoku(houshu As Long) Dim ACcel As Variant Dim FR As Range With Worksheets("所得税月額表(平成24年分)") ACcel = houshu If ACcel < 88000 Then Shotoku = 0 Exit Function End If For Each FR In .Range("C13:C347") If ACcel < FR Then If Cells(ActiveCell.Row, 51) = 0 Then       ←問題の個所です Shotoku = .Cells(FR.Row, 4) ElseIf Cells(ActiveCell.Row, 51) = 1 Then    ←問題の個所です Shotoku = .Cells(FR.Row, 5) ElseIf Cells(ActiveCell.Row, 51) = 2 Then    ←問題の個所です Shotoku = .Cells(FR.Row, 6) ElseIf Cells(ActiveCell.Row, 51) = 3 Then    ←問題の個所です Shotoku = .Cells(FR.Row, 7) ElseIf Cells(ActiveCell.Row, 51) = 4 Then    ←問題の個所です Shotoku = .Cells(FR.Row, 8) ElseIf Cells(ActiveCell.Row, 51) = 5 Then    ←問題の個所です Shotoku = .Cells(FR.Row, 9) ElseIf Cells(ActiveCell.Row, 51) = 6 Then    ←問題の個所です Shotoku = .Cells(FR.Row, 10) ElseIf Cells(ActiveCell.Row, 51) = 7 Then    ←問題の個所です Shotoku = .Cells(FR.Row, 11) End If Exit For End If Next End With End Function 計算式を当て込んで、例えば2行目のIF文の条件に引っかかった場合、他の セルまでその行を読んでしまうので、条件が変わってしまう事態になってます。 イメージではActivecell.Rowがダメなんだと思いますが、これ以外のセル番地の 取得方法が分からなくって><; どなたかお助け願います!!!

  • コードの添削お願いします(変数エラー)

    Option Explicit Private Sub CommandButton1_Click() Dim myStr As String If myStr <> "" Then myStr = TextBox.Value Label1.Caption = LTrim(myStr) Label2.Caption = RTrim(myStr) Label3.Caption = Trim(myStr) Else MsgBox "終了" End If End Sub 変数のエラーが出ますが、何処がおかしいですか? 宜しくお願い致します。

専門家に質問してみよう