일반적으로 vba에서 새창을 띄우는 명령어를 사용하면,
workbook.add
계속 vba 창이 떠있는 경우, 새로 열린 창에서 내용 수정이 되지 않는다 (락이 걸린상태처럼)
그래서 vba 창을 계속 켜놓은 상태로 새창을 실행하고 거기서 문서 편집을 해야할 경우, 아예 새창을 여는 코드를 사용해야하는데 그때 아래 코드를 사용하면 새창이 뜬다.
Set xlAdd = CreateObject("Excel.Application")
Filename = ThisWorkbook.Name
Total = Workbooks(Filename).Worksheets.Count
xlAdd.Visible = True
xlAdd.Workbooks.Add
문제는 새창에 현재 vba 내 변수들을 저장할 때인데, 새창을 열고 activesheet를 선택한 후에 붙여넣어도, 현재 vba창이 속한 엑셀에 붙여넣어진다.
vba 창은 계속 실행중이며, 새창은 vba가 속한 엑셀과는 완전히 다른 창이기 때문에 호환이 되지 않는다.
그렇다면, vba창을 계속 실행하면서, 새창을 띄워 계산결과를 붙여넣으려면 어떻게 해야할까!!
해결이 되면 추가하겠다.
해결함. 해결방식은
1) 엑셀 시트를 만들어서 복사 (새창 ㄴㄴ)하고 저장하고 닫기.
2) 새창을 띄움.
3) 새창에서 저장된 파일 열기.
Dim Newfilename As String
Dim xlAdd As Object
Set xlAdd = CreateObject("Excel.Application")
ThisFilename = ThisWorkbook.Name
fileloc = ThisWorkbook.FullName
Newfilename = FileSequence(ThisWorkbook.Path & "\case.xlsx")
Workbooks.Add
Workbooks(ThisFilename).Worksheets.Copy before:=ActiveWorkbook.Sheets(1)
Workbooks(Workbooks.Count).SaveAs Newfilename
ActiveWorkbook.Close
xlAdd.Visible = True
xlAdd.Workbooks.Open Newfilename
End Sub
그리고 1)번 과정에서 임의의 이름으로 저장하기 때문에 자동으로 저장되게 하기 위해 filesequence라는 함수를 사용했다. 코드는 아래에 있음. 그대로 붙여넣으면 같이 사용됨.
[출처 : 오빠두엑셀 블로그]
Dim Ext As String: Dim Path As String: Dim newPath As String
Dim Pnt As Long
Pnt = InStrRev(FilePath, ".")
Path = Left(FilePath, Pnt - 1)
Ext = Right(FilePath, Len(FilePath) - Pnt + 1)
newPath = Path & Delimiter & Sequence & Ext
Do Until FileExists(newPath) = False
Sequence = Sequence + 1
newPath = Path & Delimiter & Sequence & Ext
Loop
FileSequence = newPath
End Function
Public Function FileExists(ByVal path_ As String) As Boolean
'########################################################
'입력한 파일경로에 파일 존재여부를 확인합니다.
'https://www.oppadu.com/vba-fileexists-함수/
'########################################################
FileExists = (Dir(path_, vbDirectory) <> "")
End Function
이렇게 하면 매번 파일이 된다는 단점이 있지만, 그래도 복사된 파일을 바로바로 확인하고 수정할 수 있다!
댓글 없음:
댓글 쓰기