VBAを使用してtxtファイルを作成して書き込む方法


116

入力に基づいて手動で追加または変更されたファイルがあります。そのファイルの内容のほとんどは反復的であるため、16進数の値のみが変化しているので、ツールで生成したファイルにしたいと考えています。

その.txtファイルに印刷されるcコードを書きたいのですが。

VBAを使用して.txtファイルを作成するコマンドとは何ですか?


1
作成された既存のファイルを変更しますか?そして、「Cコード」とは何
ですか

1
既存の回答のいずれかがニーズを満たしている場合は、それを回答として受け入れて、質問が未回答として表示されないようにしますか?(そうでない場合は、問題を解決するために既存の回答に欠けているものの詳細を追加してください:))
Marcus Mangelsdorf

回答:


37

ベンの答えを詳しく説明するには:

Microsoft Scripting Runtime変数fsoへの参照を追加して正しく入力すると、オートコンプリート(Intellisense)を利用して、の他の優れた機能を発見できますFileSystemObject

以下は完全なモジュールの例です。

Option Explicit

' Go to Tools -> References... and check "Microsoft Scripting Runtime" to be able to use
' the FileSystemObject which has many useful features for handling files and folders
Public Sub SaveTextToFile()

    Dim filePath As String
    filePath = "C:\temp\MyTestFile.txt"

    ' The advantage of correctly typing fso as FileSystemObject is to make autocompletion
    ' (Intellisense) work, which helps you avoid typos and lets you discover other useful
    ' methods of the FileSystemObject
    Dim fso As FileSystemObject
    Set fso = New FileSystemObject
    Dim fileStream As TextStream

    ' Here the actual file is created and opened for write access
    Set fileStream = fso.CreateTextFile(filePath)

    ' Write something to the file
    fileStream.WriteLine "something"

    ' Close it, so it is not locked anymore
    fileStream.Close

    ' Here is another great method of the FileSystemObject that checks if a file exists
    If fso.FileExists(filePath) Then
        MsgBox "Yay! The file was created! :D"
    End If

    ' Explicitly setting objects to Nothing should not be necessary in most cases, but if
    ' you're writing macros for Microsoft Access, you may want to uncomment the following
    ' two lines (see https://stackoverflow.com/a/517202/2822719 for details):
    'Set fileStream = Nothing
    'Set fso = Nothing

End Sub

コードへの役立つコメントを含む完全な回答を書いてくれてありがとう。
ポートランドランナー

私の投稿から何かを学べば私はとても幸せです!:)
マーカスマンゲルスドルフ2018

171

FSOを使用してファイルを作成し、書き込みます。

Dim fso as Object
Set fso = CreateObject("Scripting.FileSystemObject")
Dim oFile as Object
Set oFile = FSO.CreateTextFile(strPath)
oFile.WriteLine "test" 
oFile.Close
Set fso = Nothing
Set oFile = Nothing    

こちらのドキュメントをご覧ください。


25
あなたが直接スクリプトランタイムを参照するとき、あなたは正しいタイプを使用することができます: Dim oFs As New FileSystemObject Dim oFile As TextStream
TmTron

スクリプトランタイムの使用は、以前のチャネル方式よりも優先されますか?他の経験に裏打ちされた情報を生徒に伝える理由をいくつか教えてください。
リックヘンダーソン

@RickHenderson、それがあなたの意味するところなら、私はそれを好みます。利点はカプセル化です。オブジェクトを設定するか(oFile = Nothing |を設定)、またはスコープ外になると、ファイルは自動的に閉じられます。
ベン・

2
この回答はコーディングの習慣を促進することに注意してください。問題は、正しい変数の型明示的に定義ないこと、およびその名前への文字列参照によってオブジェクト作成しないことにより、将来の問題のデバッグが非常に困難になる可能性があることです。名前のスペルミス)。また、変数を入力しないと、他FileSystemObjectに提供されている驚くべきメソッドについて学ぶ方法がありません。@ベン:初心者をより良い方向に導くために、回答更新すること検討してください。
マーカスマンゲルスドルフ2018

2
@MarcusMangelsdorf聞いたことはありますが、議論したくありません。
ベン

43
Open ThisWorkbook.Path & "\template.txt" For Output As #1
Print #1, strContent
Close #1

詳しくは:


喜んで答えといくつかの説明と詳細を書いてください。
Mohammed Noureldin 2017年

4
この方法は外部参照を必要とせず、非常に短いため、FSOメソッドよりもこの方法を好みます。ファイル番号を#1としてハードコーディングするのではなく、FreeFileを使用して取得することをお勧めします。
phrebh

2
これはうまくいきます。私は見たことがないOpen somePath For Output As #1、それは、前にこの文書を構文:msdn.microsoft.com/en-us/vba/language-reference-vba/articles/...
chiliNUT

5
私は平凡なテキストファイルの書き込みにもこのアプローチを好みます。これらのステートメントは、少なくとも1981
。– richardtallent

2
ハードコーディングされた#1の代わりにFreeFileを使用することに関する@phrebhからのコメントについては、wellsr.com / vba / 2016 / excel / vba
George Birbilis

33

冗長性のない簡単な方法。

    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")

    Dim Fileout As Object
    Set Fileout = fso.CreateTextFile("C:\your_path\vba.txt", True, True)
    Fileout.Write "your string goes here"
    Fileout.Close

2
ファイルチューザを使用してパスを設定することは可能ですか?
13:13にrrs

これにより、UCS2エンコードされたファイルが作成されます。ANSIであるものを作成することは可能ですか?
パオロフ2018

-10
Dim SaveVar As Object

Sub Main()

    Console.WriteLine("Enter Text")

    Console.WriteLine("")

    SaveVar = Console.ReadLine

    My.Computer.FileSystem.WriteAllText("N:\A-Level Computing\2017!\PPE\SaveFile\SaveData.txt", "Text: " & SaveVar & ", ", True)

    Console.WriteLine("")

    Console.WriteLine("File Saved")

    Console.WriteLine("")

    Console.WriteLine(My.Computer.FileSystem.ReadAllText("N:\A-Level Computing\2017!\PPE\SaveFile\SaveData.txt"))
    Console.ReadLine()

End Sub()

これは、テキストファイルの書き込みと読み取りに役立ちます
Zack Brightman

1
私はあなたが質問が何であるかを読んでいないと思います、そしてまた、あなたがしようとしていることを説明するのは好きではないと思います。
M.アディールカリッド2017

そして、あなたもあなたの答えを適切にフォーマットしていません。
BDL 2017

3
残念ながら、投稿したコードはVBAではありません。そこにはありませんMy.Computer.FileSystemデフォルトでは、あなたが使用することはできませんので、VBAでオブジェクトWriteAllTextメソッドは、どちらか。
Marcus Mangelsdorf 2018年

ザック、答えだけのコードを投稿することは避け、使用している言語がopとインラインであることを確認してください。
Daniel L.VanDenBosch
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.