VBA実行エラー”13”型が一致しません。の対処方法とは?

このQ&Aのポイント
  • はじめての質問。66歳でVBAに挑戦中。エラー対処に苦労中。Excel2003使用。
  • エラーが出るコードの一部を示したが、実行時エラー13が発生。
  • 収入データの取得と表示に関する訂正ルーチンがエラー。具体的な指導を求める。
回答を見る
  • ベストアンサー

VBA 「実行エラー”13” 型が一致しません。」の対処方法を教えてください。

OKWebをはじめ、インターネットで質問をするのは、はじめてです。よろしくお願いします。 1ヶ月前から、年甲斐もなく老体に(66)鞭打ってVBAに挑戦しています。 開発をしているソフトは、ある組織の個人用の出納簿で、EXCELを知らなっくても、パソコンが少し触れるかたげ使用できる様にと思い取り組んでいます。 現在、ワークシート=3枚、ユーザフォーム=7枚、標準モジュール=4モジュールの作成を終えましたが、動作確認において、表題のエラーが出て、対応に苦労しています。 質問にあたり再現プログラムを作りましたから、ご指導よろしくお願いします。なお、開発環境は、WindowsXP、EXCEL2003です。 Sheet1 ⇒ 何も設定していません。 fom出納簿入力 ⇒ 作成済みのUserFormをインストールしました。  ⇒⇒ 新たにUserFormを定義すると正常に動作します。 <<ThisWorkbook>>の定義内容 Private Sub Workbook_Open() '--------<<タイトルバーの変更>> Application.Caption = "○○システム" ActiveWindow.Caption = "△△△" '--------<<ウィンドウの枠の最大化>> Application.WindowState = xlMaximized ActiveWindow.WindowState = xlMaximized '--------<<メニューバーのカスタマイズ>> subメニューバーカスタマイズ '--------<<ツールバーの非表示 Dim myCB As CommandBar On Error Resume Next For Each myCB In Application.CommandBars myCB.Visible = False Next myCB On Error GoTo 0 End Sub Sub subメニューバーカスタマイズ() Dim myCB As CommandBar, myCBCtrl As CommandBarControl '「ワークシートメニューバー」のすべてのコントロールを削除する Set myCB = Application.CommandBars("Worksheet Menu Bar") For Each myCBCtrl In myCB.Controls myCBCtrl.Delete Next myCBCtrl '-----[出納簿]メニューの作成 ----- Set myCBCtrl = myCB.Controls.Add(Type:=msoControlPopup) myCBCtrl.Caption = "出納簿" '-----[出納簿]→[出納簿(入力)]メニューの作成 ----- Set myCBCtrl = myCB.Controls("出納簿").Controls.Add(Type:=msoControlButton) myCBCtrl.Caption = "出納簿(入力)" myCBCtrl.OnAction = "sub出納簿入力" 'モジュール「サブルーチン」 End Sub (ThisWorkbookの定義は、内容をあまり理解せぬまま、参考書のサブルーチンを借用して、作成しました。) <<Module1>>の定義内容 Sub sub出納簿入力() Sheet1.Select ActiveWindow.Zoom = 125 UserForms("fom出納簿入力").Show End Sub エラーは、最後の「UserForms("fom出納簿入力").Show」で発生しています。 また、「入力」に対して「訂正」ルーチンを組んでいます。訂正を行う場合は、まず、InputBoxメソード対話型プロセジャーを使って、訂正行を取得します。そして、データベースの該当行の内容を「訂正」UserFormsに表示するために、プロパティに設定する場合にも、「実行時エラー"13" 型が一致しません。」となります。 コーディングの一部は次のとおりです。  my収入 = ActiveCell.Value ⇒ データベースから値を取得  fom出納簿訂正.cb金額.Value = my収入 上記2命令の間でmsgboxでmy収入の値を確認していますが、正しく設定されています。訂正ルーチンは3個ありますが、1個は上記のコーディングで正しく動作しますが、2個がエラーとなります。 何分VBAの素人ですから、具体的なご指導を賜れば幸いです。

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

  • ベストアンサー
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.5

