前提
VBAで編集したcsvデータ(文字コード:ANSI)をUTF-8のBOM無しで書き出そうとしています。
VBA実行時に同名で上書き保存しようとするとエラー3004が発生します。
14行目で名前を変えればエラーは出ません。
実現したいこと
同名で上書き保存
発生している問題・エラーメッセージ
実行時エラー'3004': ファイルへ書き込めませんでした。
該当のソースコード
Excel
1Sub CSV書き出し() 2 Dim i As Long 3 Dim j As Long 4 Dim strList As String 5 Dim wb As Workbook 6 Dim ws As Worksheet 7 8 Dim csvFile As String 9 MsgBox "編集元のファイルを選択してください。" 10 Workbooks.Open Application.GetOpenFilename 11 Set wb = ActiveWorkbook 12 Set ws = wb.Worksheets(1) 13 MsgBox "保存するファイルに任意の名前を付けてください" 14 csvFile = Application.GetSaveAsFilename(filefilter:="CSVブック,*.csv") 15 16 Dim strA As String 17 Dim strB As String 18 Dim strC As String 19 Dim adoSt As Object 20 Set adoSt = CreateObject("ADODB.Stream") 21 With adoSt 22 .Type = adTypeText 23 .Charset = "UTF-8" 24 .Open 25 End With 26 With ActiveSheet.UsedRange 27 For i = 1 To .Rows.Count 28 strList = "" 29 For j = 1 To .Columns.Count 30 If j > 1 Then 31 strList = strList & "," 32 End If 33 If InStr(.Cells(i, j), "(") > 0 Then 34 strA = Left(.Cells(i, j), InStr(.Cells(i, j), "(") - 1) 35 strB = Mid(.Cells(i, j), InStr(.Cells(i, j), "(") + 1) 36 strC = Left(strB, InStr(strB, ")") - 1) 37 strC = """" & strA & "(" & """" & """" & strC & """" & """" & ")" & """" 38 strList = strList & strC 39 Else 40 strList = strList & .Cells(i, j) 41 End If 42 Next 43 adoSt.WriteText strList, adWriteLine 44 Next 45 End With 46 Dim byteData() As Byte 47 With adoSt 48 .Position = 0 49 .Type = adTypeBinary 50 .Position = 3 51 byteData = .Read 52 .Close 53 .Open 54 .Write byteData 55 .SaveToFile csvFile, adSaveCreateOverWrite '←ここで3004エラー 56 .Close 57 End With 58 Set adoSt = Nothing 59End Sub
試したこと
ネット検索で権限について書かれていたのでマクロファイルのプロパティからセキュリティ権限を確認しましたが実行アカウントにフルコントロール付与済でした。
補足情報(FW/ツールのバージョンなど)
Microsoft 365(Excelバージョン2211,ビルド15831.20208)
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。