マクロに.txtファイルとして作成した新しいシートを保存させたいと思っています。これは私が今まで持っているコードです。
Sub Move()
'
' Move Macro
'
' Keyboard Shortcut: Ctrl+m
'
Sheets("Sheet1").Select
Range("A1").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Workbooks.Add
ActiveSheet.Paste
ActiveWorkbook.SaveAs Filename:="e:" & _
"HDR" + Format(Now(), "YYYYMMDDhhmmss") & ".txt"
End Sub
これには私のマクロが含まれます。 .txtファイルとして保存する最後の部分に問題があります。
現在、.txtファイルに大量のがらくたが出ています。ここに例を示します。
"PK!!}ñU{Š[Content_Types] .xml¢(ÌTÝNÂ0¾7ñ–Þš€‰1†Á…⥠’ˆPÚ3¶ÐµMOÁñöž•Ÿ¨"。
どんな助けも素晴らしいでしょう。
ファイル名の拡張子を手動で変更しても、実際にはファイルタイプは変更されません。 SaveAs
メソッドは、ファイルタイプ引数を取ります。あなたが望むコードは
ActiveWorkbook.SaveAs Filename:="e:" & "HDR" + Format(Now(), "YYYYMMDDhhmmss") _
& ".txt", FileFormat:= xlTextWindows
Excelヘルプ内からXlFileFormat
を検索すると、(ほぼ)6つのテキスト形式と4つのCSV形式を含む、可能なファイル形式の完全なリストが表示されます。
名前にtxtを追加しても、Word文書はプレーンテキスト形式に自動的にエンコードされません。
代わりにしよう
ActiveWorkbook.SaveAs Filename:="e:" & _
"HDR" + Format(Now(), "YYYYMMDDhhmmss") & ".txt", FileFormat:=wdFormatText, Encoding:=1252
ActiveWorkbook.SaveAsメソッドは、ファイル内のすべての行の最初と最後に二重引用符を追加します。
このメソッドは、指定された範囲から各行を解析し、CSVファイルに変換します。
Sub SaveSheetToCSVorTXT()
Dim xFileName As Variant
Dim rng As Range
Dim DelimChar As String
DelimChar = "," 'The delimitation character to be used in the saved file. This will be used to separate cells in the same row
xFileName = Application.GetSaveAsFilename(ActiveSheet.Name, "CSV File (*.csv), *.csv, Text File (*.txt), *.txt")
If xFileName = False Then Exit Sub
If Dir(xFileName) <> "" Then
If MsgBox("File '" & xFileName & "' already existe. Overwrite?", vbYesNo + vbExclamation) <> vbYes Then Exit Sub
Kill xFileName
End If
Open xFileName For Output As #1
'Save range contents. Examples of ranges:
'Set rng = Activesheet.Range("A1:D4") 'A rectangle between 2 cells
'Set rng = Activesheet.columns(1) 'An entire column
Set rng = ActiveSheet.Range("B14").CurrentRegion 'The "region" from a cell. This is the same as pressing CTRL+T on the selected cell
For i = 1 To rng.Rows.Count
For j = 1 To rng.Columns.Count
lineText = IIf(j = 1, "", lineText & DelimChar) & rng.Cells(i, j)
Next j
Print #1, lineText
Next i
Close #1
MsgBox "File saved!"
End Sub