Excelマクロ初心者のためのボタンクリック時のエラー

このQ&Aのポイント
  • Excelマクロ初心者がツールバーのボタンをクリックするとエラーメッセージが出る問題について解説します。
  • OnActionが正常に動作しない原因として、動作マクロの設定が正しく行われていない可能性があります。
  • 要約の参考コードを利用して、ツールバーのボタンクリック時の動作を修正する方法を説明します。
回答を見る
  • ベストアンサー

ボタンをクリックするとエラーになる

Excelマクロ初心者です。 Excelマクロにて下記のコードを実行してみました。 ツールバーは出たのですがツールバーのボタンをクリックすると、 エラーメッセージが出てしまいます。 例 更新ボタンをクリック マクロ 'xxx.xls!BTN_TOUROKU'が見つかりません と出てしまいます。 OnActionが旨く動きません。どうして動かないのでしょうか? --------------------------------------------------------------- Option Explicit Private Const g_cnsTITLE = "更新ツールバー" ' 立ち上げ時自動実行処理 Sub Workbook_Open() Dim xlAPP As Application Dim objBar As CommandBar Dim objCont As CommandBarControl Dim objBtn As CommandBarButton Dim vntCaption As Variant Dim vntTipText As Variant Dim vntOnAction As Variant Dim IX As Integer Dim blnTRUE As Boolean Set xlAPP = Application ' ボタンのタイトルを設定 vntCaption = Array("登録(&A)", "更新(&U)", "削除(&X)") ' (1) ' ボタンにマウスを当てた時に表示されるテキストを設定 vntTipText = Array("登録を行ないます", "更新を行ないます", "削除を行ないます") ' ボタンの動作マクロを指定 vntOnAction = Array("BTN_TOUROKU", "BTN_KOUSHIN", "BTN_SAKUJO") ' ツールバーを追加する ' (2) Set objBar = xlAPP.CommandBars.Add(Name:=g_cnsTITLE, Position:=msoBarTop) ' 1番目はボタンの境界をなしにする blnTRUE = False ' ボタンを3つ追加する For IX = 0 To 2 ' まずボタンを指定してコントロールを追加 Set objCont = objBar.Controls.Add(Type:=msoControlButton) ' (3) ' ボタンの境界を設定 objCont.BeginGroup = blnTRUE ' (4) ' CommandBarButtonオブジェクトを取得 Set objBtn = objCont ' (5) objBtn.Style = msoButtonCaption ' ボタン名を表示 ' (6) objBtn.Caption = vntCaption(IX) ' 表示名を設定 objBtn.TooltipText = vntTipText(IX) ' マウスを当てた時のツールチップテキスト 'objBtn.OnAction = vntOnAction(IX) ' 動作マクロを設定 objBtn.OnAction = vntOnAction(IX) ' 2番目以降はボタンの境界を設定 blnTRUE = True Next IX ' ツールバーを表示する objBar.Visible = True ' ツールバーを表示 ' ツールバーを非表示にできなくする objBar.Protection = msoBarNoChangeVisible ' ツールバーをマウスで引き出したり右クリックした時に「閉じる」の操作ができないようにする ActiveWindow.ScrollRow = 1 ' オブジェクトを廃棄 Set objBtn = Nothing Set objCont = Nothing Set objBar = Nothing End Sub ' 閉じる時の自動実行処理 Sub Workbook_BeforeClose(Cancel As Boolean) Dim xlAPP As Application Dim objBar As CommandBar Set xlAPP = Application ' ツールバーオブジェクトを取得する Set objBar = xlAPP.CommandBars(g_cnsTITLE) ' ツールバーを削除する objBar.Delete ' オブジェクトを廃棄 Set objBar = Nothing End Sub ' 「登録」ボタンがクリックされた時の処理 Sub BTN_TOUROKU() MsgBox "「登録」が押されました" End Sub ' 「更新」ボタンがクリックされた時の処理 Sub BTN_KOUSHIN() MsgBox "「更新」が押されました" End Sub ' 「削除」ボタンがクリックされた時の処理 Sub BTN_SAKUJO() MsgBox "「削除」が押されました" End Sub ---------------------------------------------------------------

  • WDY
  • お礼率85% (188/219)

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

  • ベストアンサー
  • onlyrom
  • ベストアンサー率59% (228/384)
