Как создать и записать в текстовый файл с помощью VBA

82

У меня есть файл, который добавляется или изменяется вручную на основе входов. Поскольку большая часть содержимого повторяется в этом файле, меняются только шестнадцатеричные значения, я хочу сделать его сгенерированным инструментом.

Я хочу написать коды c, которые будут напечатаны в этом .txt файле.

Что такое команда для создания файла .txt с использованием VBA и как мне писать на него

  • 1
    Хотите ли вы изменить существующий файл после его создания? А что такое "c коды"
  • 1
    Если какой-либо из существующих ответов отвечал вашим потребностям, не могли бы вы принять его как ответ, чтобы ваш вопрос больше не отображался как оставшийся без ответа? (Если нет, пожалуйста, добавьте подробности о том, чего не хватает в существующих ответах, чтобы решить вашу проблему :))
Теги:
text-files

5 ответов

147

Используйте 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    

Смотрите документацию здесь:

  • 23
    когда вы ссылаетесь непосредственно на среду выполнения сценариев, вы можете использовать правильные типы: Dim oFs As New FileSystemObject Dim oFile As TextStream
  • 0
    Является ли использование сценариев Runtime предпочтительным по сравнению со старым канальным методом? Я хотел бы, чтобы у моих учеников были причины рассказать информацию, подкрепленную другим опытом.
Показать ещё 5 комментариев
25

простой способ с избыточным резервированием.

    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
    Можно ли использовать средство выбора файлов для установки пути?
  • 0
    Это создает файл в кодировке UCS2. Можно ли создать такой, который является ANSI?
17
Open ThisWorkbook.Path & "\template.txt" For Output As #1
Print #1, strContent
Close #1

Дополнительная информация:

  • 0
    Пожалуйста, напишите ответ с некоторыми пояснениями и подробностями.
  • 2
    Я предпочитаю этот метод методу FSO, потому что он не требует внешних ссылок и довольно короткий. Хотя я предлагаю использовать FreeFile, чтобы получить номер файла, вместо того, чтобы жестко кодировать его как # 1.
Показать ещё 3 комментария
13

Чтобы уточнить ответ Бена (поскольку улучшение его, похоже, не допускается):

Если вы добавите ссылку на 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 "test"

    ' 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
  • 0
    Спасибо за написание полного ответа с полезными комментариями к коду.
  • 0
    Я более чем счастлив, если вы узнали что-то из моего поста! :)
-3
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()
  • 0
    Это может помочь с написанием и чтением текстового файла
  • 1
    Я думаю, что вы не читаете, в чем заключается вопрос, а также вам не нравится объяснять, что вы собираетесь делать, что не очень хорошо, помогая другим.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню