![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
作業中のブックから一枚のシートを以下のSub 別ファイル保存()プロシージャで別のブックとして保存します。それはうまくいったのですが、この元になるシートには
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'途中略
End Sub
と
Private Sub Worksheet_Deactivate()
'途中略
End Sub
の二つのVBAが記述してあり、これまで一緒に別のブックに入ってしまいます。
これを防ぐにはどのようにすればよいのでしょうか?
Sub 別ファイル保存()
mypath = ThisWorkbook.Path
fn = Sheets("Declarations").Range("H15").Value & Format(Date, "yymmdd")
ffn = mypath & "\" & fn & ".xls"
Sheets("Declarations").Copy
ActiveWorkbook.SaveAs Filename:=ffn
ActiveWorkbook.Close
End Sub
No.1ベストアンサー
- 回答日時:
保存する前にこれを呼んでみてください。
シート名を変更して下さい。
ステップで動かすと動作しません。
Public Sub delete_module()
Dim del_module As Object
Dim i As Long
Set del_module = ThisWorkbook.VBProject.VBComponents.Item("Sheet1").CodeModule
If del_module.CountOfLines > 0 Then
For i = 1 To del_module.CountOfLines
del_module.DeleteLines 1
Next
End If
End Sub
この回答への補足
早速ありがとうございます。
以下のようにしましたが「インデックスが有効範囲にありません」と実行時エラーが出ます。
デバッグOKとすると
Set del_module = ThisWorkbook.VBProject.VBComponents.Item("Declarations").CodeModule
が黄色く反転します。
エクセル2000です。
Sub TEST別ファイル保存()
mypath = ThisWorkbook.Path
fn = Sheets("Declarations").Range("H15").Value & Format(Date, "yymmdd")
ffn = mypath & "\" & fn & ".xls"
Sheets("Declarations").Copy
Call delete_module
ActiveWorkbook.SaveAs Filename:=ffn
ActiveWorkbook.Close
End Sub
Public Sub delete_module()
Dim del_module As Object
Dim i As Long
Set del_module = ThisWorkbook.VBProject.VBComponents.Item("Declarations").CodeModule
If del_module.CountOfLines > 0 Then
For i = 1 To del_module.CountOfLines
del_module.DeleteLines 1
Next
End If
End Sub
おかげさまでなんとか出来ました。
VBComponentsを教えていただきましたので、これを検索してやっとわかりました。
で、ThisWorkbook.ですと本体のVBAが削除されてまずいですよね?
Set del_module = ActiveWorkbook.VBProject.VBComponents.Item("Sheet1").CodeModule
でうまく行っています。
ありがとうございました。
No.4
- 回答日時:
No.2です。
解決してなによりです。
お礼のコメントにちょと気になるところがありましたので一言。
>コピーして値と書式だけ貼り付けようとも考えましたが
>画像がいくつかあったのでシートのコピー方式でやりたい
これですが、当方の回答にもある、
Sheets("Sh01").Cells.Copy を使えば、
シート全選択になってますのでShapeも画像も全てコピーされます。
但し、CommandButton等のコントロールは出来ませんが。(^^;;;
以上です。
わざわざありがとうございます。
> Sheets("Sh01").Cells.Copy を使えば、
> シート全選択になってますのでShapeも画像も全てコピーされます。
わたしもそう思うのですが、どういうわけか出来ません。
Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
を設定すると貼り付けるときにエラーになってしまいます。
No.3
- 回答日時:
Set del_module = ThisWorkbook.VBProject.VBComponents.Item("Declarations").CodeModule
の部分の"Declarations"はシート名ではないですか?
シートのオブジェクト名はSheet1とかSheet2とかだと思います。プロジェクトエクスプローラのシートオブジェクトの()の中の名前ではなくその左側の名前を指定すれば、うまくいくと思うのですが。
> シートのオブジェクト名はSheet1とかSheet2とかだと思います。
はい、まさにそのとおりでした。
VBComponentsで検索してやっとわかりました。
で、No2さんへのお礼でも書きましたが、試行錯誤の結果なんとか完成しました。
ThisWorkbook.で本体のVBAが削除されてまずいですよね?
No.2
- 回答日時:
こんにちは。
発想を転換して、シートの内容だけコピーすればいいのでは?
コピーのシート名は、"Sh01" とした場合
----------------------------------------------
Sub 別ファイル保存()
Dim MyPath, fn, ffn
MyPath = ThisWorkbook.Path
fn = Sheets("Sh01").Range("H15").Value & Format(Date, "yymmdd")
ffn = MyPath & "\" & fn & ".xls"
'=== ここから ========
Dim NewBook As Workbook
Sheets("Sh01").Cells.Copy
Set NewBook = Workbooks.Add
With NewBook
.Sheets(1).Paste
.Sheets(1).Name = "Sh01"
.SaveAs Filename:=ffn
.Close
End With
Application.CutCopyMode = False
End Sub
---------------------------------------------
以上です。
ありがとうございます。
コピーして値と書式だけ貼り付けようとも考えましたが、画像がいくつかあったのでシートのコピー方式でやりたいのです。
試行錯誤の結果、シート名をSheet1にし、Thisworkbookでは本体のVBAが消えてしまったのでこれをActiveworkbookに変更してなんとか出来ました。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2022/10/13 08:41
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/06/01 14:45
- Visual Basic(VBA) vbaのエラー対応(実行時エラー7:メモリが不足しています) 4 2023/04/24 00:20
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) VBAでエクセルをtxtに変換するとエクセルでカンマを含む文字数字がtxtでは「""」付にならないよ 1 2022/08/27 12:17
- Excel(エクセル) Excelのマクロコードについて教えてください。 1 2022/03/27 10:47
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel 関数を使ってデータと一...
-
エクセルの選択範囲以外を削除...
-
EXCELのVBAでシートコピーをし...
-
エクセルの1シートの内容を複...
-
Excelの行をコピーして貼り付け...
-
【Excel VBA】シートコピー時、...
-
EXCELで別のブックから式をコピ...
-
エクセルのシートを完全にコピー
-
JWWのショートカットキーが使え...
-
VBA シートをコピー後、ボタン...
-
エクセルのファイルで、あるブ...
-
Excel 数式の保護をしたセルを...
-
【VBA】コピー&複数個所のペー...
-
EXCEL2007でシートをコピーする...
-
EXCEL2003 VBAを表示ロック
-
エクセルのページをシートごと...
-
エクセルシートを別のエクセル...
-
【Excel】数式をそのまま他のシ...
-
エクセルのユーザーフォームを...
-
Excel Selectは使わない? VBA
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel 関数を使ってデータと一...
-
エクセルの選択範囲以外を削除...
-
EXCELのVBAでシートコピーをし...
-
EXCELで別のブックから式をコピ...
-
【Excel】数式をそのまま他のシ...
-
【VBA】コピー&複数個所のペー...
-
Excelの行をコピーして貼り付け...
-
CSVファイルについて質問です。
-
【エクセル】プルダウン設定の...
-
Excel シートのコピーの際、ペ...
-
Excel 数式の保護をしたセルを...
-
【Excel VBA】シートコピー時、...
-
エクセルの1シートの内容を複...
-
ExcelVBAで、ユーザーフォーム...
-
Excel シートに別のExcelシート...
-
シートが保護されていないのに...
-
PDFファイルをコピーしてエクセ...
-
エクセルシートを別のエクセル...
-
エクセルVBA 1行飛ばしで転記す...
-
エクセルでシートを「移動また...
おすすめ情報