VBAでオブジェクト名に関する質問

このQ&Aのポイント
  • VBAでオブジェクト名を設定する際に、ツール⇒マクロで見られるマクロ名が異なる理由について説明してください。
  • オブジェクト名とプログラム名が異なる場合、他のプログラムを呼び出すことができない理由について説明してください。
  • オブジェクト名をプログラム名と同じにするかどうかについて、利点と考えられる点について説明してください。
回答を見る
  • ベストアンサー

VBAでオブジェクト名に関する質問

Excel2003を使っています。 例えば、 Sub Module1() ActiveWorkbook.Charts.PrintOut Copies:=1, Collate:=True End Sub というプログラムをVBAで作成します。このときオブジェクト名をModuleとして設定します。 すると、ツール⇒マクロで見られるマクロ名は xxxx.XLS!Module1 のようになります。 一方で、オブジェクト名をプログラム名と同じModule1にすると ツール⇒マクロで見られるマクロ名は xxxx.XLS!Module1.Module1 のようになります。 これって一体なぜなのでしょうか? 他のプログラムから他のプログラムを呼び出したいときに、 Module1と設定してしまうと xxxx.XLS!Module1.Module1のプログラムを呼び出すことは出来ません。 一体どういう利点があってこういう仕様になっているのでしょうか? また、オブジェクト名をプログラム名は別の名前にすべきなのでしょうか?

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

  • ベストアンサー
  • MRT1452
  • ベストアンサー率42% (1392/3296)
回答No.1

単に同名を使っているため、Excel自信が正常に認識できていないのかもしれませんが。 まぁ、基本的には、 ブック!シート.関数 ですが。 (これが絶対というわけではない) また、マクロ一覧の表示は、アクティブシートから見た論理表示等がごちゃ混ぜになって表示されるので、あまり参考にしない方が良いです。 アクティブシート内のマクロだと、マクロ名(関数名/イベント名)しか表示されないし。 > オブジェクト名をプログラム名は別の名前にすべきなのでしょうか? プログラムを組むのなら一意の名称をつけるのが一般的です。 厳密には、名称の付け方を決め手置くのが普通。 オブジェクトならば、テキストならtxt○○とするとか、ボタンならbtn○○とするとか。 関数ならば、ローカル関数ならpri○○、共用関数ならpub○○とするとか。 それが何を表しているのか分かる名称をつけるのが普通。 後々のメンテナンス等も行いやすくなります。 各部品の親子関係を見るのであれば、オブジェクトブラウザで確認した方が良いと思います。

