『ボヘミアン・ラプソディ』はなぜ人々を魅了したのか >>

VBAProjectに、「テスト」というモジュール
が存在すれば、メッセージ「テストモジュールは
存在しています」

という、処理をエクセルVBAで記述したいです。

上記の処理はVBAで記述することはできるの
でしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (3件)

Office のバージョンはいくつでしょうか?


Excel 2003 および Excel 2007 で
Visual Basic プロジェクトへのアクセスをプログラミングにより
許可すると実行時エラーが表示される場合がある
http://support.microsoft.com/kb/813969/ja

2002 でもサービスパック3かな?の適用で、VBA Project への
アクセスは出来なくなっています。
オプション設定を変更すれば出来るようになりますが
VBAからの変更は出来ませんでした。
マクロウィルス対策のためなのであたりまえでしょうけど・・

質問者さんだけがチェックを行いためだけなら問題ないのでしょうけど
他の人のセキュリティレベルを変更するのはいかがなものかと。

以前の回答ですがこれとOffice Tanaka さんのを調整すれば出来るかな?
http://oshiete.goo.ne.jp/qa/2702088.html
    • good
    • 0

私の場合「変更」と言うモジュール名があります。

これでテストした例。
Sub test01()
Dim vb0
fnd = "n"
For Each vbo In ActiveWorkbook.VBProject.VBComponents
If (vbo.Type = 1 Or vbo.Type = 2) And vbo.Name <> "VBE" Then
i = i + 1
MsgBox "モジュール名(" & i & ") = " & vbo.Name
If vbo.Name = "変更" Then
fnd = "y"
End If
End If
Next
If fnd = "y" Then
MsgBox "module名=変更は あり"
Else
MsgBox "module名=変更は ない"
End If
End Sub
ーー
http://officetanaka.net/excel/vba/vbe/04.htm
からすれば Or vbo.Type = 2の部分は不要かも。
1 標準モジュール
2 クラス モジュール
    • good
    • 0

Office TANAKA


CodeModuleのプロパティ
http://officetanaka.net/excel/vba/vbe/05.htm

上記のページの最後にある

すべてのプロシージャ名を取得する例

のところを参考にしてみてください
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QVBA プロシージャの名前の取得

プロシージャ名を取得できないかなと考えています。
・Form_Openプロシージャ内で「Form_Open」という文字を取得
・フォーム上に「新規登録」というボタンを作成、クリックした時にできる「新規登録_Click」プロシージャ内で「新規登録_Click」という文字を取得
不可能な場合、各プロシージャに「Form_Open」や「新規登録_Click」をベタ書きしようと考えていますが、非効率と考え、やりたくありません。
できればバージョンは2000以降で、ExcelでもAccessでも構いません。
可能かどうかだけでも教えてください。

Aベストアンサー

>不可能な場合、各プロシージャに「Form_Open」や「新規登録_Click」をベタ書きしようと考えていますが

何がしたいのか全く解りませんが、”プロシージャ名取得”の関連情報のリンクだけ紹介しておきます。


http://oshiete1.goo.ne.jp/qa1219426.html
http://park7.wakwak.com/cgi-bin/sbox/~efc21/exqalounge.cgi?print+200905/09050016.txt
http://www.officetanaka.net/excel/vba/vbe/05.htm
http://support.microsoft.com/kb/410621/ja

http://search.goo.ne.jp/web.jsp?dummy=%F3%FE%F3%FE%F3%FE&status=select&from=goo_oshiete&PT=goo_oshiete&nsMT=&MT=vba+%A5%D7%A5%ED%A5%B7%A1%BC%A5%B8%A5%E3%CC%BE+%BC%E8%C6%C0&c=0

>不可能な場合、各プロシージャに「Form_Open」や「新規登録_Click」をベタ書きしようと考えていますが

何がしたいのか全く解りませんが、”プロシージャ名取得”の関連情報のリンクだけ紹介しておきます。


http://oshiete1.goo.ne.jp/qa1219426.html
http://park7.wakwak.com/cgi-bin/sbox/~efc21/exqalounge.cgi?print+200905/09050016.txt
http://www.officetanaka.net/excel/vba/vbe/05.htm
http://support.microsoft.com/kb/410621/ja

http://search.goo.ne.jp/web.jsp?dummy=%F3%FE%F3%FE%F3%F...続きを読む

Q標準モジュールを削除したい。(VBA)

VBAで、VBAの標準モジュールを削除したいのですが、なかなか出来ません。たぶん、コレクションについての認識があまいからだと思います。VBComponents コレクションのobject.Remove(component)のヘルプには、VBProjects コレクションには、スタンドアロン プロジェクトを指定します。とありますが、そもそもスタンドアロンプロジェクトって何ですか?Application.VBE.VBProjects(4).VBComponents(1).とするとコレクションでなくなってしまいますが、どうやってモジュールと特定するのでしょうか?どなたか詳しい方いらっしゃいましたらご指導願います。よろしくお願いいたします。
VBIDEのライブラリーです。

Aベストアンサー

こんばんは。

