• ベストアンサー

VBA Module

エクスプローラーで見ると、Module40、Module2、Module41~以下続きますが、表示の順番が数字順ではなく、Modele4~20は何も記載がないのに、Modure21には「Option Explicit」とだけあり、その後いくつか空白のModureがあり、Modure35にはコードがズラーッと記載されています。 これをModure1、Modure2、Modure3と順番に並べ、記載がないModuleは表示しないか、記載のあるModuleの後に表示するようにはできないのでしょうか。 Private SubだけのModuleを探すのに時間がかかりました。

  • kana14
  • お礼率98% (158/161)

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

  • ベストアンサー
  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.3

■モジュールの名前(オブジェクト名)は変更できます。  変更したいモジュールをVBA Projectエクスプローラでクリックして  そのまま、F4 キー。  表示されたプロパティウィンドウで  (オブジェクト名)を書き換えます。  作業を続ける場合は、エクスプローラ側で変更したいモジュールをクリックし直します。  注意点として、  他のモジュールで「Module1.Macro1」というような特殊な呼び出し方をしている場合  コード内の記述が自動的に新しいモジュール名に更新されるような機能はありません。  事前にプロジェクト全体をモジュール名で検索しておいた方がいいです。   ■Option Explcit の意味は、 このモジュールでは変数の宣言を(明示することを)強制します。 という意味です。使い慣れた人にとっては見慣れた記述です。 Visual Basic Editor のオプション設定によって、モジュールを追加すれば自動的に モジュールの先頭にOption Explcitと記載されます。 > 「Option Explicit」とだけあり Option Explcitとだけ書かれているモジュールは未使用のモジュールと同じ意味 と考えて差し支えありません。 ■モジュールは削除できます。  削除したいモジュールをVBA Projectエクスプローラで右クリックして  表示されたポップアップの[Module## の解放]をクリック  ["削除する前にModule## をエクスポートしますか"]に対して[いいえ]  です。  一旦削除すると元に戻せませんから、バックアップを取りたいならエクスポートしましょう。  削除していいかの確認も大切です。 以上で、ある程度の整理は可能になると思いますが、 モジュールが多すぎるのも混乱の元ですから 各プロシージャや宣言部を体系的に整理した方がいいと思います。 モジュール間でのプロシージャの移動や ある程度内容のわかるモジュール名にして内容別にするなど、、、。 もし、マクロの記録をする度にモジュールが増えていく、というような使い方を しているなら、その都度都度、他のモジュールへ切り貼りして 不要なモジュールが増えないようにしておくといいでしょう。 また、マクロの記録をすべて、PERSONAL.XLB(または.XLBS)に保全するような使い方を しているなら、適宜、マクロの保存先を作業中のブックにするなど、 必要なマクロがあるべき場所に保存されるように普段から意識するようにするといいでしょう。 一応、 命名規則を決めてリネームするようなことがVBAで可能か?という質問だった場合の答えとして 出来ますが、そいいう類のもの(プログラムを書き換えるようなプログラム)を掲示するのは 道義的な問題から控える方が多いです。 ご参考まで 

kana14
質問者

お礼

回答いただきましてありがとうございます

その他の回答 (2)

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

今、Module1があるのかないのか。 無いなら、Module21をModule1にリネームしちゃう。 「順番に」とのことですが、文字としての数字をソートするんだから注意してください。 Module1~Module12まであるとした場合、1,10,11,12,2,3,4,5,6,7,8,9の順になりますよ。 回避するには、Moduleが99個までなら2桁のゼロサプレスした名前にする。Module01のように。 01,02,03 ・・・ 09,10,11,12と並びますので。

kana14
質問者

お礼

回答いただきましてありがとうございます。

  • masatsan
  • ベストアンサー率15% (179/1159)
回答No.1

記載の無いモジュールを削除するのでは駄目なのですか? または記述のあるモジュールの内容を例えばモジュール1に移動し、その他を消せばきれいに見えると思うけど。

kana14
質問者

お礼

回答いただきましてありがとうございます。

関連するQ&A

  • Excel2016 VBA

    Windows10 ,Excel2016 バージョン1809 , VBA7.1を使用しています。 下記のコード(ホームページに掲載されているコードを写して実行しようとした。)で、 Attributeの箇所に、 コンパイルエラーと構文エラーが出ます。 Module1をaaaにしたり、Attributesと書き換えたりしてもエラーが消えません。 どなたか正常にコンパイルする書き方を教えてください。 お願いします。 Attribute VB_Name = "Module1" '************************************ 'ラベル発行のサンプル '************************************ Option Explicit ' 各項目の配置定義用ユーザー定義 Private Type typLocation X As Long Y As Long COL As Long End Type Private Const cnsSH1 = "DATA" Private Const cnsSH2 = "LABEL" Private Const cnsSH1 = "設定" Private Const cnsOMIT = "除外" '******************************************************************************* ' ラベル発行 '******************************************************************************* Sub PrintLabels() Dim xlApp As Application Dim WBK As Workbook '本ブック Dim SH1 As Worksheet 'DATA Dim SH2 As Worksheet 'LABEL Dim SH3 As Worksheet '設定 Dim tblLoc(1 To 10) As typLocation '項目配置定義(ユーザー定義を配列化) End Sub

  • [ExcelVBA] Module1で定義した変数の(代入した)値を、Module2でも使う方法

    基本中の基本のことで誠に申し訳ございません。 ある標準Moduleで宣言した変数に値を代入します。 その後、別のModuleでその変数を使用しますが、 その変数の中の値が消えてしまいます。 たとえば下記のように、プログラムを書きます。 test1を実行すると、続いてtest2も実行されます。 この場合、変数の値が0になってしまいます。 このような場合どうやったらいいのでしょうか? Hensuu1の値をセルに一度出力させて、 別のModuleで、セルの値をもう一度変数に代入させて使用する という方法で何とかしていたのですが、大変で困っています。 Module1に記載------------ dim Hensuu1 as integer sub test1() Hensuu1 = 100 test2 end sub ------------------------- Module2に記載------------- sub test2 range("A1") = Hensuu1 end sub --------------------------

  • Option Explictについて教えてください

    WEBでOption Explictを検索したら ------------------------------------ option explicit を指定して実行すると、 「コンパイルエラー変数が定義されていません。」 のエラーが出て、青色に反転します。 つまり、単純ミスが防げます。 option explicit が無いと ミスがミスと分からずに実行しますので、 間違った結果が出てしまいます。 option explicit は無条件に定義しましょう。 ---------------------------------- 変数の宣言を強制されるため、 変数のタイプミスを防ぐことができます。 ---------------------------------- 初心者はVBEの「ツール」の「オプション」 「編集」を選択して「変数の宣言を強制する」 (初期状態ではチェックがついていません) には必ずチェック。 ------------------------------------ 変数を宣言しているのはユーザーの環境が、 Option Explicit と明示的に変数を宣言することを 要求されている可能性があるので「エラーが出ました」 という場合があるからです --------------------------------- など色々と見つかりました。 一番わかりやすかったのは ↓これでした。 http://okwave.jp/qa/q4304440.html また以下のような説明もありました。 Option Explicitをつけた場合とつけない場合で 下のソースを実行してみてください。 abc = "Hello" Msgbox(adc) ↓ で説明のように試してみたら ・つけた場合→コンパイルエラー ・つけない場合→エラーにならずMsgboxは空白 でした。これは理解できました。 ですが以下の場合 Option Explicit Sub Macro1() Sheets("Sheet1").Select Columns("A:A").Select Selection.Copy Columns("C:C").Select ActiveSheet.Paste Application.CutCopyMode = False Range("A1").Select End Sub 多分変数は宣言していないので 「変数が定義されていません」とエラーが出ると 思ったのに、でませんでした。 >変数の宣言を強制されるため >Option Explicit と明示的に変数を宣言することを >要求されている可能性 の説明からの自分の解釈と合致しません。 option explicitを指定すると 【記述内に変数宣言がないとエラーになる】 と解釈したのですがそれは間違っていますか? それともSub Macro1()はどこかに変数宣言が あるのでしょうか? 凄くわかりやすく教えていただきたいです。 【追記】 退職者が残したエクセルファイルにて。 Sheet1~Sheet8まであります。 VBEで見ていくと Sheet1:Option Explict  Sheet2:Option Explict  Sheet3:Option Explict  Sheet4:Option Explict  Sheet5:Option Explict  Sheet6:何も無し Sheet7:Option Explict  Sheet8:Option Explict  次に標準モジュールを見ると Module1:Option Explict Sub Macro2() Module2:Option Explict Sub Macro3()  Module3:Option Explict Sub Macro4() Module4:Option Explict Sub Macro5()  Module5:Option Explict  Module6:Option Explict Sub Macro1() となっています。 Macro1~Macro5は全て マクロの記録のみで作成されています。 これを修正するのですが、Option Explictを 初めて見たので困惑しています。 よろしくお願いします。

  • 【1】と【2】のvbaは同じ意味ですか?

    【1】 Option Explicit Sub test1() Call test2("aaa") End Sub Sub test2(MyStr As String) MsgBox MyStr End Sub 【2】 Option Explicit Dim MyStr As String Sub test1() MyStr = "aaa" Call test2 End Sub Sub test2() MsgBox MyStr End Sub 結果は同じですが、中身が違います。 今後コードを作っていく上で どちらの方式の方が良いのでしょうか?

  • VBAの正しい構文なのでしょうか?。

    VBAの正しい構文なのでしょうか?。 以下の構文は正しいのでしょうか?。 Option Explicit Dim stdocname As String Dim repo As Report      :      :      : Private Sub 印刷_Click() On Error GoTo Err_印刷_Click      : Set repo = Reports(stdocname)

  • VBA クラスにプロパティが実装できません

    VBA初心者です。 現在、Excel2003-VBAでクラスにプロパティの実装を試みていますが、うまくいきません。 Publicで宣言する方法は問題なく出来たのですが…。 勉強用のため、敢えて簡単なサンプルを自分で作っています。 【状況】 下記プログラムで、メッセージを「20」と表示させたいのですが、 「スタック領域が不足しています」エラーにより、実行できません。 また「Atai」を「Suji」にかえると、メッセージとして「0」と出てきます。 あるいは、「Suji = Atai + 5」を消してみても「15」ではなく「0」と出ます。 【質問】 どちらでもうまくいかないのですが、これは (1)このコードがおかしいのか、それとも (2)単純なプログラムであるのに領域不足と出るところから、 VBA特有の不具合でどうしようもない物なのでしょうか? ご意見お待ちしています。 ===通常Module(呼び出し側)=== Option Explicit Sub 実行() Dim Haichi As New Class1 With Haichi .Suji = 15 .MSGクラス End With End Sub ===クラスMODULE(Class1)=== Option Explicit Sub MSGクラス() MsgBox Suji End Sub Public Property Let Suji(Atai As Double) Suji = Atai + 5 End Property Public Property Get Suji() As Double End Property

  • VBAから変更した時だけイベントを発生させない方法

    Excel VBA で、コンボボックスの選択をユーザーが変更した時はイベントハンドラが呼び出されて処理をしていますが、VBAのコードからコンボボックスの選択を変更した時には、このイベントハンドラが呼び出されないようにしたいのですが、どのように記述すればよいでしょうか。 例えば、下記のコードの (A) の部分で、VBAのコードからコンボボックスの選択を変更していますが、ここでイベントが発生しないようにしたいのですが、Application.EnableEvents = False を記述してもイベントが発生していますがなぜでしょうか。どのように記述すれば (A) の部分でイベントが発生しなくなりますでしょうか。 よろしくお願いします。(Windows7 , Excel2010 ) ---Module1---------- Option Explicit Sub main()  UserForm1.Show End Sub ---UserForm1-------- Option Explicit Private Sub UserForm_Initialize()  Dim i As Integer  ComboBox1.Style = fmStyleDropDownList  For i = 1 To 30   ComboBox1.AddItem Format(i, "00")  Next i End Sub Private Sub CommandButton1_Click()  Dim num As Integer  Dim index As Integer  num = ComboBox1.ListCount  index = ComboBox1.ListIndex  If index = num - 1 Then   Application.EnableEvents = False   ComboBox1.ListIndex = -1 '<----------(A)   Application.EnableEvents = True  Else   ComboBox1.ListIndex = index + 1  End If End Sub Private Sub ComboBox1_Change()  MsgBox ("ComboBox1_Changeイベント発生") End Sub ------------------------------------

  • VBA 100億になると#が自動で付く

    下記のコードを見てください。 Option Explicit Sub test1() Dim i As Long i = 1000000000 End Sub Sub test2() Dim i As Long i = 10000000000# End Sub test2の#は私が付けたものではありません。 test1より一つ多く0を付けたら勝手に付きました。 どうしてなのでしょう? 不思議です。

  • VBAでWorkbook_BeforeSaveイベントで質問

    Workbook_BeforeSaveイベントである条件に達していればExcelファイルを終了したくないのですがどうすればよいでしょうか? WindowsXP ProSP2、Excel2000 コード例) Option Explicit Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) dim flg as boolean if flg=true then exit sub end if End Sub

  • On Error Resume Nextを複数のプロシージャーで使うことは不可能ですか?

    Module1に ------------------------------------------- Option Compare Database Option Explicit Sub マクロ1() End Sub Sub マクロ2() End Sub ------------------------------------------- があるのですが ------------------------------------------- Option Compare Database Option Explicit Sub マクロ1() On Error Resume Next End Sub Sub マクロ2() On Error Resume Next End Sub ------------------------------------------- ではなく ------------------------------------------- On Error Resume Next Option Compare Database Option Explicit Sub マクロ1() End Sub Sub マクロ2() End Sub ------------------------------------------- これはできないのでしょうか? エラーになります。 dimもつけても駄目でした。 ひとつづつやっていくしかないのでしょうか?

専門家に質問してみよう