如何使用 VBA 创建和写入 txt 文件

Posted

技术标签:

【中文标题】如何使用 VBA 创建和写入 txt 文件【英文标题】:How to create and write to a txt file using VBA 【发布时间】:2012-07-15 05:36:35 【问题描述】:

我有一个根据输入手动添加或修改的文件。由于该文件中的大部分内容都是重复的,只有十六进制值在变化,我想将其作为工具生成的文件。

我想编写将要打印在那个 .txt 文件中的 c 代码。

使用 VBA 创建 .txt 文件的命令是什么,如何写入文件

【问题讨论】:

是否要在创建现有文件后对其进行修改?什么是“c 代码” 如果任何现有答案满足您的需求,您介意接受它作为答案,这样您的问题就不再显示为未回答吗? (如果没有,请添加现有答案中缺少的详细信息以解决您的问题:)) 【参考方案1】:

详述Ben's answer:

如果您添加对Microsoft Scripting Runtime 的引用并正确键入变量fso,您可以利用自动完成功能(智能感知)并发现@987654323 的其他强大功能@。

这是一个完整的示例模块:

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://***.com/a/517202/2822719 for details):
    'Set fileStream = Nothing
    'Set fso = Nothing

End Sub

【讨论】:

感谢您使用有用的 cmets 编写完整的答案。 如果您从我的帖子中学到了一些东西,我非常高兴! :) 早期绑定有很多优点(它也更快)但是,我觉得您没有强调 后期绑定与版本无关并且不需要创建参考。这对于重新分发的任何代码都至关重要【参考方案2】:
Open ThisWorkbook.Path & "\template.txt" For Output As #1
Print #1, strContent
Close #1

更多信息:

微软文档:Open statement 微软文档:Print # statement 微软文档:Close statement wellsr.com:VBA write to text file with Print Statement 办公支持:Workbook.Path property

【讨论】:

请写下答案并附上一些解释和细节。 我更喜欢这种方法而不是 FSO 方法,因为它不需要外部引用并且很短。虽然我确实建议使用 FreeFile 来获取文件编号,而不是将其硬编码为 #1。 这很好用。我以前从未见过Open somePath For Output As #1 语法,这里记录了它:msdn.microsoft.com/en-us/vba/language-reference-vba/articles/… 我更喜欢这种方法来编写普通的文本文件。至少从 1981 年起,这些语句就成为 BASIC 语言的一部分。 关于 @phrebh 关于使用 FreeFile 而不是硬编码 #1 的评论,请参阅 wellsr.com/vba/2016/excel/vba-freefile-for-foolproof-file-IO【参考方案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()

【讨论】:

这有助于编写和读取文本文件 我认为您没有阅读问题是什么,并且您不喜欢解释您将要尝试的内容,这在帮助他人的同时并不是一件好事。 你甚至没有正确格式化你的答案。 很遗憾,您发布的代码不是 VBA。 VBA默认没有My.Computer.FileSystem对象,所以你也不能使用WriteAllText方法。 Zack,请避免发布仅代码的答案,并确保您使用的语言与 op 内联。【参考方案4】:

一种没有太多冗余的简单方法。

    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

【讨论】:

是否可以使用文件选择器设置路径? 这将创建一个 UCS2 编码的文件。是否可以创建一个是 ANSI 的?【参考方案5】:

使用 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    

在此处查看文档:

http://technet.microsoft.com/en-us/library/ee198742.aspx http://technet.microsoft.com/en-us/library/ee198716.aspx

【讨论】:

当您直接引用脚本运行时,您可以使用正确的类型:Dim oFs As New FileSystemObject Dim oFile As TextStream 是否使用脚本运行时优先于旧的通道方法?我想用其他经验支持的信息告诉我的学生。 请注意,这个答案促进了糟糕的编码习惯:问题在于没有明确定义正确的变量类型以及创建通过字符串引用其名称的对象 可能会导致您将来很难调试问题(例如,如果您拼错了名称的一部分)。此外,通过不输入变量,您无法了解FileSystemObject 必须提供的其他惊人方法。 @Ben:请考虑更新您的答案,以在better direction 中引导初学者。 @MarcusMangelsdorf 我听说过你,但我不想辩论。 我不同意这个答案正在促进糟糕的编码实践。像这样使用后期绑定是完全可以接受的,并且在您不知道您的用户在他们的机器上拥有什么版本的 Microsoft 脚本运行时时很有用。

以上是关于如何使用 VBA 创建和写入 txt 文件的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 C++ 在 .txt 文件中写入、读取和重写

如何用vba读取多个txt文件名和txt文件内容写入excel中?

如何使用excel vba从图片文件中读取像素?

java代码 如何向TXT文件写入内容?

如何使用 VBA 检查文本文件的时间戳

用Lua如何创建一个文件?