回答No.1

'-------------------------------------------- ' 「登録」ボタンがクリックされた時の処理 Sub BTN_TOUROKU() MsgBox "「登録」が押されました" End Sub ' 「更新」ボタンがクリックされた時の処理 Sub BTN_KOUSHIN() MsgBox "「更新」が押されました" End Sub ' 「削除」ボタンがクリックされた時の処理 Sub BTN_SAKUJO() MsgBox "「削除」が押されました" End Sub '----------------------------------------------- ●上記3つのプロシージャを標準モジュールに移動して実行してみてください。

WDY
質問者

お礼

ワークシート全体にかかるものなのでThisWorkbookに記述していました。 標準モジュールに記述したところ動かす事が出来ました。 勉強不足でした。ありがとうございます。

関連するQ&A

  • エクセルVBA フォームへ動的に貼り付けたボタンのクリックイベントを検知する方法を教えてください

    (1)excel97にのVBAでフォームを作成します。 デフォルトの場合はUserForm1という名前がつきます。 (2)標準モジュールとして下記のコードを作成します。 Sub ボタンを付けて表示() Dim btn As Control  With UserForm1       ’ボタンを"button"という名前で作成します   Set btn = .Controls.Add("Forms.CommandButton.1", "button")   ’ボタンの設定をします   With btn    .Top = 5    .Left = 5    .Height = 20    .Width = 200    .Caption = "push me!"   End With   ’フォームの設定をし、表示します   .Height = 60   .Width = 220   .Show  End With End Sub (3)マクロを実行するとフォームが表示されます。 そこでこのボタン("push me!"と表示されています)をクリックします。 このクリックを検知してマクロを動かしたいのですが可能でしょうか? なおUserForm1に下記のコードを付けてみたのですがクリックは検知できませんでした。 Private Sub button_Click()  MsgBox "You click the button." End Sub

  • Word ツールバーの削除

    下記の様なマクロを組み込みました。 しかしこのマクロ自体不必要になったので削除したのですがツール→ユーザー設定→ツールバーにはツールバー及びボタンが残ってしまいました。 ツール→ユーザー設定→ツールバーで削除をすれば消えますが新たにWordを立ち上げると消えていません。 マクロでCommandBars("Indent").Deleteともしましたが結果は同じでした。 どうすれば消えるのでしょうか?どなたかご教授願います。 Sub auto_open() Dim myBar As CommandBar, myButton As CommandBarButton '新しいMenuBarを追加 Set myBar = CommandBars.Add 'MenuBarに名前を設定 myBar.Visible = True myBar.Name = "Indent" myBar.Position = msoBarTop '新しいボタンを追加 Set myButton = myBar.Controls.Add With myButton .Caption = "[チュックインデント]" .Style = msoButtonCaption End With 'ボタンが押下時実行マクロ設定 myButton.OnAction = "checkIndent" myBar.Visible = True End Sub Sub auto_close()

  • エクセルを表示できない

    プログラム初心者です。 Private Sub Command3_Click() On Error Resume Next Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet With xlApp.Application Set xlApp = GetObject("F:\vb6.0\book1.xls") Set xlBook = xlApp.Workbooks.Open("Book1") Set xlSheet = xlBook.Worksheets(1) xlApp.Application.Visible = True End Sub と入力したのですが、実行してボタンをクリックしてもエクセルの表が表示されません。なぜでしょうか?

  • ツールバー表示

    ExcelVBAで左端にツールバー表示をしたく、調べて表示する所までは出来ました。 ですが文字が縦向きになっております。 私は、横向きの文字にしたいのですが、方法はあるのでしょうか? 環境はWindowsXP、Excel2003です。 以下、その部分の関係ありそうなソース(一部)。 Private Sub Workbook_Open() Dim objBar As CommandBar Dim objCont As CommandBarControl Dim objBtn As CommandBarButton Set objBar = xlAPP.CommandBars.Add(Name:=g_cnsTITLE, Position:=msoBarLeft) Set objCont = objBar.Controls.Add(Type:=msoControlButton) Set objBtn = objCont objBtn.Caption = "ボタン1"

  • 実行時エラー 1004 Rowsメソッドは失敗しま

    アクセスからエクセルファイルを開いています。 Sub tset() Dim int行数 As Integer Dim xlApp As Object Dim xlWbk As Object Set xlApp = CreateObject("Excel.Application") xlApp.Visible = True Set xlWbk = xlApp.Workbooks.Open("C:\test.xlsx") xlApp.Sheets(1).Select int行数 = xlApp.Cells(Rows.Count, "A").End(xlUp).Row xlWbk.Close xlApp.Quit Set xlApp = Nothing End Sub このコードなのですが、1回目は普通にファイルが開いて閉じるのに 同じこのプロシージャーを2回連続で実行しようとすると 2回目は必ず int行数 = xlApp.Cells(Rows.Count, "A").End(xlUp).Row の部分で、 実行時エラー 1004 Rowsメソッドは失敗しました。 _Globalオブジェクト となります。 なぜ最初は問題なくコードが通るのに 2回目はダメなのでしょうか?

  • ややこしいですがご協力ください

    アクセスからエクセルを起動してエクセルで実行した変数をアクセスに持って帰りたいです。 【アクセス側】_ Sub エクセルの値を持ってくる() Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim MyFileName As String Dim myStr As String Set xlApp = New Excel.Application MyFileName = "C:\Users\エクセル.xlsm" Set xlBook = xlApp.Workbooks.Open(MyFileName) xlApp.Visible = True xlApp.Run "'" & MyFileName & "'!" & "Excel_test" Set xlApp = Nothing MsgBox myStr ’★ End Sub 【エクセル側】 Sub Excel_test() Dim myStr As String myStr = "アクセスへ渡す" MsgBox myStr End Sub としたときに、アクセスの MsgBox myStr ★でも エクセルで実行させた変数を持って帰りたいのですが どこを修正すればよろしいでしょうか? ご教授よろしくお願いします。

  • SETを使ったほうがよい?

    accwessからエクセルファイルを開きたいのですが、 App.Workbooks.Open と、 Set xlBook = xlApp.Workbooks.Open とどちらを使った方がいいのでしょうか? ////////////////////////////////////////////////////////// Private Sub ファイル1_Click() Dim App As Object Dim MyFileName As String MyFileName = "D:\My Documents\test.xls" Set App = CreateObject("Excel.Application") App.Workbooks.Open FileName:=MyFileName App.Visible = True End Sub でも Private Sub ファイル2_Click() Dim xlApp As Object Dim xlBook As Object Dim FileName As String Const FolderName = "D:\My Documents\test.xls" Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Open(FolderName & FileName) xlApp.Visible = True Set xlApp = Nothing Set xlBook = Nothing End Sub ////////////////////////////////////////////////////////// でも開けました。 多分、SETを使うかどうかの違いだと思うのですが VBAでコードを作る際、どちらのコードを使った方がいいか教えてください。

  • エクセル2003 自作ツールバー(コマンドバー)の選択戻り値取得方法

    ツールバーのショートカットを自作して 入力を楽にしようと考えております。 ツールバーには、直接入力するリストを表示させ そのリストの中から選んで、セルに記入させると 言うマクロを作ろうとしているのですが、 選択された、リストの戻り値を取れないため、 苦戦しております。 戻り値の取得方法とかあるのでしょうか? 宜しくお願いいたします。 コードを以下に記します。 Option Explicit Option Base 1 Dim myCB As CommandBar Dim myCBCtrl As CommandBarButton Dim myData() As String Dim n As Integer, i As Integer ---------------------------------------------------------------- Sub AddCmdBarBtn() Call 配列 On Error Resume Next CommandBars("MyMacro2").Delete Set myCB = Application.CommandBars.Add(Name:="MyMacro2", _ Position:=msoBarPopup, Temporary:=True) For i = 1 To 5 Set myCBCtrl = myCB.Controls.Add(Type:=msoControlButton) With myCBCtrl .Caption = myData(i) .OnAction = "ツールバーマクロ" End With Next i myCB.ShowPopup End Sub ---------------------------------------------------------------- Private Sub ツールバーマクロ() ActiveCell.Value = myCB.Controls.Item.Caption<<<此処を上手く処理できません(泣) End Sub ---------------------------------------------------------------- Private Sub 配列() ReDim myData(5) For n = 1 To 5 myData(n) = "名前" & n Next n End Sub ---------------------------------------------------------------- このマクロを右クリックイベントで使って行きたいと考えている のですが。

  • Excel2003右クリックについて

    Excel2000でVBAを使って右クリックのメニューに項目を追加するマクロを作成したのですが、 Excel2003では右クリックでメニューが出てきません。なぜでしょうか?? Private Sub Workbook_Open() Dim cbMenuBar As CommandBar Dim cbGomaPop As CommandBarPopup Dim oGomaControl As CommandBarControl Dim cbGomaMenuItem As CommandBarButton Dim n As Integer Dim fExistGomaContextMenu As Boolean On Error Resume Next ' Add Goma Menu to Context Menu Set cbMenuBar = Application.CommandBars("Cell") ' Avoid Excel2003(beta) Error on Add Context Menu If Int(Application.Version) < 11 Then 'Check Goma Context Menu (Dic) Exist fExistGomaContextMenu = False For n = cbMenuBar.Controls.Count To 1 Step -1 If cbMenuBar.Controls(n).Caption = MITEM_DIC_CAPTION2 Then fExistGomaContextMenu = True Exit For End If Next n If fExistGomaContextMenu = False Then Set cbGomaMenuItem = cbMenuBar.Controls.Add(Temporary:=True) With cbGomaMenuItem .BeginGroup = True .Caption = MITEM_TRAN_CAPTION2 .OnAction = MITEM_TRAN_ACTION End With Set cbGomaMenuItem = cbMenuBar.Controls.Add(Temporary:=True) With cbGomaMenuItem .Caption = MITEM_OPT_CAPTION2 .OnAction = MITEM_OPT_ACTION End With Set cbGomaMenuItem = cbMenuBar.Controls.Add(Temporary:=True) With cbGomaMenuItem .Caption = MITEM_DIC_CAPTION2 .OnAction = MITEM_DIC_ACTION End With Set cbGomaMenuItem = cbMenuBar.Controls.Add(Temporary:=True) With cbGomaMenuItem .Caption = MITEM_DIC_CAPTION3 .OnAction = MITEM_DIC_ACTION2 End With End If End If End Sub おわかりになる方がいらっしゃいましたら教えて下さい。

  • 名前を付けて保存のウィンドウが表に出ない

    VB6でエクセルを保存させると、動作は問題ないのですが、「名前をつけて保存」のウィンドウが他のプログラムの下に出てしまいます。他のプログラムをあらかじめ避けておかないと、ウィンドウにアクセスできません。どうしたらよいのでしょうか? Option Explicit Dim xlApp As Excel.Application Dim xlBok As Excel.Workbook Dim xlSht As Excel.Worksheet Private Sub Form_Load() Set xlApp = CreateObject("Excel.Application") Set xlBok = xlApp.Workbooks.Add Set xlSht = xlBok.Worksheets(1)   xlSht.Activate End Sub Private Sub EndBtn_Click() Dim xlFName As String On Error Resume Next '1 xlFName = xlApp.GetSaveAsFilename(fileFilter:="Excel (*.xls), *.xls") Call xlBok.SaveAs(xlFName) '2 Application.Dialogs(xlDialogSaveAs).Show Call xlApp.Quit Set xlSht = Nothing Set xlBok = Nothing Set xlApp = Nothing End End Sub 1の方法でも2の方法でも同じです。 なお、VBは全くの初心者です

専門家に質問してみよう