プロが教えるわが家の防犯対策術!

★以下エラー箇所★にて、エラーが発生してしまい修正ができず困っています。
エラー内容は、
「実行時エラー1004,SaveAsメソッドは失敗しました'_Workbook'オブジェクト]
ファイルの種類は、xmlドキュメント(エクセル状態)

Private Sub ファイル名作成()
Dim lastRow As Long
Dim supplierNames As Object
Dim supplierName As Variant


' データの最終行を取得
lastRow = Cells(Rows.Count, "B").End(xlUp).Row

' 仕入先名称を格納するコレクションを作成
Set supplierNames = CreateObject("Scripting.Dictionary")

' データの重複を排除してコレクションに追加
For i = 2 To lastRow ' ヘッダー行を除外
If supplierNames.Exists(Cells(i, "B").Value) = False Then
supplierNames.Add Cells(i, "B").Value, 1
End If
Next i

' コレクションの要素をファイル名として連結
For Each supplierName In supplierNames.Keys
fileName = fileName & supplierName & ","
Next supplierName

' ファイル名の最後のカンマを削除
fileName = Left(fileName, Len(fileName) - 1)

' ファイル名に使用できない文字を削除する
fileName = ReplaceInvalidFileNameCharacters(fileName)

' ファイルを保存
' On Error Resume Next
' ActiveWorkbook.SaveAs fileName:=ActiveWorkbook.Path & "\" & "単価変更リスト_" & Format(Date, "yyyymmdd") & "_" & fileName, _
' FileFormat:=xlOpenXMLWorkbook

★以下エラー箇所★
ActiveWorkbook.SaveAs fileName:=ActiveWorkbook.Path & "" & "単価変更リスト_" & Format(Date, "yyyymmdd") & "_" & fileName & ".xlsx", _
FileFormat:=xlOpenXMLWorkbook


' If Err.Number > 0 Then
' MsgBox ("ファイルを選択してください")
' End
' End If

'単価リストブックアクティブ用
priceListBook = ActiveWorkbook.Name

End Sub

質問者からの補足コメント

  • アドバイスしていただき、ありがとうございます。
    早速、テストしてみましたが同じエラーが同じ場所で発生しています。
    &の後に\を入れ忘れていたので、入れましたが同じでした。

    Application.DisplayAlerts = False
    ActiveWorkbook.SaveAs fileName:=ActiveWorkbook.Path & "\" & "単価変更リスト_" & Format(Date, "yyyymmdd") & "_" & fileName & ".xlsx", _
    FileFormat:=xlOpenXMLWorkbook
    Application.DisplayAlerts = True

      補足日時:2023/09/12 13:20
  • 種類をXLSXでマクロを実行しても同じ結果となりました。

      補足日時:2023/09/12 13:24

A 回答 (4件)

こんにちは



ご質問と直接には関係ありませんが・・
>fileName:=ActiveWorkbook.Path & "" & ~~
の部分は、普通に考えるとコメントアウトされている方の
> fileName:=ActiveWorkbook.Path & "\" & ~~
の方が一般的なように感じますけれど、そういう意図なのでしょうか。
(どちらでも、処理上は問題にはなりませんけれど)


エラーの原因となりそうな点を想像してみると・・
1)ReplaceInvalidFileNameCharacters関数の内容が不明ですが、意図通りの処理になっていないということはありませんか?
2)ファイル名の文字数制限やファイルパスの文字数制限に引っかかってはいませんか?
ファイル名を文字列連結で作成しているので、かなり長くなる可能性がありそうです。
(パスの文字数制限は、確か、260文字程度だったように思います)

いずれの場合も、最終的に作成されたパスを確認してみればわかるのではないかと思いますけれど・・
    • good
    • 0
この回答へのお礼

助かりました

ありがとうございました。盲点でした。
ファイル名にA株式会社,B~C~とずっと続いており、エクセルの方の行を半分削除したらいけました。
文字数制限のようでした。

お礼日時:2023/09/12 16:52

こんにちは


マクロ付きのブックをFileFormat:=xlOpenXMLWorkbookで保存したいと言う事であれば(処理部分はコピペ)

Application.DisplayAlerts = False
ActiveWorkbook.SaveAs FileName:=ActiveWorkbook.Path & "" & "単価変更リスト_" & Format(Date, "yyyymmdd") & "_" & FileName & ".xlsx", _
FileFormat:=xlOpenXMLWorkbook
Application.DisplayAlerts = True

手動で名前を付けて保存の時に聞かれるアラートをYesで選択と同じ処理になります

ちなみに
ActiveWorkbook.Path & の後にファイルパスの区切り文字(セパレーター)が必要かどうかは目的パスによると思います・・
    • good
    • 0

すみません、別拡張子で保存したいということですね


別途エディタを開いて拡張子をtxtにして全コピペすればいけますよ

わからなかったらデスクトップにa.txtとか作成して
メモ帳で開いて全コピーでも
    • good
    • 0

ぱっと見ですが、""じゃなくて"\"なのでは

    • good
    • 0

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

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


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