ANo.5です。 >uf出納簿訂正.cb月.Value = my月  ← ここでエラー cd月ってどのコントロールなのでしょう。 TextBox?Label? Label1.Caption = my月 TextBox1.Value = my月 TextBoxなら問題なさそうですが、LabelならValueではダメですし。 ようはプロパティでValueが使えないコントロールなのでしょう。

yamato3zan
質問者

お礼

n-junさん cb月は、uf出納簿訂正(ユーザフォーム)上にコンボボックスで定義しています。そして、Stylプロパティで「fmStyleDownList(値=2)を設定していました。これを、「fmStyleDownCombo(値=0)に変更すると、バグ吸収しました。 他の更新ルーチンでは、うまく動作していたので、テキストボックに設定するmy内容、My備考の設定をmy月、my日の前に移すと正常に動作したため、ユーザフォームの作り方ではなく、コントロールの違いの問題と判断して、個々のコントロールの設定内容を確認した所、バグ原因にたどり着きました。 今回、n-junさんには、Withステートメントの使い方、Debugオブジェクトの使用方法など、非常に参考となるご指示を頂き、ありがとうございました。 Withステートメントについては、一部使用していたのですが、コマンドと組み合わせた使い方を教えていただき、プログラムに見直し時に訂正をかけて、見やすいプログラムにしたいと思います。 また、Debugオブジェクトについても、その使い方について参考書を、今一度、見直しを行い、今後使用していきたいと思います。 VBAでのプログラム作成は、適当に部品(サブルーチン)を組み合わせれば、簡単に作成できるものと考えてプログラム作成に挑戦しました。が、40数年前にアッセンブラでプログラムを組んで以来の作業であり、ロジックは組めても、なかなかコーディングができません。参考書を読んでいる時は、このルーチンが使えると思っていても、いざコーディングになると、再び参考書をひっくり返すことになり、なかなか新しいルーチンのコーディングには時間がかかります。でも、40数年前のプログラム開発を考えると非常に楽ですね。40数年前は、コーディングの後の紙カードのパンチ作業が大変でしたが、VBAは、参考情報まで見せてくれますから、非常に楽ですね。 この後、出納簿などの月計、決算報告資料の作成に取り掛かりますが、また、今回の様な事態になった時には、よろしくお願いします。 ありがとうございました。

その他の回答 (4)

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.4

ANo.3です。 直接の回答ではないですが。 Cells(my訂正行, 1).Activate ~ my支出 = ActiveCell.Value までは、 With Cells(my訂正行, 1) 'my訂正行は、引継情報      my年月日 = .Value      my月 = Month(my年月日)      my日 = Day(my年月日)      my科目 = .Offset(0, 1).Value      my細科目 = .Offset(0, 2).Value      my領収書 = .Offset(0, 3).Value      my内容 = .Offset(0, 4).Value      my備考 = .Offset(0, 5).Value      my収入 = .Offset(0, 6).Value      my支出 = .Offset(0, 7).Value End With こんな感じでもいいのでは。

yamato3zan
質問者

お礼

n-junさん & bin-chanさん。 お二人のご協力いただき、先週の木曜日から頭を抱えていた問題が解決しました。インターネットで色々調べて、バグ対応でユーザフォームをいじっている時、よく「パスが違う」のようなエラーメッセージが出るため、ユーザフォームの作成の問題があると思い、何度も同じことを行っていました。手に負えなくなり、はじめてOWWebで質問をさせていただきました。(OKWebの仕組みが分からず、同じ質問を2度送信するなと、ご迷惑をかけることが多くありましたが、おゆるしください。) 結果的に今回のバグ原因は、コンボボックス(スタイル)の使用方法の問題でした。データベースのキーとなる項目については、「リストからの選択のみ可能」に設定していたためで、Styleプロパティの値を「2」から「0」に変更するとバグの箇所を抜けました。 訂正項目の表示と訂正操作時の使用方法について、今一度、仕様を見直したいと思います。 これから先、月計、年度末資料の作成、印刷と、参考書とインターネットで学びつつ作成しようと思っています。完成までには、今回のように息詰まることが多々あると思いますが、その節は、ご指導よろしくお願いします。ありがとうございました。