VBAで、VBAのコードを扱うのは、ある程度VBAをマスターしてからの方がベターだと思うのですが、色々質問され懸命にVBAを学ぼうとされているようなので、シンプルなサンプルをひとつ。

先ず、新しいブックのシートモジュール、標準モジュール、それからUserFormに適当なコードを書いおきます。
そして以下のコードを同じブックの標準モジュールに書いて実行すると、標準モジュールだけが全て削除されます。

----------------------------------------
Sub CodeDelete()
 Dim Obj As Object
 For Each Obj In ThisWorkbook.VBProject.VBComponents
  With Obj
    If .Type = 1 Then
        Application.VBE.activeVBProject.VBComponents.Remove Obj
    End If
  End With
 Next Obj
End Sub

-----------------------------------------------
尚、これを2002以降で実行する時は、マクロ「セキュリティ」ダイアログで、「Visual Basic Projectへのアクセスを信頼する」にチェックを入れてから実行すること。

それから以前似たような質問に答えてありますので以下のURLも覗いてみてください。

http://oshiete1.goo.ne.jp/kotaeru.php3?q=1347061

後は自力で!・(^^;;;
以上です。

 

こんばんは。

VBAで、VBAのコードを扱うのは、ある程度VBAをマスターしてからの方がベターだと思うのですが、色々質問され懸命にVBAを学ぼうとされているようなので、シンプルなサンプルをひとつ。

先ず、新しいブックのシートモジュール、標準モジュール、それからUserFormに適当なコードを書いおきます。
そして以下のコードを同じブックの標準モジュールに書いて実行すると、標準モジュールだけが全て削除されます。

----------------------------------------
Sub CodeDelete()
 Dim Obj As Obje...続きを読む

QエクセルVBA モジュールの印刷について

エクセルVBA標準モジュールの印刷のセットアップはどうやるのでしょうか?
いつも用紙左側ギリギリに印刷され、ファイルに閉じると左側が見えなくなってしまいます。
よろしくお願い申し上げます。

Aベストアンサー

こんなのを考えてみました。
"VBAProject" の所は適宜変更する必要がありそうです。
投稿用にタブを全角スペースに変換しているのでエラーになるかも

Sub PrintModule()
'モジュールを印刷するモジュール
Const trgDir = "g:\temp\"
Dim i As Integer

  With Application.VBE.VBProjects.Item("VBAProject")
    For i = 1 To .VBComponents.Count
      Debug.Print .VBComponents(i).Name
      .VBComponents(i).Export _
        (trgDir & "m_" & .VBComponents(i).Name & ".bas")
      
      Shell (Environ("ComSpec") & " /c type " _
        & trgDir & "m_" & .VBComponents(i).Name & ".bas >> " _
        & trgDir & "m_all.txt")
      
      If i <> .VBComponents.Count Then
        Shell (Environ("ComSpec") & " /c echo " _
          & "." & " >> " _
          & trgDir & "m_all.txt")
        
        Shell (Environ("ComSpec") & " /c echo " _
          & String(20, "☆") & " >> " _
          & trgDir & "m_all.txt")
      End If
    Next
  End With
  
  Shell ("explorer.exe " & trgDir & "m_all.txt"), vbNormalFocus
End Sub

こんなのを考えてみました。
"VBAProject" の所は適宜変更する必要がありそうです。
投稿用にタブを全角スペースに変換しているのでエラーになるかも

Sub PrintModule()
'モジュールを印刷するモジュール
Const trgDir = "g:\temp\"
Dim i As Integer

  With Application.VBE.VBProjects.Item("VBAProject")
    For i = 1 To .VBComponents.Count
      Debug.Print .VBComponents(i).Name
      .VBComponents(i).Export _
        (trgDir & "m_" & .VBComponent...続きを読む

QVBA オブジェクトが空かどうか判定する

皆様のお知恵を拝借させてください。

エクセルVBAでオブジェクトを入れる変数を定義し、その変数にオブジェクト
が入っているかどうか検査したいのですがどうしたらいいでしょうか。

例えば---
Dim a As Workbook
If a <> nothing then ←この部分が分からない。このままだとエラー。
処理
End if
---------
環境
エクセル2003
WinXPsp1

Aベストアンサー

もし、aが空だったら
If a Is Nothing Then 

もし、aが空じゃなかったら
If Not a Is Nothing Then

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

Qプロシージャ名の取得

教えてください。
VBで現在実行しているプロシージャ名を取得指定のですがkのようなことは可能ですか?
可能ならばどのようにすればいいか教えてください。

現在実行ファイルにて起動しているのですが、どこかで「実行エラー」が発生しています。
この実行エラーの場所の特定のために、現在起動中のプロシージャ名をログに保存しようかと考えています。
また、その他このようなエラー箇所特定方法などがありましたら教えてください。
環境:VB6.0  Win2000

Aベストアンサー

残念ながら出来ません。

私のプロジェクトでは全てのプロシージャに On Error コーディングをして、そこでログにどのプロシージャかを書いてました。

そういう方法しかないと思います。

QEXCELファイルのカレントフォルダを取得するには?

EXCELファイルのカレントフォルダを取得するには?

C:\経理\予算.xls

D:\2005年度\予算.xls

EXCEL97ファイルがあります。

VBAで
  カレントフォルダ名
(C:\経理\,D:\2005年度\)
を取得する事は可能でしょうか?

CURDIRでは上手い方法が見つかりませんでした。

Aベストアンサー

こんばんは。
Excel97 でも、同じですね。以下で試してみてください。

Sub test()
'このブックのパス
a = ThisWorkbook.Path
'アクティブブックのパス
b = ActiveWorkbook.Path
'Excelで設定されたデフォルトパス
c = Application.DefaultFilePath
'カレントディレクトリ
d = CurDir
MsgBox "このブックのパス   : " & a & Chr(13) & _
   "アクティブブックのパス: " & b & Chr(13) & _
   "デフォルトパス    : " & c & Chr(13) & _
   "カレントディレクトリ : " & d & Chr(13)
End Sub

Q標準モジュール、フォームを別のブックにコピーするには?

いつもお世話になります。
以下のようなVBAを作成しました。

sub test()
Sheets(Array("追加テンプレート", "入庫", "出庫", "在庫")).Select
Sheets("在庫").Activate
Sheets(Array("追加テンプレート", "入庫", "出庫", "在庫")).Copy
Sheets("在庫").Activate

ActiveWorkbook.SaveAs Filename:= _
"D:\" + CStr(Month(Date) + 1) + "月度在庫表",    FileFormat:=xlNormal,Password:="", WriteResPassword:="", ReadOnlyRecommended:=False,CreateBackup:=False
end sub

新しく作成したブックに標準モジュールとフォームが
コピーされません。
ほかにVBAの記述が必要かと思いますが、
本をひっくり返しても見つかりませんでした。

みなさま宜しくお願いいたします。

いつもお世話になります。
以下のようなVBAを作成しました。

sub test()
Sheets(Array("追加テンプレート", "入庫", "出庫", "在庫")).Select
Sheets("在庫").Activate
Sheets(Array("追加テンプレート", "入庫", "出庫", "在庫")).Copy
Sheets("在庫").Activate

ActiveWorkbook.SaveAs Filename:= _
"D:\" + CStr(Month(Date) + 1) + "月度在庫表",    FileFormat:=xlNormal,Password:="", WriteResPassword:="", ReadOnlyRecommended:=False,CreateBackup:=False
end sub

新し...続きを読む

Aベストアンサー

シートのコピーだけではVBAは保存されません。

ActiveWorkbook.SaveCopyAs
の1行で、開いているブックのコピーを保存出来ます。

QEXCEL VBAで計算値を四捨五入、切り上げ、切捨てする方法

ネットで探してみたのですが、計算結果を四捨五入して特定のセルを
返すにはどうしたらいいのでしょうか?

Sub hokangosa()

Dim ZPS As Double
Dim ZPOS As Double
Dim DMN As Double
MsgBox (" >>> 補間誤差自動計算 <<< ")
MsgBox (" >>> 初期値入力します <<< ")
ZPS = InputBox(">>> ステップを入力してください<<<")
ZPOS = Sheet1.Cells(22, 4).Value
DMN = ZPOS / ZPS
Sheet1.Cells(23, 6).Value = DMN
End Sub

ここでDMNの値を四捨五入したいです。

またこれとは別に切上げ、切捨ても教えていただけるとありがたいです。

Aベストアンサー

DMN = Application.WorksheetFunction.Round(ZPOS / ZPS, 0)
で、四捨五入
DMN = Application.RoundDown(ZPOS / ZPS, 0)
で切り捨て
DMN = Application.RoundUp(ZPOS / ZPS, 0)
で切り上げです。

引数で、対象桁を変更できます。

QVBA モジュールで共通に使う変数の宣言方法

VBAにてプログラミングを覚えている者です。

現在、いくつかのモジュールがあり、それぞれDimにて宣言している共通の変数があります。
いくつものプロシージャに毎回宣言せず、どこかでひとまとめにしたいと思い、色々と調べています。

例えば、

Dim pic1 As Picture
Dim cell1 As String
Dim pass1 As String
Dim pic2 As Picture

などです。


Dimのほかに、Publicの宣言などがありますが、いま一つ使い方がピンときません。

共通宣言する変数をひとつのモジュールとして登録し、活用できると、いざ変更となったときに
その内容だけ置き換えればいいと思うのですが、みなさんはどのように宣言をしていますか?
(例えば、Stringなどは各モジュールで変更するのが大変だと思うのですが・・・)

ヒントを教えていただければと思います。よろしくお願いします。

Aベストアンサー

>モジュールで共通に使う変数の宣言方法

モジュールの先頭に書いたdimで宣言すると,そのモジュールの中だけ(に記入されている各プロシジャ)でパブリックになります。
モジュールの先頭に書いたpublicで宣言すると,全モジュール(に記入されている各プロシジャ)に対してパブリックになります。

「変数宣言モジュール」のようにモジュールを越えて参照させたいという事なので,DimではなくPublicで宣言します。


Module1:
public x as variant


Module2:
sub macro1() ’先に実行する
x = "abc"
end sub


Module3:
sub macro1()
msgbox x
end sub


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング