VBA를 사용하여 txt 파일을 만들고 쓰는 방법


116

입력에 따라 수동으로 추가하거나 수정 한 파일이 있습니다. 해당 파일에서 대부분의 내용이 반복적이므로 16 진수 값만 변경되므로 도구 생성 파일로 만들고 싶습니다.

txt 파일에 인쇄 될 c 코드를 작성하고 싶습니다 .

VBA 를 사용하여 .txt 파일 을 만드는 명령은 무엇 이며 어떻게 작성합니까?


1
기존 파일이 생성 된 후 수정 하시겠습니까? 그리고 "는 C 코드"무엇
— brettdj

1
기존 답변이 귀하의 요구 사항을 충족하는 경우 답변으로 수락하여 질문이 더 이상 답변되지 않은 것으로 표시되지 않습니까? (그렇지 않으면, 문제 : 해결하기 위해 기존의 답변에서 누락 있는지에 대한 세부 정보를 추가하십시오)
— 마커스 Mangelsdorf

답변:


37

Ben의 대답 에 대해 자세히 설명하려면 :

당신에 대한 참조를 추가하는 경우 Microsoft Scripting Runtime올바르게 변수를 입력 FSO 을 수행 할 수 있습니다 자동 완성의 장점이 걸릴 (인텔리를) 및 다른 훌륭한 기능을 발견 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

코드에 대한 유용한 주석과 함께 완전한 답변을 작성해 주셔서 감사합니다.
— Portland Runner

내 게시물에서 뭔가를 배웠다면 더 행복합니다! :)
— Marcus Mangelsdorf

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

이전 채널 방법보다 스크립팅 런타임을 선호합니까? 다른 경험을 통해 뒷받침 된 정보를 학생들에게 알려야 할 이유가 있습니다.
— Rick Henderson

@RickHenderson, 그게 당신이 의미하는 바라면 그것을 선호합니다. 장점은 캡슐화입니다. 이의를 제기하거나 (oFile = Nothing | 설정) 범위를 벗어나면 파일이 자동으로 닫힙니다.
— 벤

2
이 답변 은 잘못된 코딩 관행을 촉진합니다 . 문제는 올바른 변수 유형 을 명시 적으로 정의하지 않고 해당 이름에 대한 문자열 참조로 객체 를 생성 하면 향후 문제를 디버깅하기가 매우 어려울 수 있다는 것입니다 (예 : 이름의 오타 부분). 또한 변수를 입력하지 않으면 제공해야하는 다른 놀라운 방법에 대해 배울 방법이 없습니다 FileSystemObject. @Ben : 초보자를 더 나은 방향으로 이끌 기 위해 답변 을 업데이트하는 것을 고려하십시오 .
— Marcus Mangelsdorf

2
@MarcusMangelsdorf 나는 당신을 들었지만 토론하고 싶지 않습니다.
— 벤

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

추가 정보:


몇 가지 설명과 세부 사항과 함께 답변을 작성하십시오.
— Mohammed Noureldin

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 년 이후 BASIC 언어의 일부가되었습니다
— richardtallent

2
대신 FreeFile 사용에 대한 @phrebh에서 코멘트 관련, 하드 코딩 # 1 참조 wellsr.com/vba/2016/excel/vba-freefile-for-foolproof-file-IO
— 조지 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
파일 선택기를 사용하여 경로를 설정할 수 있습니까?
— rrs

이렇게하면 UCS2로 인코딩 된 파일이 생성됩니다. 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()

쓰기와 읽기 텍스트 파일을이 캔 도움말
— 잭 브라이트

1
나는 당신이 질문이 무엇인지 읽지 않고 다른 사람들을 돕는 동안 좋은 것이 아닌 당신이 시도하려는 것을 설명하는 것을 좋아하지 않는다고 생각합니다.
— M. Adeel Khalid

그리고 당신은 당신의 대답을 올바르게 형식화하지도 않습니다.
— BDL

3
불행히도 귀하가 게시 한 코드는 VBA가 아닙니다. My.Computer.FileSystem기본적으로 VBA 에는 개체 가 없으므로 WriteAllText메서드를 사용할 수도 없습니다 .
— 마커스 Mangelsdorf

Zack, 코드 전용 답변을 게시하지 말고 사용중인 언어가 op와 인라인인지 확인하십시오.
— Daniel L. VanDenBosch
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.