yamato3zan
質問者

補足

n-junさん & bin-chanさん。 お二人のご指導により、次のとおり修正しました。また、ユーザフォームに問題があるのではないかと考え、再作成して組み込みました。ユーザフォーム名は、「uf出納簿訂正」に変更しました。 イミティエイトウィンドウには、日付とTrueが表示されましたが、やはりエラーとなりました。 エラーコードは、「実行時エラー”380” Valueプロパティを設定できません。プロパティの値が無効です。」に変わりました。ご指導よろしくお願いします。 Sub sub出納簿訂正データ編集() Dim my年 As Integer Dim my月 As Integer Dim my日 As Integer Dim my年月日 As Date Dim my科目 As String Dim my細科目 As String Dim my領収書 As String Dim my内容 As String Dim my備考 As String Dim my収入 As Long Dim my支出 As Long Dim my金額 As Long With Cells(my訂正行, 1) 'my訂正行は、引継情報 my年月日 = .Value: Debug.Print my年月日, IsDate(my年月日) my月 = Month(my年月日) my日 = Day(my年月日) my科目 = .Offset(0, 1).Value my細科目 = .Offset(0, 2).Value my領収書 = .Offset(0, 3).Value my内容 = .Offset(0, 4).Value my備考 = .Offset(0, 5).Value my収入 = .Offset(0, 6).Value my支出 = .Offset(0, 7).Value End With uf出納簿訂正.cb月.Value = my月  ← ここでエラー uf出納簿訂正.cb日.Value = my日 uf出納簿訂正.cb科目.Value = my科目 uf出納簿訂正.cb細科目.Value = my細科目 If my領収書 = "有" Then uf出納簿訂正.cb領収書有.Value = True End If uf出納簿訂正.cb内容.Value = my内容 uf出納簿訂正.cb備考.Value = my備考 If my科目 = "収入" Then uf出納簿訂正.cb金額.Value = my収入 Else uf出納簿訂正.cb金額.Value = my支出 End If End Sub

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.3

#1です。 > Dim my収入 As Integer > Dim my支出 As Integer > Dim my金額 As Integer 32767を越えるとエラーになっている、なんでしょうね。 IntegerをLongに変更してください。2億円くらいまで大丈夫です。

yamato3zan
質問者

補足

bin-chanさん、そして、n-junさん ご指導ありがとうございます。 どうも、出納簿、台帳、名簿に対して同じルーチンを組んでおり、コーディングの際に、コピー操作を行っているために、若干、混乱しています。 今から、お二人のご指示を受けて、今一度、全体的に見直しをしてみたいと思います。閣下については、ANo5でご報告させていただきます。その節はよろしくお願いします。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.2

my年月日 = ActiveCell.Value: Debug.Print my年月日, IsDate(my年月日) としてみて、イミディエイトウィンドウに何が表示されるのか? アクティブセルが”日付”と認識できる物であれば、 セルの日付と"TRUE"と表示されるはずです。 そうでない場合アクティブセルが意図しない位置にあるのでしょう。 イミディエイトウィンドウはVBE画面のツールバーで 表示>イミディエイトウィンドウです。

yamato3zan
質問者

補足

n-junさん 早速、回答を頂きありがとうございます。 イミディエイトウィンドウは使用したことがないので、ご指導に従って今夜取り組んでみたいと思います。 私は、ディバッグにMsgbonを使用しており、my年月日、my月、などの項目についてしています。その都度、予想通りの値を得ており、正しいものと思っていますが、今一度、ご指示に従って確認したいと思います。

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

