DSD_Data_Copy 함수의 개선 버전과 원본 버전을 비교하여 주요 변경사항을 정리하였습니다.
DSD_Data_Copy_Improved: 기존 DSD_Data_Copy의 개선된 버전Store_XBRL_Backup_Data: XBRL 데이터 백업을 위한 새로운 함수Restore_XBRL_Backup_Data: 백업된 XBRL 데이터 복원을 위한 새로운 함수WorksheetExists: 워크시트 존재 여부 확인 함수' 기존 함수를 새로운 방식으로 교체
Sub DSD_Data_Copy(strPath As String, Optional targetSheets As String = "")
Call DSD_Data_Copy_Improved(strPath, targetSheets)
End Sub
수정된 코드에서는 XBRL 데이터 백업을 위한 전역 변수들이 추가되었습니다:
Private g_XBRL_Backup_Data As Variant
Private g_XBRL_Backup_Formulas As Variant
Private g_XBRL_Backup_Formats As Variant
Private g_Has_Backup_Data As Boolean
Optional targetSheets As String = ""'## 업데이트 모드 확인
If rng_Refresh_List.Cells(i, 5).value = "DSD Update" Then
isUpdateMode = True
End If
'## 수식을 완전한 텍스트로 저장
If cell.HasFormula Then
backup_Data(r, c) = cell.Formula ' 예: =D8
backup_Formulas(r, c) = True
Else
backup_Data(r, c) = cell.value
backup_Formulas(r, c) = False
End If
원본 코드에 있던 다음 기능들이 제거되었습니다:
' 제거된 변수들
Dim rng_Table, rng_Temp As Range
Dim rng_LeftTop, rng_RightBottom As Range
Dim rng_LeftTop_Temp, rng_RightBottom_Temp, rng_Line_Temp As Range
Dim iTable, iRow, iCol As Integer
Dim name_Temp As Name
'## 처리 결과 기록
If ws_New_Sheet Is Nothing Then
rng_Refresh_List.Cells(i, 9).value = "'DSD 업데이트 완료 (기존 시트 덮어쓰기)"
Else
rng_Refresh_List.Cells(i, 9).value = "'DSD 업데이트 완료 (새 시트: " & str_New_SheetName & ")"
End If
수정된 코드는 복잡한 테이블 처리 기능을 제거하고 XBRL 데이터 보존에 중점을 두었습니다. 고급 테이블 서식 처리 기능은 삭제하였고 그 부분은 다시 한번 살펴봐주셔도 됩니다.
DSD_File_Select와 DSD_Sheet_Add 함수의 수정 버전과 원본 버전을 비교하여 주요 변경사항을 정리하였습니다.
' 기존 코드
Dim iRow As Integer
' 수정된 코드
Dim iRow As Long
이 부분은 작동되는 부분이 아닌듯하여 기존 코드로 가도 될 것 같습니다. (특정 시트 업데이트 기능이라 적어놓은 부분은 제외해도 됨)
' 기존 코드
Sub DSD_Sheet_Add()
' 수정된 코드
Sub DSD_Sheet_Add(Optional updateSpecificSheets As Boolean = False, Optional sheetList As String = "")
updateSpecificSheets: 특정 시트만 업데이트할지 여부sheetList: 업데이트할 시트 목록' 기존 코드
Dim iRow_Refresh As Integer, iRow As Integer, i As Integer
' 수정된 코드
Dim iRow_Refresh As Long, iRow As Long, i As Long
' 수정된 코드에만 있는 변수들
Dim ws_Existing As Worksheet
Dim bSheetExists As Boolean
' 기존 코드
If ws_Index.Cells(i, "E").value = "Y" And InStr(1, ws_Index.Cells(i, "F").value, "생성 필요") > 0 Then
' 수정된 코드
If ws_Index.Cells(i, "E").value = "Y" Then 'And InStr(1, ws_Index.Cells(i, "F").value, "생성 필요") > 0 Then
"생성 필요" 조건 체크를 주석 처리하여 비활성화' 수정된 코드에만 있는 로직
'## 특정 시트만 업데이트하는 경우 해당 시트인지 확인
If updateSpecificSheets Then
If InStr(1, "/" & sheetList & "/", "/" & Trim(ws_Index.Cells(i, "D").value) & "/") = 0 Then
GoTo NextIteration '## 해당 시트가 아니면 건너뛰기
End If
End If
기존 코드에서는 중복 시트명이 있으면 에러로 처리했지만, 수정된 코드에서는 업데이트 옵션을 제공:
' 기존 코드 (중복 시트 에러 처리)
ElseIf InStr(1, str_ALL_SheetName, UCase("/" & str_SheetName & "/")) <> 0 Then
MsgBox "생성 대상 시트 중 기존시트와 중복된 시트명이 있습니다.", vbInformation, "생성 시트 이름 확인"
GoTo StopRun
' 수정된 코드 (업데이트 옵션 제공)
If InStr(1, str_ALL_SheetName, UCase("/" & str_SheetName & "/")) <> 0 Then
'## 기존 시트가 있는 경우 업데이트 모드로 처리
On Error Resume Next
Set ws_Existing = ThisWorkbook.Sheets(str_SheetName)
On Error GoTo 0
If Not ws_Existing Is Nothing Then
'## 사용자에게 업데이트 여부 확인
If MsgBox("기존 시트 '" & str_SheetName & "'가 이미 존재합니다." & Chr(10) & _
"DSD 부분만 업데이트하시겠습니까?" & Chr(10) & Chr(10) & _
"※ XBRL 데이터는 보존됩니다.", vbQuestion + vbYesNo, "기존 시트 업데이트") = vbYes Then
'## 갱신목록에 업데이트 모드로 기록
rng_Refresh_List.Cells(iRow_Refresh + 1, 5).value = "DSD Update"
Else
GoTo NextIteration
End If
End If
' 수정된 코드에만 있는 라벨
NextIteration:
Next
' 기존 코드 (모든 시트를 새로 생성)
For i = 1 To rng_Refresh_List.Rows.Count
'## 시트 생성
Set ws_New = ThisWorkbook.Sheets.Add(after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
' 수정된 코드 (새 시트만 생성, 업데이트는 별도 처리)
For i = 1 To rng_Refresh_List.Rows.Count
'## DSD New인 경우만 새 시트 생성
If rng_Refresh_List.Cells(i, 5).value = "DSD New" Then
'## 시트 생성
Set ws_New = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
기존 코드에서 제거된 부분:
'## 생성된 시트기록 (갱신목록)
'@@rng_Refresh_List.Cells(i, 6).value = "'" & Format(Now(), "yyyy-MM-dd HH:mm:ss")
주석 처리된 마지막 부분:
' 기존 코드 (주석 처리되어있음)
' Application.GoTo ws_Index.Cells(i, "A"), True
' Application.GoTo ws_Index.Cells(i, "D"), False