애들센스


파일이 없으면 새로 만들고, 있으면 그냥 사용하기 오피스/VBA/Office.JS

엑셀 프로그래밍을 하다보면 외부파일(텍스트이건 바이너리이건)을 다룰 일이 그리 많치 않다. 다만 VBA의 조상님인 VB가 가진 위대한 유산을 물려받아 사용가능하다.
(Open) https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/open-statement
(Input) https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/inputstatement
(Line Input) https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/line-inputstatement
(Get) https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/get-statement
(Put) https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/put-statement
(Print) https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/printstatement
(Write) https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/writestatement
(Close) https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/close-statement

오랜만에 텍스트 파일을 열어 작업을 하려는 데, 만일 파일이 없다면 새로 만들지만, 이미 파일이 있다면 오버라이트하지 말고 내용만 추가하려고 한다. 따라서 파일이 있는 지 없는 지 알아보는 절차를 줄여야 한다. 레거시인 Open문은 이게 가능한데, Append, Binary, Output, Random 모드중 하나로 파일을 오픈하면 된다.

하지만 레거시만 있는 것은 아니다. VBA는 외부라이브러리를 사용할 수 있다. 다음은 스크립팅 라이브러리를 이용하여 파일을 만들거나 여는 예이다. 매개변수중 Create를 True로 주면 앞서 말한 레거시 오픈문처럼 파일이 없으면 새로 만들고, 있으면 내용만 추가한다.
Sub fsoOpenTextFile()
'object.OpenTextFile(filename[, iomode[, create[, format]]])
' Arguments
' [...]
' Create
' Optional. Boolean value that indicates whether a new file can be created
' if the specified filename doesn't exist.
' The value is True if a new file is created, False if it isn't created.
' If omitted, a new file isn't created.
' Call OpenTextFile with the 3rd parameter set to True
' in order to create the file if it doesn't exist:


Dim fso, f
Dim fileName As String

fileName = "fsoOpenTextFile.txt"
Set fso = CreateObject("scripting.filesystemobject")
Set f = fso.OpenTextFile(fileName, 8, True)

f.WriteLine "TE+St"

f.Close
Set f = Nothing
Set fso = Nothing
End Sub

참고로 파일의 존재여부를 확인하려면
If Len(Dir(ThisWorkbook.Path & "\" & Date & "_calloptions.csv")) = 0 Then '파일이 없군~블라블라'
If Len(Dir(ThisWorkbook.Path & "\" & Date & "_calloptions.csv")) <> 0 Then '파일이 있네~블라블라'

덧글

댓글 입력 영역