web-dev-qa-db-ja.com

VBAで.txtとして保存する方法

マクロに.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Áñöž•Ÿ¨"。
どんな助けも素晴らしいでしょう。

7
Tony Bergeson

ファイル名の拡張子を手動で変更しても、実際にはファイルタイプは変更されません。 SaveAsメソッドは、ファイルタイプ引数を取ります。あなたが望むコードは

ActiveWorkbook.SaveAs Filename:="e:" & "HDR" + Format(Now(), "YYYYMMDDhhmmss") _
& ".txt", FileFormat:= xlTextWindows

Excelヘルプ内からXlFileFormatを検索すると、(ほぼ)6つのテキスト形式と4つのCSV形式を含む、可能なファイル形式の完全なリストが表示されます。

8
Degustaf

名前にtxtを追加しても、Word文書はプレーンテキスト形式に自動的にエンコードされません。

代わりにしよう

ActiveWorkbook.SaveAs Filename:="e:" & _
"HDR" + Format(Now(), "YYYYMMDDhhmmss") & ".txt", FileFormat:=wdFormatText, Encoding:=1252
2
AJY

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
0
cyberponk