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.