> my収入 = ActiveCell.Value ⇒ データベースから値を取得 > fom出納簿訂正.cb金額.Value = my収入 my収入はどのような型宣言をなさってますか? 「データベースから値を取得」とありますが、データベースの値とはどのような型宣言をなさってますか?

yamato3zan
質問者

お礼

bin-chanさん データベース側の説明が漏れていました。 各シートの列ごとのセルの書式で、年月日は日付データ、収入、支出、合計は数値データ、その他の項目は標準データとしています。 (追記コメントをどのようにすればよいかが分からず、本コーナーを使用させていただきました。)

yamato3zan
質問者

補足

bin-chanさん 早速、回答を頂きありがとうございます。 また、QKWebの操作誤り、同じ質問を2度送ってしまいました。 気がついて質問を削除しようとしましたが、投降後24時間以内は、削除できないとのことで、明日にも訂正を行いたいと思います。 第1の質問については、先ほど、n-junさんから回答を頂き、解決しました。 追加の質問に回答を頂きありがとうございます。 関連のコーディングは、次のとおりです。このサブルーティンでデータベースの各内容を、UserFormsのプロパティにセットしています。なお、データベースでは日付を年月日で持っており、UserFormsでは、入力画面に合わせて、月と日を表示しています。 Sub sub出納簿訂正データ編集() Dim my年 As Integer Dim my月 As Integer Dim my日 As Integer Dim my年月日 As Date Dim my科目 As String Dim my細科目 As String Dim my領収書 As String Dim my内容 As String Dim my備考 As String Dim my収入 As Integer Dim my支出 As Integer Dim my金額 As Integer Cells(my訂正行, 1).Activate 'my訂正行は、引継情報 my年月日 = ActiveCell.Value my月 = Month(my年月日) my日 = Day(my年月日) ActiveCell.Offset(0, 1).Activate my科目 = ActiveCell.Value ActiveCell.Offset(0, 1).Activate my細科目 = ActiveCell.Value ActiveCell.Offset(0, 1).Activate my領収書 = ActiveCell.Value ActiveCell.Offset(0, 1).Activate my内容 = ActiveCell.Value ActiveCell.Offset(0, 1).Activate my備考 = ActiveCell.Value ActiveCell.Offset(0, 1).Activate my収入 = ActiveCell.Value ActiveCell.Offset(0, 1).Activate my支出 = ActiveCell.Value fom出納簿訂正.cb月.Value = my月  ← ここでエラー fom出納簿訂正.cb日.Value = my日 fom出納簿訂正.cb科目.Value = my科目 fom出納簿訂正.cb細科目.Value = my細科目 If my領収書 = "有" Then fom出納簿訂正.cb領収書有.Value = True End If fom出納簿訂正.cb内容.Value = my内容    fom出納簿訂正.cb備考.Value = my備考 If my科目 = "収入" Then fom出納簿訂正.cb金額.Value = my収入 Else fom出納簿訂正.cb金額.Value = my支出 End If End Sub

