ファイル内の沢山のマクロ有効ファイルを自動でxlsm形式からcsv形式に変換するプログラムを作成したいと思い、ネツト等で調べ下記のマクロを組みましたが、うまく作動しません。
どうすればできるようになるかご存知の方がいれば教えていただけないでしょうか?
Sub ボタン2_Click()
Dim myObj As Object
Dim myDir As String
Dim myFileName As String
Dim myFileList As String
Dim myFileCount As Long
Dim wb As Workbook
'フォルダ選択ダイアログの表示
Set myObj = CreateObject("Shell.Application"). _
BrowseForFolder(0, "フォルダを選択してください", 0)
If myObj Is Nothing Then Exit Sub
myDir = myObj.Items.Item.Path
If Right(myDir, 1) <> "\" Then myDir = myDir & "\"
'フォルダ内のExcelファイルを確認
myFileName = Dir(myDir & "*.xlsm")
Do While myFileName <> ""
If myFileName <> ThisWorkbook.Name Then
myFileList = myFileList & Chr(13) & myFileName
myFileCount = myFileCount + 1
End If
myFileName = Dir()
Loop
If myFileCount = 0 Then
MsgBox "ファイルは見つかりませんでした。マクロを終了します。", 48
Exit Sub
ElseIf vbNo = MsgBox(myFileCount & " 個の .xlsm ファイルが見つかりました。マクロを実行しますか?" _
& Chr(13) & myFileList, 4, "ファイル確認") Then
MsgBox "キャンセルしました。"
Exit Sub
End If
'CSV処理
myFileName = Dir(myDir & "*.xlsm")
Do While myFileName <> ""
Application.DisplayAlerts = False
Application.ScreenUpdating = False
If myFileName <> ThisWorkbook.Name Then
Workbooks.Open (myDir & myFileName)
Workbooks(myFileName).Activate
ActiveWorkbook.SaveAs Filename:=myDir & Left(myFileName, Len(myFileName) - 4) & "csv", _
FileFormat:=xlCSV, CreateBackup:=False
ActiveWorkbook.Close
↑上記3行でエラー発生
End If
myFileName = Dir()
Loop
Application.DisplayAlerts = True
Application.ScreenUpdating = True
MsgBox "完了しました。"
End Sub
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
#1,#2で書いた者です。
お返事が付かないようですが、#2の考え方というのは、
保存できないものは、回避して、名前だけ記録していこうという趣旨です。
それで、そのファイルの原因が分かったら、それに対応する処置を取ったらどうかという考え方です。全部がダメなら、そこは保存できない場所っていうことになりますが。
主な原因は、ロードとセーブ(SaveAs)でのファイル名の取り扱いに違いがあるということです。
No.2
- 回答日時:
>エラーの内容は「実行時エラー'1004' save as メソッドは失敗しました。
_‘work bookオブジェクト‘」です。ちなみに私のエクセルは2010ですが>WindFaller様のエクセルバージョンを教えていただけないでしょうか?
Excel2010 で同じです。ただ、Excelのバージョンの問題ではありませんね。
>SaveAs メソッドでエラー
CSV 以下をこのようにしてみてください。たぶん、保存ができないようになっているのだと思います。ただ、このワザは、実務以外には使われません。実務では、もうひとつ、
Application.Calculation = xlCalculationManual
以下に同じように入れる
Application.Calculation = xlCalculationAutomatic
'//
'CSV処理
Dim reco_err '上に持って行っても可
myFileName = Dir(myDir & "*.xlsm")
Do While myFileName <> ""
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Application.EnableEvents = False
On Error GoTo ErrHandler
If myFileName <> ThisWorkbook.Name Then
With Workbooks.Open(myDir & myFileName)
.SaveAs Filename:=myDir & Left(myFileName, Len(myFileName) - 4) & "csv", FileFormat:=xlCSV
.Close False
End With
End If
errNext:
myFileName = Dir()
Loop
Application.DisplayAlerts = True
Application.ScreenUpdating = True
Application.EnableEvents = True
MsgBox "完了しました。"
If Len(reco_err) > 2 Then
MsgBox reco_err
End If
Exit Sub
ErrHandler:
If Err.Number <> 0 Then
reco_err = reco_err & vbCrLf & Err.Number & ": " & myFileName
GoTo errNext
End If
End Sub
No.1
- 回答日時:
こんにちは。
試してみましたが、特にエラーはありませんでした。
別の要因かもしれませんね。
ただし、保存のマクロの部分は、以下のように書き換えました。
特に、Activate する必要はありません。
Application.DisplayAlerts = False
Application.ScreenUpdating = False
If myFileName <> ThisWorkbook.Name Then
With Workbooks.Open(myDir & myFileName)
.SaveAs Filename:=myDir & Left(myFileName, Len(myFileName) - 4) & "csv", _
FileFormat:=xlCSV, CreateBackup:=False
.Close False
End With
End If
myFileName = Dir()
Loop
回答ありがとうございます。ためしてみましたがやはりエラーがでます。
エラーの内容は「実行時エラー'1004' save as メソッドは失敗しました。_‘work bookオブジェクト‘」です。ちなみに私のエクセルは2010ですが
WindFaller様のエクセルバージョンを教えていただけないでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/06 17:46
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/07/03 09:11
- Access(アクセス) access,vbaでフォルダ内のファイルをテーブルにインポート、ファイル名もフィールドに追加したい 1 2022/08/31 11:11
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) 【VBA】印刷マクロのループ処理が反映されません 3 2022/08/09 02:15
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【python】pandasでExcel(...
-
Lubuntuでフォントをインストー...
-
【Excel VBA】PDFを作成して,...
-
Excel VBA シートを指定して...
-
Microsoft Access エラー 3051
-
フォルダ参照ではなくファイル...
-
VBAでFTPファイル転送がうまく...
-
EXCEL VBA ファイルが開かれて...
-
Response.BinaryReadエラー(Win...
-
web.configファイル内、valueに...
-
エクセルVBA フォームを開く時...
-
FFFTPでサーバに新規フォルダが...
-
SDカード(16GB)に保存した動画...
-
Excelでdatファイルを作成??
-
バッチファイルが作成できない
-
バッチによるショートカットの...
-
1フォルダに保存できるファイル...
-
ダウンロード不可PDFファイルは...
-
カスタムコントロールのOCAファ...
-
複数のテキストファイルをexcel...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでファイルパスが長すぎてコ...
-
Microsoft Access エラー 3051
-
Lubuntuでフォントをインストー...
-
【Excel VBA】PDFを作成して,...
-
Refreshで落ちる
-
ExcelVBAで、隠しフォルダにあ...
-
Excel VBA シートを指定して...
-
FFFTPでサーバに新規フォルダが...
-
VBAでFTPファイル転送がうまく...
-
フォルダ参照ではなくファイル...
-
エクセルVBA フォームを開く時...
-
グーグルドライブからコピーし...
-
OCXのライセンス
-
ファイルが別のPCで開けない
-
ASP上でFileSystemObjectのDele...
-
ASP.NETで、別サーバーへファイ...
-
VBSで指定したフォルダにファイ...
-
BASP21のアップロードについて
-
【python】pandasでExcel(...
-
vba エクセルダウンロードファ...
おすすめ情報