関連するQ&A

  • エクセルVBA実行後にファイルを自動で閉じるVBA

    Sub 印刷() ' ' Macro1 Macro ' マクロ記録日 : 201X/X/X ユーザー名 : AAAA ' ' If MsgBox("実行する場合はOK、間違ってこのボタンをクリックした場合はキャンセルをクリックしてください。(日付確認後、印刷のこと。)", vbOKCancel) = vbCancel Then End End If 'A印刷 ChDir "L:\フォルダB\X\新規" Workbooks.Open Filename:="L:\フォルダB\X\新規\記録表\工程分析.xls" Sheets("毎日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("月曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("火曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("水曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("木曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("金曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("土曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("日曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True ActiveWorkbook.Save ActiveWindow.Close あるエクセルファイルのボタンに上記のVBAが記入されています。 そのボタンを押すと「工程分析.xls」ファイルを呼び出し各シートを自動印刷して保存して閉じるVBAです。 質問ですがボタンの配置されたあるエクセルファイルの上記VBAの処理を全て完了した後に上書き保存を自動で実行し、自動であるエクセルファイルを閉じるVBAはどの様に追加すれば良いでしょうか?

  • Excel VBAで自動印刷プログラムの作り方を教えて下さい。

    あるファイルにある全てのグラフを印刷するマクロを作りたいのですが、 どのようにすれば良いのでしょうか? Sub Macro2() ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True End Sub に何を付け足せば良いのでしょうか? 何卒よろしくお願い致します。

  • VBAでA3サイズに印刷したい

    Sub Macro4() ' ' Macro4 Macro ' マクロ記録日 : 2007/5/23 ユーザー名 : Administrator ' ' Sheets("印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True End Sub マクロの自動作成でこのように作りました これをA4からA3に拡大印刷したいのですが、どのようにしたら良いのでしょうか教えてください、よろしくお願いします。

  • Excel VBAで他のシートを印刷するとき

    シート1からシート2を表示しないで印刷したいんですが下の記述だと一瞬ですがシート2が表示されます、どのようにすればシート1のままシート2を印刷することができるのでしょうか、よろしくお願いします。 Sub Macro1() ' ' Macro1 Macro ' マクロ記録日 : 2004/7/23 ユーザー名 : H ' Sheets("Sheet2").PrintOut Copies:=1, Collate:=True End Sub

  • Excel2007のVBAにて印刷を指定枚数設定しようと思いましたが、

    Excel2007のVBAにて印刷を指定枚数設定しようと思いましたが、下記マクロでテストしたところ 2枚ではなく、何故か1076枚を印刷しようとしてきます。 印刷範囲も2枚しかないので、どこがおかしいのかが分りません。 分かる方いましたらご教授願います。 Sub Macro1() dim as i integer i = 2 ActiveWorkbook.PrintOut Copies:=i End Sub

  • 指定する曜日の時に特定のエクセルファイルを印刷

    Sub 印刷() ' ' Macro1 Macro ' マクロ記録日 : 201X/X/X ユーザー名 : AAAA ' ' If MsgBox("実行する場合はOK、間違ってこのボタンをクリックした場合はキャンセルをクリックしてください。(日付確認後、印刷のこと。)", vbOKCancel) = vbCancel Then End End If 'A印刷 ChDir "L:\フォルダB\X\新規" Workbooks.Open Filename:="L:\フォルダB\X\新規\記録表\工程分析.xls" Sheets("毎日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("月曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("火曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("水曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("木曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("金曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("土曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("日曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True  ActiveWorkbook.Save ActiveWindow.Close あるエクセルファイルのボタンに上記のVBAが記入されています。 そのボタンを押すと「工程分析.xls」ファイルの各シートを自動印刷して保存するVBAです。 ボタンが設置されているシートのK1には「TODAY()」の式が入っています。これは当日の日付を自動で表記する様になっています。 質問ですがボタンを押すと毎日印刷シート+K1に記入されている日付の曜日のシートのみを印刷するVBAはどの様にすれば良いでしょうか? 例えば今日(2016年9月10日)で言うと土曜日なのでボタンを押すと工程分析.xlsファイルの毎日印刷シート+土曜日印刷のみ出力されると言う事です。 明日(2016年9月11日)は日曜日なのでボタンを押すと工程分析.xlsファイルの毎日印刷シート+日曜日印刷シートのみが出力される形です。 よろしくお願いします。

  • エクセル マクロの作り方

    はじめまして エクセルのマクロ初心者です。 ツール→マクロ→新しいマクロの記録にて 開いているシートをA1~V68まで(すべての範囲でもOKです)をコピーし、別の貼り付け用シートに貼付、3つのタブを印刷して閉じ、開いているシートを表示する。という内容のマクロを登録しました。 台紙で以上のマクロを登録し、台紙を複製しました。 マクロを実行すると複製されたシートのA1~V68までではなく、台紙のA1~V68までが印刷されて困っています。 どうすれば解決するでしょうか???詳しい方おしえてください。 尚、下記に記録されたものを載せておきますので、訂正部分など教えてもらえたら助かります。 (マクロの記録の上部を訂正すると良いような気はするのですが…。初心者なのもので範囲の指定の仕方がわるいのでしょうか???) よろしくお願いします。 Sub マクロ名() ' ' マクロ名 Macro ' マクロ記録日 : 2007/10/14 ユーザー名 : ??? ' ' Application.Run "hozon1.初期" Range("A1:V68").Select Selection.Copy ChDir "C:\Documents and Settings\Administrator\デスクトップ\日報、点呼簿" Workbooks.Open Filename:= _ "C:\Documents and Settings\Administrator\デスクトップ\日報、点呼簿\平日,日曜、祭日点呼簿.xls" Cells.Select ActiveSheet.Buttons.Add(509.25, 1.5, 72.75, 12.75).Select ActiveSheet.Paste Sheets("大型1").Select Application.CutCopyMode = False ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("大型2").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("小型1").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True ActiveWindow.Close ActiveWindow.SmallScroll Down:=-51 Range("J3").Select End Sub

  • Microsoft Visual Basicについて質問します。

    シート名「委託内訳」でAN70がスペースの時に1ページのみ印刷し,スペースでない時に1~2ページを印刷したい時,下記のマクロでは2ページ目が印刷出来ません。 印刷できる方法は何かありますか? よろしくお願いします。 Sheets("委託内訳").Select Range("AN70").Select ActiveCell = ATAI If ATAI = "" Then ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, Collate _ :=True Else ActiveWindow.SelectedSheets.PrintOut From:=1, To:=2, Copies:=1, Collate _ :=True End If

  • VBAのglobalオブジェクトエラーについて

    実績集計.xlsのマスターシートのA列の3行目のセルに「1」もしくは「スペース」が入っていて、1であれば隣の会社コード(0000775)をファイル名に付与して保存するというマクロを作成しています。 この行(code = Wsheet1.Range(counter, 2))でエラーが出ていて、「アプリケーション定義、オブジェクト定義」とエラーがでてしまいます。どなたかわかる方がいらっしゃいましたら教えて下さい。よろしくお願いいたします。 Sub 作成() Dim counter As Integer '行番号 Dim code As String '取引先コード Set Wsheet1 = Workbooks("実績集計.xls").Worksheets("マスター") counter = 3 Do While counter < 10 If Wsheet1.Range(counter, 1) = "1" Then code = Wsheet1.Range(counter, 2) Workbooks.Add ActiveWorkbook.SaveAs Filename:="実績集計" + "_" + code + ".xls" End If counter = counter + 1 Loop End Sub

  • エクセル2000VBAからの印刷で実行時エラー1004発生

    エクセル2000のVBAマクロ中で印刷をしよう として、実行時エラー1004が発生し、原因が分からず 苦慮しています。 (前略) Sheets("ラベル印刷").Select ... ActiveSheet.PageSetup.PrintArea = "$A$1:$B$2" ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True を実行すると、WorksheetクラスのPrintOutメソッドが 失敗しましたというエラーがでます。 色々試して、 Worksheets("ラベル印刷").Activate ActiveSheet.PrintOut とやってみたり、シートの名称をデフォルトのSheet1に 戻したりしても同様でした。 同じモジュール中で、 Sub printtest()   Worksheets("ラベル印刷").PrintOut End Sub というのを記述して、VBAエディター中で実行ボタン (▼)で実行したり、ワークシートのツール/マクロの 実行から実行すると問題なく印刷できます。 ところが、マクロを改造してこのサブルーチンをコールする ようにすると、上と同様の現象が出ます。 別のPCで試みても再現されました。 他の部分は完成したつもりなのに、印刷が出来ず困っております。 アドバイスお願いします。

専門家に質問してみよう