関連するQ&A

  • VBA 「実行時エラー"13"型が一致しません」の対処方法を教えてください

    OKWebをはじめ、インターネットで質問をするのは、はじめてです。よろしくお願いします。 1ヶ月前から、年甲斐もなく老体に(66)鞭打ってVBAに挑戦しています。 開発をしているソフトは、ある組織の個人用の出納簿で、EXCELを知らなっくても、パソコンが少し触れるかたげ使用できる様にと思い取り組んでいます。 現在、ワークシート=3枚、ユーザフォーム=7枚、標準モジュール=4モジュールの作成を終えましたが、動作確認において、表題のエラーが出て、対応に苦労しています。 質問にあたり再現プログラムを作りましたから、ご指導よろしくお願いします。なお、開発環境は、WindowsXP、EXCEL2003です。 Sheet1 ⇒ 何も設定していません。 fom出納簿入力 ⇒ 作成済みのUserFormをインストールしました。  ⇒⇒ 新たにUserFormを定義すると正常に動作します。 <<ThisWorkbook>>の定義内容 Private Sub Workbook_Open() '--------<<タイトルバーの変更>> Application.Caption = "○○システム" ActiveWindow.Caption = "△△△" '--------<<ウィンドウの枠の最大化>> Application.WindowState = xlMaximized ActiveWindow.WindowState = xlMaximized '--------<<メニューバーのカスタマイズ>> subメニューバーカスタマイズ '--------<<ツールバーの非表示 Dim myCB As CommandBar On Error Resume Next For Each myCB In Application.CommandBars myCB.Visible = False Next myCB On Error GoTo 0 End Sub Sub subメニューバーカスタマイズ() Dim myCB As CommandBar, myCBCtrl As CommandBarControl '「ワークシートメニューバー」のすべてのコントロールを削除する Set myCB = Application.CommandBars("Worksheet Menu Bar") For Each myCBCtrl In myCB.Controls myCBCtrl.Delete Next myCBCtrl '-----[出納簿]メニューの作成 ----- Set myCBCtrl = myCB.Controls.Add(Type:=msoControlPopup) myCBCtrl.Caption = "出納簿" '-----[出納簿]→[出納簿(入力)]メニューの作成 ----- Set myCBCtrl = myCB.Controls("出納簿").Controls.Add(Type:=msoControlButton) myCBCtrl.Caption = "出納簿(入力)" myCBCtrl.OnAction = "sub出納簿入力" 'モジュール「サブルーチン」 End Sub (ThisWorkbookの定義は、内容をあまり理解せぬまま、参考書のサブルーチンを借用して、作成しました。) <<Module1>>の定義内容 Sub sub出納簿入力() Sheet1.Select ActiveWindow.Zoom = 125 UserForms("fom出納簿入力").Show End Sub エラーは、最後の「UserForms("fom出納簿入力").Show」で発生しています。 また、「入力」に対して「訂正」ルーチンを組んでいます。訂正を行う場合は、まず、InputBoxメソード対話型プロセジャーを使って、訂正行を取得します。そして、データベースの該当行の内容を「訂正」UserFormsに表示するために、プロパティに設定する場合にも、「実行時エラー"13" 型が一致しません。」となります。 コーディングの一部は次のとおりです。  my収入 = ActiveCell.Value ⇒ データベースから値を取得  fom出納簿訂正.cb金額.Value = my収入 上記2命令の間でmsgboxでmy収入の値を確認していますが、正しく設定されています。訂正ルーチンは3個ありますが、1個は上記のコーディングで正しく動作しますが、2個がエラーとなります。 何分VBAの素人ですから、具体的なご指導を賜れば幸いです。

  • エクセルVBA アドイン メニューの作成方法

    OS:windowsXP HomeEdition ソフト:Excel2003 アドインを作成し配布したいのですが、xla形式で保存しエクセル上でアドインさせ、 作成したメニューからテスト起動させてみると、アドインの元のファイル(拡張子xls)が 展開してしまいます。展開させずにアドインプロシージャを起動させたいのですが 何が原因か調べてもわかりませんでした。知っている方、ご助言御願い致します。 以下に、私の作成したマクロを記述します。 マクロ解説HPで勉強しつつ作成致しました。 ~~~~~~~~~~~~~~~~~~~~~~~~~ <ThisWorkBookへの記述> Dim mySubMenu As CommandBarControl Sub MakeSubMenu() Dim myMenu As CommandBar Dim cmdSubMenu As CommandBarControl 'すでにサブメニューがあれば削除する DelSubMenu Set myMenu = Application.CommandBars("worksheet Menu Bar") Set mySubMenu = myMenu.Controls.Add(Type:=msoControlPopup) mySubMenu.Caption = "メニュー" Set cmdSubMenu = myMenu.Controls("メニュー").Controls.Add(Type:=msoControlButton) cmdSubMenu.Caption = "コマンド1" 'サブメニューでコマンド1を選択したとき cmd1() を呼び出す cmdSubMenu.OnAction = "cmd1" Set cmdSubMenu = myMenu.Controls("メニュー").Controls.Add(Type:=msoControlButton) cmdSubMenu.Caption = "コマンド2" 'サブメニューでコマンド2を選択したとき cmd2() を呼び出す cmdSubMenu.OnAction = "cmd2" End Sub Sub DelSubMenu() 'メニューバーのサブメニューを削除する On Error Resume Next mySubMenu.Delete End Sub <標準モジュールへの記述> Private Sub cmd1() MsgBox "コマンド1を選択しました" End Sub Private Sub cmd2() MsgBox "コマンド2を選択しました" End Sub ~~~~~~~~~~~~~~~~~~~~~~~ 尚、マクロは簡略化し、のせております。 よろしく御願い致します。

  • エクセル95のVBAマクロに詳しい方!

    エクセルの画面からメニューバー等のすべてのバーを標示させないようにするには下記の記述ということを教わりました。(有難う御座いました) 試したところ97、2000ではこれで完璧でした。 ところが95ではエラーになってしまうのです。ファイルはもちろん95形式で保存してあります。 どなたか、95に詳しい方、対処法をご教示ください。 Sub コマンドバー非表示() For Each myCB In Application.CommandBars myCB.Enabled = False Next myCB End Sub

  • エクセルVBAでコンパイルエラー

    すみません、どうしても腑に落ちないので質問させてください。 わたしが書いて配布したBOOKのコマンドバーを非表示にするコードなのですが、エクセル2000で、myCB のところでコンパイルエラーになるという連絡がありました。 その方は数台PCをお持ちですべての端末でそうなるとのことです。 しかし、下記コードはこれまで2000でも2003でも2007でも何度も試しており、これまでそのようなことはありませんでした。 Private Sub ALLBARS_Hide()   Dim myCB As CommandBar   For Each myCB In Application.CommandBars     myCB.Enabled = False   Next myCB End Sub どういった原因が考えられるでしょうか? なお、上記コードはAuto_OpenからCallされます。

  • VBAのこの実行時エラーは何故起きる?

    ExcelVBAで次の大変簡単なコードを書いてみました。 シート上の行列(100*100)の範囲にランダムに☆印を100個表示するというものです。sheet1にコマンドボタンを貼り付け押すと実行します。ところが実行時エラーが起きて止まります。(メッセージ:”アプリケーション定義またはオブジェクト定義のエラーです”)原因はなんでしょうか?6行目が問題なようです。うまく動く時もあるので不思議です。 Private Sub CommandButton1_Click() Application.ScreenUpdating = False For n = 1 To 100 R = Int(Rnd * 100) C = Int(Rnd * 100) Sheet1.Cells(R, C).Value = "☆" Next Application.ScreenUpdating = True End Sub

  • ExcelのVBAで、変数の型の種類の調べ方

    Asキーワードで、変数の型を調べる方法を教えてください。 CommandBarのCommandBarButtonのStateの状態を変更させようとして次のようなSubを作りました。 Sub testCommandBar() Dim MyCommandBar As CommandBar Dim MyControl As CommandBarButton Set MyCommandBar = Application.CommandBars("test") For Each MyControl In MyCommandBar.Controls MyControl.State = msoButtonMixed MyControl.State = msoButtonDown MyControl.State = msoButtonUp Next End Sub しかし、コントロールにボタンとコンボボックスを配置すると、ローカルウィンドで、型を見てもCommandBarButtonと、CommandBarComboBoxと型が分かれているため、当然上記のままだとエラーになります。で、安易にObject型(最上位)にするのではなくもうひとつ上のCommandBarButtonと、CommandBarComboBox共通の型ってどうやって調べればいいのでしょうか? たとえば、「Sheet1」と「Sheet2」の型の上位といえば「WookSheet」のように??(←これが正しいかも自信がないですが) 自分では、「Sheets」「WookSheet」「SheetXX」はそれぞれ型が違うってのは理解しているつもりです。(XXは数字) よろしくお願いいたします。 ついでに、上記のコードだと、ボタンだけの配置で、ステップインで実行させても、ボタンの状態が変化しません。別の質問でと思ったのですが、あつかましく教えていただければ幸いです。

  • エクセルVBA「型が一致しません」

    エクセルVBA「型が一致しません」 これまで作成してきたVBAを明日から使用します。 最後に一つ、ご回答頂きたいのですが、 Dim a As Long a = Me.LabelCompany.Caption If a = 0 Then MsgBox "このベルマークは失効しています。失効していない場合は「ベルマーク番号シート」を編集してください。なお、失効後半年以内のベルマークは有効です。" End If このようなコードを書いたのですが、タイトルのエラーを吐いてしまいます。 「LabelCompany」に何も入力されていなければメッセージボックスを表示するという動作に持って行きたいです。御指南お願いします。

  • エクセル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 ---------------------------------------------------------------- このマクロを右クリックイベントで使って行きたいと考えている のですが。

  • メニューバーのイベントが2回実行される

    CommandBarControlでメニューバーを作成し、イベントを実行していますが、何故か2回実行されてしまいます。 具体的には、  Set myMenu = Application.CommandBars("Worksheet Menu Bar"). _ Controls.Add(Type:=msoControlPopup, before:=11) With myMenu .Caption = "User's MenuBar(xx)" With .Controls.Add .Caption = "フォームを開く" .OnAction = "OpenForm(2)" End With 上記で「フォームを開く」メニューバーを作成して、これを選択すると、UserForm1.Show というロジックが書かれているSubプロシジャーが実行されます。 これにより、フォームが開くのですが、どうもこのプロシジャーが2回実行されており、フォームが2つ開いているのです。 しかし、原因がわかりません。 対策としては、 1.2回実行される原因を調べる。 2.UserForm1が既に開いていたら開かないようにロジックを変更す   る。 1は皆無ですし、2はUserForm1が既に開いているかをチェックするロジックが分かりません。 どなたか教えて下さい。 よろしくお願いします m(_ _)m

  • エクセル2003で作成したVBAを2007で使用したい

    エクセル2003で下記のようなVBAを作成していました。 作成した物を使用者が印刷設定を変更できないように ブックを開くと同時に印刷ボタンなどを非表示にしていたのですが・・・ 2007でも使用出来るようにしたいと思ったのですが 2007ではこのままではエラーが出てしまうようです。 2007はまったく扱ったことがないのでどのようにすればよいかわかりません。 どなたかご教授いただけたらと思います。 Private Sub Workbook_Open() Application.DisplayStatusBar = False 'ステータスバー非表示 'ブックを開く時ページ設定と印刷を非表示 On Error Resume Next Application.CommandBars("Worksheet Menu Bar").Controls("ファイル(&F)") _ .Controls("ページ設定(&U)...").Enabled = False Application.CommandBars("Worksheet Menu Bar").Controls("ファイル(&F)") _ .Controls("印刷(&P)...").Enabled = False Application.CommandBars("Worksheet Menu Bar").Controls("ファイル(&F)") _ .Controls("印刷プレビュー(&V)").Enabled = False Application.CommandBars("Worksheet Menu Bar").Controls("ファイル(&F)") _ .Controls("印刷範囲(&T)").Enabled = False Application.CommandBars("Standard").Enabled = False End Sub

専門家に質問してみよう