
シート毎に別々のファイルに保存するためのVBAを作成しております。
現在のコードは以下の通りです。
'シート名をそのままファイル名にする方法
Dim i As Integer
Dim wb1 As Workbook
Dim SheetCnt As Integer
Set wb1 = ActiveWorkbook
SheetCnt = wb1.Sheets.Count
For i = 1 To SheetCnt
If Sheets(i).Visible = True Then
ChDir CreateObject("WScript.Shell").SpecialFolders("desktop") & "\"
Workbooks.Add.SaveAs Filename:="分析_" & Worksheets(i).Name & ".xlsx"
wb1.Worksheets(i).Copy Before:=Workbooks("分析_" & Worksheets(i).Name & ".xlsx").Worksheets(1) ・・・①
'シートを保存して閉じる
ActiveWorkbook.Close SaveChanges:=True
End If
マクロを実行すると新しいworkbook作成迄は実行されますが、その後のコピペ(①の箇所)でエラーとなります。
どの様に変更すれば良いか教えて頂けないでしょうか。
併せて「シートを保存して閉じる」際に「リンクの自動更新を無効」にしたまま保存する様にしたいと考えています。
良いお知恵をお貸しください。
宜しくお願いします。
No.1ベストアンサー
- 回答日時:
こんにちは
少し整理してみました。
>「リンクの自動更新を無効」にしたまま
もとのブックにリンクが存在するということでしょうか?
個々に処理をするのが面倒だったので、まとめて「値をペースト」形式にしてしまっています。
(ですので、シート内リンクや関数式も値に変換されちゃいます)
きちんと「リンクの自動更新を無効」をなさりたい場合は、BreakLinkで処理してください。
https://docs.microsoft.com/ja-jp/office/vba/api/ …
※ 既存のファイル名をチェックしていませんので、同名のファイルが存在する場合には上書きの確認メッセージが表示されます。
※ シート数が多く画面がチラつくような場合は、ScreenUpdatingをFalseにするとよいでしょう。
Sub Sample_11700270()
Dim sPath As String, sh As Worksheet
sPath = CreateObject("WScript.Shell").SpecialFolders("desktop") & "\分析_"
For Each sh In Worksheets
sh.Copy
ActiveSheet.UsedRange.Value = ActiveSheet.UsedRange.Value
ActiveWorkbook.SaveAs Filename:=sPath & sh.Name & ".xlsx"
ActiveWorkbook.Close SaveChanges:=False
Next sh
End Sub
fujillinさん
いつも有難うございます。
私の質問の仕方が拙かったですね。
今開いているブックに4つのシートがあり、それぞれのシートを新たなにデスクトップに作成したフォルダに
コーピーしてシート名で保存する
と言う作業を行っております。
今の総てのコードは
Dim fso As Object
Dim FolPath As String
FolPath = CreateObject("WScript.Shell").SpecialFolders("desktop") & "\あ"
Set fso = CreateObject("Scripting.FileSystemObject")
If fso.FolderExists(FolPath) Then
fso.DeleteFolder FolPath
fso.CreateFolder (FolPath)
Else
fso.CreateFolder (FolPath)
End If
Dim i As Integer
Dim wb1 As Workbook
Dim SheetCnt As Integer
Set wb1 = ActiveWorkbook
SheetCnt = wb1.Sheets.Count
For i = 1 To SheetCnt
If Sheets(i).Visible = True Then
ChDir CreateObject("WScript.Shell").SpecialFolders("desktop") & "\あ"
Workbooks.Add.SaveAs Filename:="い_" & Worksheets(i).Name & ".xlsx"
wb1.Worksheets(i).Copy After:=Workbooks("い_" & Worksheets(i).Name & ".xlsx").Worksheets(1)
ActiveWorkbook.Close SaveChanges:=True
End If
Next i
です。
先ほどご教授頂いたコードでは上手くいかなくて....
宜しくお願い致します。
No.4
- 回答日時:
#3です。
#1の補足を見て
一応、不具合を避けるため、wb1. を あと2か所(全部で3か所)追記しブックを明示した方が良いと思います。
更に、デバックなどで再度実行時エラーを避けるために
Else
fso.CreateFolder (FolPath)
End If
Set fso = Nothing '破棄しておいた方が良いと思います。
あと、ChDir FolPath で良いと思いますよ。同じなので、、
No.3
- 回答日時:
こんばんは、
横から失礼します。リンクについては、すでに回答が出ておりますので、
エラー箇所へのアドバイスです。
SheetCnt = wb1.Sheets.Count コピー元のシート数
For i = 1 To SheetCnt コピー元のシート数分ループする
wb1.Worksheets(i).Copy Before:=Workbooks("分析_" & Worksheets(i).Name & ".xlsx").Worksheets(1)
1周目のForでは、i=1なので必ずありますが、2周目では、あるかどうかは、わかりません。
Excelのオプションで新規作成ブックのシート数が影響します。
この場合、Workbooks("分析_" & Worksheets(i).Name & ".xlsx")のシートを作成して行く方法か、コピーシートを
挿入して行く方法を取らないと 2周目 Worksheets(i).Namは、インデックス2となり、Workbooks.Addで作成したブックになければ
当然、エラーが返りますね。
しかし、シートを作って行きたい訳ではないでしょうから、、
多分、
Worksheets(i).Nameが元ブックのシート名を指すものと推測します。従って、
Workbooks("分析_" & wb1.Worksheets(i).Name & ".xlsx") とするようにします。
検証していませんので的違いなら、忘れてください。
ご回答有難うございます。
Qchan1962さんは、もともと私が記載したコードで回答頂いたんですね。
このコードでも一度試してみます。
有難うございました。
No.2
- 回答日時:
No1です
>先ほどご教授頂いたコードでは上手くいかなくて....
何がうまくいかないのかが不明ですが、No1のコードではデスクトップ上に「分析_ & シート名」のファイル名で各シートが保存されるはずです。
そうなってはいないでしょうか?
(ご提示のコードの内容が、そのように読み取れましたので)
デスクトップ上の「あ」フォルダに保存したければ、
sPath = CreateObject("WScript.Shell").SpecialFolders("desktop") & "\分析_"
を
sPath = CreateObject("WScript.Shell").SpecialFolders("desktop") & "\あ\い_"
に変えればすむだけのことと思いますけれど・・・?
※ No1にも記しましたように、フォルダの存在チェックや作成、ファイルの既存在チェックなどは行っていませんので必要に応じて追加してください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) VBAが止まります。 1 2022/09/02 14:51
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) セルの値からファイルを複数作りたい2 3 2022/10/07 15:54
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/06/04 09:39
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/03/07 14:05
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelマクロのエラーを解決した...
-
他のシートから値をコピーし、...
-
VBA 計算式で10%未満だったら...
-
VB:アクティブなシート以外で...
-
ユーザーフォームに入力したデ...
-
シート毎に別々のファイルに保...
-
実行時エラー'1004': WorkSheet...
-
エクセルで通し番号を入れてチ...
-
ExcelのVBAでのグラフ操作について
-
【ExcelVBA】全シートのセルの...
-
VBA 最終行まで数式をコピーする
-
XL:BeforeDoubleClickが動かない
-
特定の文字を含むシートだけマ...
-
VBA 存在しないシートを選...
-
ACCESS VBAで、エクセルファイ...
-
VBAで複数のシート名を置換する...
-
ExcelVBA シート名を複数セルか...
-
ACCESS VBAで作成済のExcelのコ...
-
シート名の一部を変更する方法...
-
エクセルVBA 別シート間の列の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
特定の文字を含むシートだけマ...
-
Excelマクロのエラーを解決した...
-
excelのマクロで該当処理できな...
-
ユーザーフォームに入力したデ...
-
実行時エラー'1004': WorkSheet...
-
XL:BeforeDoubleClickが動かない
-
エクセルVBA Ifでシート名が合...
-
実行時エラー1004「Select メソ...
-
エクセルのシート名変更で重複...
-
【ExcelVBA】全シートのセルの...
-
VBA 存在しないシートを選...
-
ブック名、シート名を他のモジ...
-
Excel チェックボックスにチェ...
-
VBA 検索して一致したセル...
-
エクセルで通し番号を入れてチ...
-
シートが保護されている状態で...
-
【VBA】特定の文字で改行(次の...
-
ExcelのVBAのマクロで他のシー...
-
Worksheet_Changeの内容を標準...
-
EXCELVBAを使ってシートを一定...
おすすめ情報