Cara membuat dan menulis ke file txt menggunakan VBA

117

Saya memiliki file yang ditambahkan atau dimodifikasi secara manual berdasarkan input. Karena sebagian besar isinya berulang dalam file itu, hanya nilai hex yang berubah, saya ingin menjadikannya sebagai file yang dihasilkan alat.

Saya ingin menulis kode c yang akan dicetak di file .txt itu .

Apa perintah untuk membuat file .txt menggunakan VBA, dan bagaimana cara menulisnya

danny
sumber
1
Apakah Anda ingin mengubah file yang sudah ada setelah dibuat? Dan apa itu "kode c"
brettdj
1
Jika ada jawaban yang sesuai dengan kebutuhan Anda, maukah Anda menerimanya sebagai jawaban, sehingga pertanyaan Anda tidak lagi muncul sebagai belum terjawab? (Jika tidak, harap tambahkan detail tentang apa yang hilang dari jawaban yang ada untuk menyelesaikan masalah Anda :))
Marcus Mangelsdorf

Jawaban:

38

Untuk menguraikan jawaban Ben :

Jika Anda menambahkan referensi ke Microsoft Scripting Runtimedan benar mengetik variabel FSO Anda dapat mengambil keuntungan dari autocompletion (Intellisense) dan menemukan fitur lainnya dari FileSystemObject.

Berikut adalah contoh modul lengkapnya:

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
Marcus Mangelsdorf
sumber
Terima kasih telah menulis jawaban lengkap dengan komentar bermanfaat untuk kode.
Portland Runner
Saya sangat senang jika Anda mempelajari sesuatu dari posting saya! :)
Marcus Mangelsdorf
171

Gunakan FSO untuk membuat file dan menulis padanya.

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    

Lihat dokumentasinya di sini:

Ben
sumber
25
ketika Anda mereferensikan Scripting Runtime secara langsung, Anda dapat menggunakan jenis yang benar: Dim oFs As New FileSystemObject Dim oFile As TextStream
TmTron
Apakah menggunakan Scripting Runtime lebih disukai daripada metode saluran yang lebih lama? Saya ingin beberapa alasan untuk memberi tahu siswa saya dengan info yang didukung oleh pengalaman lain.
Rick Henderson
@ RickHenderson, saya lebih suka, jika itu yang Anda maksud. Keuntungannya adalah enkapsulasi. Setelah Anda menolak (set oFile = Nothing |), atau keluar dari ruang lingkup, file secara otomatis ditutup.
Ben
2
Harap dicatat bahwa jawaban ini mempromosikan praktik pengkodean yang buruk : Masalahnya adalah bahwa tidak secara eksplisit mendefinisikan jenis variabel yang benar serta membuat objek dengan referensi string ke namanya dapat menyebabkan Anda sangat sulit men-debug masalah di masa mendatang (misalnya jika Anda salah mengeja bagian nama). Selain itu, dengan tidak mengetik variabel, Anda tidak memiliki cara untuk mempelajari metode menakjubkan lainnya yang FileSystemObjectditawarkan. @ Ben: Harap pertimbangkan untuk memperbarui jawaban Anda untuk mengarahkan pemula ke arah yang lebih baik .
Marcus Mangelsdorf
2
@MarcusMangelsdorf Saya telah mendengar Anda, tetapi saya tidak ingin berdebat.
Ben
43
Open ThisWorkbook.Path & "\template.txt" For Output As #1
Print #1, strContent
Close #1

Informasi Lebih Lanjut:

Bhanu Sinha
sumber
Mohon tulis jawabannya dengan penjelasan dan detail.
Mohammed Noureldin
4
Saya lebih suka metode ini daripada metode FSO karena tidak memerlukan referensi eksternal dan cukup singkat. Meskipun saya menyarankan menggunakan FreeFile untuk mendapatkan nomor file daripada hardcoding sebagai # 1.
phrebh
2
ini bekerja dengan baik. Saya belum pernah melihat Open somePath For Output As #1sintaks sebelumnya, ini mendokumentasikannya: msdn.microsoft.com/en-us/vba/language-reference-vba/articles/…
chiliNUT
5
Saya lebih suka pendekatan ini juga untuk penulisan file teks biasa. Pernyataan ini telah menjadi bagian dari bahasa BASIC setidaknya sejak tahun 1981.
richardtallent
2
Mengenai komentar dari @phrebh tentang penggunaan FreeFile daripada hardcode # 1, lihat wellsr.com/vba/2016/excel/vba-freefile-for-foolproof-file-IO
George Birbilis
33

cara mudah tanpa banyak redundansi.

    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
pelos
sumber
2
Apakah mungkin menggunakan pemilih file untuk menyetel jalur?
rrs
Ini membuat file yang dikodekan UCS2. Apakah mungkin membuat ANSI?
paolov
-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
sumber
Ini dapat membantu dengan Menulis dan Membaca file teks
Zack Brightman
1
Saya pikir Anda tidak membaca apa pertanyaannya dan juga Anda tidak suka menjelaskan apa yang akan Anda coba yang tidak baik sambil membantu orang lain.
M. Adeel Khalid
Dan Anda bahkan tidak memformat jawaban Anda dengan benar.
BDL
3
Sayangnya, kode yang Anda posting bukan VBA. Tidak ada My.Computer.FileSystemobjek di VBA secara default sehingga Anda juga tidak dapat menggunakan WriteAllTextmetode ini.
Marcus Mangelsdorf
Zack, Harap hindari memposting jawaban kode saja dan pastikan bahasa yang Anda gunakan sejalan dengan op.
Daniel L. VanDenBosch