VBA kullanarak bir txt dosyası nasıl oluşturulur ve yazılır


116

Girişlere göre manuel olarak eklenen veya değiştirilen bir dosyam var. O dosyadaki içeriğin çoğu tekrarlı olduğundan, sadece onaltılık değerler değişiyor, onu araç tarafından oluşturulmuş bir dosya yapmak istiyorum.

Bu .txt dosyasına yazdırılacak c kodlarını yazmak istiyorum .

VBA kullanarak bir .txt dosyası oluşturma komutu nedir ve ona nasıl yazabilirim


1
Mevcut bir dosyayı oluşturulduktan sonra değiştirmek ister misiniz? Ve "c kodları" nedir?
brettdj

1
Mevcut yanıtlardan herhangi biri ihtiyaçlarınızı karşıladıysa, sorunuzun yanıtlanmamış olarak görünmemesi için bunu bir yanıt olarak kabul eder misiniz? (Değilse, sorununuzu çözmek için lütfen mevcut cevaplarda neyin eksik olduğuna dair ayrıntıları ekleyin :))
Marcus Mangelsdorf

Yanıtlar:


37

Ben'in cevabını detaylandırmak için :

Eğer bir başvuru eklerseniz Microsoft Scripting Runtimeve doğru olarak değişken yazın fso'ait yapabilirsiniz otomatik tamamlanması yararlanmak (IntelliSense) ve diğer büyük özellikleri keşfetmek FileSystemObject.

İşte eksiksiz bir örnek modül:

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

Kodlamaya yardımcı yorumlar içeren eksiksiz bir yanıt yazdığınız için teşekkür ederiz.
Portland Runner

Gönderimden bir şey öğrenirseniz çok mutlu olurum! :)
Marcus Mangelsdorf

171

Dosyayı oluşturmak ve ona yazmak için FSO kullanın.

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    

Buradaki belgelere bakın:


25
Komut Dosyası Çalıştırma Dim oFs As New FileSystemObject Dim oFile As TextStream
Zamanına

Komut Dosyası Çalıştırma Zamanını kullanmak, eski kanal yöntemine tercih edilir mi? Öğrencilerime başka deneyimlerle desteklenen bilgileri anlatmak için bazı nedenler istiyorum.
Rick Henderson

@RickHenderson, tercih ederim, eğer kastettiğin buysa. Avantaj kapsüllemedir. İtiraz ettiğinizde (set oFile = Nothing |) veya kapsam dışına çıktığında, dosya otomatik olarak kapatılır.
Ben

2
Lütfen bu cevabın kötü kodlama uygulamasını desteklediğini unutmayın : Sorun şu ki , doğru değişken türlerini açıkça tanımlamamanın yanı sıra adına bir dize başvurusu ile bir nesne oluşturmanın , gelecekte sorunların hatalarını ayıklamanız çok zor olabilir (örneğin, adın yanlış yazılan kısımları). Ayrıca, değişkenleri yazmayarak, FileSystemObjectsunduğu diğer harika yöntemler hakkında bilgi edinmenin bir yolu yok . @Ben: Lütfen yeni başlayanları daha iyi bir yöne yönlendirmek için cevabınızı güncellemeyi düşünün .
Marcus Mangelsdorf

2
@MarcusMangelsdorf Seni duydum ama bir tartışma yapmak istemiyorum.
Ben

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

Daha fazla bilgi:


Lütfen cevabı bazı açıklamalar ve detaylarla birlikte yazın.
Muhammed Nureldin

4
Bu yöntemi FSO yöntemine tercih ediyorum çünkü harici referanslar gerektirmiyor ve oldukça kısa. Bununla birlikte, dosya numarasını # 1 olarak kodlamak yerine FreeFile'ı kullanarak dosya numarasını almanızı öneririm.
phrebh

2
bu harika çalışıyor. Open somePath For Output As #1Sözdizimini daha önce hiç görmedim , bu bunu belgeliyor: msdn.microsoft.com/en-us/vba/language-reference-vba/articles/…
chiliNUT

5
Bu yaklaşımı sıradan metin dosyası yazmak için de tercih ediyorum. Bu ifadeler en az 1981'den beri BASIC dilinin bir parçası.
richardtallent

2
Sabit kodlanmış # 1 yerine FreeFile'ın kullanılmasıyla ilgili @ phrebh'in yorumuyla ilgili olarak bkz. Wellsr.com/vba/2016/excel/vba-freefile-for-foolproof-file-IO
George Birbilis

33

fazla fazlalık olmadan kolay bir yol.

    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
Yolu ayarlamak için dosya seçiciyi kullanmak mümkün mü?
2017

Bu, UCS2 kodlu bir dosya oluşturur. ANSI olan bir tane oluşturmak mümkün mü?
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()

Bu, bir metin dosyası Yazma ve Okuma konusunda yardımcı olabilir
Zack Brightman

1
Bence sorunun ne olduğunu okumuyorsunuz ve ayrıca başkalarına yardım ederken neye teşebbüs edeceğinizi açıklamayı sevmiyorsunuz ki bu iyi bir şey değil.
M.Adel Khalid

Ve cevabınızı bile düzgün biçimlendirmiyorsunuz.
BDL

3
Ne yazık ki, gönderdiğiniz kod VBA değil. My.Computer.FileSystemVarsayılan olarak VBA'da nesne yoktur ve bu nedenle WriteAllTextyöntemi de kullanamazsınız .
Marcus Mangelsdorf

Zack, Lütfen yalnızca kod yanıtlarını göndermekten kaçının ve kullandığınız dilin op ile satır içi olduğundan emin olun.
Daniel L.VanDenBosch
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.