- ベストアンサー
EXCEL2003VBA 「マクロでモジュール解放」
質問番号:5548045の関連質問です。 EXCEL2003VBA で、セキュリティ設定で『Visual Basic プロジェクトへのアクセス』にチェックを入れて、Module1に下記のように「モジュール解放」マクロを作成しましたが、Module1が削除されません。(1)を削除して、手動操作で変更を保存でファイルを閉じるとModule1も削除されます。 Module1の削除も全てマクロで行うやり方を教えてください。 With ThisWorkbook.VBProject.VBComponents .Remove .Item("Module1") .Remove .Item("Module2") .Remove .Item("Module3") End With ActiveWorkbook.SaveAs Filename:="D:\TEST" ActiveWorkbook.Close ・・・(1)
- pegasusv
- お礼率98% (116/118)
- Visual Basic
- 回答数4
- ありがとう数5
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>自分のファイルは残して、シート部分のみ別ファイルにしたかったので それなら ThisWorkbook.Worksheets.Copy With ActiveWorkbook .SaveCopyAs "D:\TEST.xls" .Close False End With
その他の回答 (3)
- redfox63
- ベストアンサー率71% (1325/1856)
すみません set oVBE as Application.VBE これは set oVBE = Application.VBE の間違えです orz マクロの最後 ' 変更を反映 Workboos("Sample02.xls").Save End Sub の部分を ' 変更を反映 Workbooks("Sample02.xls").Close True ' Sample02.xlsがVBE上で残ってしまうため … ActiveWorkbook.Save End Sub としたほうがいいようです
お礼
再度の回答有難うございました。 今度は、ちゃんと動きました。 年末の忙しい時に回答頂き、有難うございます。 時々「教えて!goo」は、利用させて貰っています。 今年も宜しくお願いします。
- watabe007
- ベストアンサー率62% (476/760)
>EXCEL2003VBA で、セキュリティ・・・ EXCEL2003の環境が無いので確認できず別案 全シートを新ブックにコピーして元のブックと入れ替えれば Sub Test() Dim myName As String With ThisWorkbook myName = .FullName .SaveAs Filename:="J:\Tmp.xls" .Saved = True .ChangeFileAccess Mode:=xlReadOnly .Worksheets.Copy Application.DisplayAlerts = False ActiveWorkbook.SaveAs myName Application.DisplayAlerts = True Kill "J:\Tmp.xls" .Close False End With End Sub
お礼
回答有難うございます。 実際に動かしてみましたが、自分のファイルのマクロが削除されてしまいました。やろうと思っていたのは、自分のファイルは残して、シート部分のみ別ファイルにしたかったので、保存するときにD:\TESTを指定してやれば良いですね。 Moduleを削除するのではなくて、シート部分を別ファイルにコピーする。考えてみれば、その方法が確かに簡単ですね。 どうも、有難うございました。
- redfox63
- ベストアンサー率71% (1325/1856)
自分自身を削除するのは無理かと思いますよ 最初に ActiveWorkbook.SaveCopyAs でマクロ抜きのブックを保存しておいてから 保存したブックを開き このブックを操作してマクロを抜いて もう一度変更を更新してみましょう Sub DeleteMacro ' 変更後のマクロがわかるように変更 Application.VBE.VBProjects(1).Name = "Sample02" ActiveWorkbook.SaveCopyAs "D:\Sample02.xls" ' 元に戻す Application.VBE.VBProjects(1).Name = "VBAProject" ' マクロを削除するブックを開く Workbooks.Open "D:\Sample02.xls" dim oVBE as VBE, oProj as VBProject, oMod as VBComponent dim n as Integer set oVBE as Application.VBE ' 変更するブックのプロジェクトを取得 set oProj = oVBE.VBProjects("Sample02") With oProj for n = .VBComponents.Count to 1 step -1 set oMod = .VBComponents(n) ' 削除するモジュールの検査 if InStr( oMod.Name, "Module" ) then .VBComponents.Remove oMod end if next End With ' 変更を反映 Workboos("Sample02.xls").Save End Sub といった具合で … ブックを開いたとき自動実行されるマクロなどがあって不具合があるなら ブック名などの違いを検出してマクロが起動しないようにしておきましょう
お礼
回答有難うございます。 上記マクロを動かしてみましたが、下記の部分で「構文エラー」が出ました。 set oVBE as Application.VBE エラーの原因が分かりませんので、教えて下さい。
関連するQ&A
- VBAでのマクロ削除
複数のExcelファイルを読み込み必要なデータのみをsheet1に寄せ集め最後にExcel形式で保存するというコードを書きました。保存したExcelファイルは、次回同じVBAのコードからWorkbooks.Open Filenameで開く必要があるため、マクロを削除してから保存しないといけないことに気付きました。 ACompo = ExcelWorkbook1.VBProject.VBComponents.Item("module1") ExcelWorkbook1.VBProject.VBComponents.Remove (ACompo) 最終的にやりたいことは、3つのフォームと2つの標準モジュールを削除したい(ワークブックモジュールにもコード書いてありますのでそれも) ということになります。 よろしくお願いします。
- 締切済み
- オフィス系ソフト
- 過去レス「マクロでモジュール解放を記述出来るか」
'08.1.15のご質問No.3682185「マクロでモジュール解放を記述出来るか?」 のご回答が以下でした。 -------- まず Excelのマクロのセキュリティ設定で『信頼できる発行元』タブにある『Visual Basic プロジェクトへのアクセス』にチェックを入れておきます VBEで参照設定に『Microsoft Visual Basic for Application Extensibility 5.3』を追加します これでモジュールに対するアクセスができるようになります 実際のアクセス方法ですが Dim oVBE as VBE, oPrj as VBProject, oComp as VBComponent ' oCompがモジュールになります Set oVBE = Me.Application.VBE Set oPrj = oVBE.VBPrjects("VBAProject") for each oComp in oPrj.VBComponents if oComp.Name = "開放したいモジュール名" then oPrj.VBComponents.Remove oComp end if next といった具合になります 【ここから質問です】 私のはエクセル2000ですが、上記をやると、 「コンパイルエラー:Meキーワードの使用方法が不正です」と出ます。 どこを直せば動くようになりますか?
- ベストアンサー
- Visual Basic
- excel VBA コピーファイルのマクロ削除
下記3つの、プロシージャを組み合わせて、下記のやりたいことをやりたいのですが、うまくいきません。 どうかご教授の程よろしくお願いいたします。 excelは2000です。 ○やりたいこと 今現在開いているファイルの、コピーをデスクトップに保存して、その保存したブックのマクロ(標準モジュールと、コマンドボタン)を削除したい。 ○自分でやろうとすると コピーをデスクトップに保存すると、コピー元のファイルが勝手に閉じてしまい、コピー先のファイルのマクロを削除できない。 '■デスクトップにコピー保存 Sub copysave() Dim 場所 As String 場所 = CreateObject("WScript.Shell").SpecialFolders("Desktop") ActiveWorkbook.SaveAs Filename:=場所 & "\" & Format(Date, "yyyymmdd") & "○◆△.xls" End Sub '■標準モジュールの削除 Sub DelModule() Application.VBE.ActiveVBProject.VBComponents.Remove _ Application.VBE.ActiveVBProject.VBComponents("Module1") Application.VBE.ActiveVBProject.VBComponents.Remove _ Application.VBE.ActiveVBProject.VBComponents("Module2") End Sub '■CommandButtonの削除 Sub DelCommandButton() Dim c As Excel.OLEObject For Each c In Worksheets(1).OLEObjects If TypeOf c.Object Is Msforms.CommandButton Then c.Delete End If Next End Sub
- ベストアンサー
- オフィス系ソフト
- 自身が記述された標準モジュールを常に参照する方法
標準モジュール名を指定せず、自身が記述された標準モジュールを常に参照する方法 例えば A = W_Book.VBProject.VBComponents("Module56").CodeModule.ProcBodyLine("Workbook_SheetSelectionChange", 0) というコードを"Module56"内に記述した場合Module56という標準モジュール名を例えばModule44と変更してしまうと動かなくなってしまうと思います。 これを、常にThisWorkbookのように、このコードが記述されたモジュールを参照するように変更はできますでしょうか?もしご存知でしたらご回答頂けますと幸いです。どうぞよろしくお願いいたします。
- ベストアンサー
- Visual Basic
- EXCEL2000VBA実践プログラミングリファレス「著者:大村あつし
EXCEL2000VBA実践プログラミングリファレス「著者:大村あつし、栗山 恵吉、田中 博人、出版社エーアイ出版」のサンブルマクロが動かない。 マクロの初心者です。 私のパソコンはエクセル2007を利用しています。 サンプルマクロを動かす以前に、全てのサンプルに With ThisWorkbook.VBProject.VBComponents("Module1") に黄色のエラーが出てしまいます。 なぜかわかればご教示お願いします。 'コードを表示 Function GetCode(ByVal NowProc As String, ByVal NextProc As String) As String Dim myStartLine As Integer Dim myEndLine As Integer 黄色のエラー箇所⇒With ThisWorkbook.VBProject.VBComponents("Module1") myStartLine = .CodeModule.ProcBodyLine(NowProc, vbext_pk_Proc) If NextProc <> "" Then myEndLine = .CodeModule.ProcStartLine(NextProc, vbext_pk_Proc) Else myEndLine = .CodeModule.ProcCountLines(NowProc, vbext_pk_Proc) + myStartLine End If GetCode = .CodeModule.Lines(myStartLine, myEndLine - myStartLine) End With End Function
- ベストアンサー
- オフィス系ソフト
- アクセスで標準モジュールの中身を書き出したい
http://officetanaka.net/excel/vba/vbe/05.htm の Sub Sample9() Dim Code As String Code = ThisWorkbook.VBProject.VBComponents("Module1").CodeModule.Lines(7, 5) MsgBox Code End Sub のエクセルではなく アクセスバージョンはないでしょうか? http://d.hatena.ne.jp/taka_2/20090907/p2 をアクセスの標準モジュールに貼り付けてみたのですが inFileName = WScript.Arguments(0) で実行時エラー424になってしまいます。
- ベストアンサー
- Visual Basic
- 標準モジュールを削除したい。(VBA)
VBAで、VBAの標準モジュールを削除したいのですが、なかなか出来ません。たぶん、コレクションについての認識があまいからだと思います。VBComponents コレクションのobject.Remove(component)のヘルプには、VBProjects コレクションには、スタンドアロン プロジェクトを指定します。とありますが、そもそもスタンドアロンプロジェクトって何ですか?Application.VBE.VBProjects(4).VBComponents(1).とするとコレクションでなくなってしまいますが、どうやってモジュールと特定するのでしょうか?どなたか詳しい方いらっしゃいましたらご指導願います。よろしくお願いいたします。 VBIDEのライブラリーです。
- ベストアンサー
- オフィス系ソフト
- excel2013 モジュールをVBAで書換えたい
お世話になります。 現行使用しているモジュール内に記述されているファイル名をVBAで書き換えたいのです。 現状コーディング中に記述されているファイル名には、頭に年度を表わす、例えば 2014年なら下2桁の "14データ処理用" と書かれていて、年度が変わるたびに、 14を15の様にキーボードより編集しています。 しかしモジュールの中にファイル名の記述箇所が複数あり、またモジュールは複数あり その中にもその年のファイル名が記述されているために修正も一苦労しています。 そこでVBAのコードの記述を変換するためのフォームを作成し、西暦の下2桁を、前年、当年 それぞれ入力し、前年で検索して当年に置換するようにしたのですが、実行時エラー'13' で落ちてしまいます。 PCはゲストで使用しています。御存じのかたいらっしゃいましたらご教示願います。 以下VBAのコーディングです。宜しくお願いします。 Option Explicit Dim Target As Workbook, VBC, i As Long Private Sub CommandButton1_Click() Set Target = Workbooks(Sheet1) With Target.Workbooks(Sheet1).VBProject.VBComponents("Module1").CodeModule For i = 1 To .CountOfLines If .Lines(i, 1) = "" & In_Year & "データ" Then 'In_Year;前年 .ReplaceLine i, "" & Out_Year & "データ" 'Out_Year;当年 End If Next i End With Target.Save End Sub
- ベストアンサー
- Visual Basic
- 2007から2010excel マクロ実行時エラー
2007のexcelだと上手く動くのですが、2010のexcelだと”実行時エラー1004” 「プログラミングによるVisual Basicプロジェクトへのアクセスは信頼性に欠けます」 と表示されます。デバックすると下記の部分に色がつきます。どのような記述にしたら 回避できるか教えてください。 For Each objVBCOMPO In NewWkbook.VBProject.VBComponents←黄色になります! With objVBCOMPO.CodeModule ' コードを削除(全行) lngLines = .CountOfLines If lngLines <> 0 Then .DeleteLines 1, lngLines End With Next objVBCOMPO
- ベストアンサー
- Excel(エクセル)
- 【EXCEL VBA】Visual Basic Editorについて
お世話になります。 EXCELで「Visual Basic Editor」を開くと、 左側に下記が表示されます。 Microsoft Excel Objects > Sheet1、Sheet2、Sheet3、ThisWorkBook フォーム > UserForm1 標準モジュール > Module1 クラス モジュール > Class1 Sheet1やUserForm1、Module1、Class1にそれぞれコードを 入力できますが、違い、使い分けについて教えてほしいです。 どれにコードを書いていけばいいか分からず困っています。 よろしくお願いします。
- 締切済み
- オフィス系ソフト
お礼
再度の回答有難うございました。 ちゃんと動作しました。 たった4行で処理できるなんて、驚きました。 年末の忙しい時に回答頂き、有難うございます。 時々「教えて!goo」は、利用させて貰っています。 今年も宜しくお願いします。