각 EU 국가에 대한 원시 CSV 데이터가 있으며 매크로를 실행하여 형식을 지정하고 피벗을 만드는 등의 작업을 수행합니다. Excel 파일은 모두 국가 코드로 시작합니다(예: AT 보고서 201901, FR 보고서 201901 등).
국가별 시트(AT, FR, BE, DE 등)가 포함된 VATCONTROLS라는 네트워크 드라이브에 저장된 또 다른 Excel 통합 문서가 있습니다.
활성 통합 문서 이름의 처음 두 자리를 확인한 다음 닫힌 VATControls 통합 문서에서 해당 시트를 복사/붙여넣고 활성 통합 문서에 추가하는 매크로를 찾고 있습니다.
이 문제를 어떻게 해결할까요? 이것은 코드의 일부일 뿐입니다. Newsheet는 코드의 다른 부분에 대한 워크시트입니다.
Dim excel As excel.Application
Dim wsGET As String
Dim wb As excel.Workbook
Dim sht As excel.Worksheet
NewSheet.Activate
Range("A1").Activate
Range("A1") = ActiveWorkbook.Name
Range("B1").Select
ActiveCell.FormulaR1C1 = "=LEFT(RC[-1],2)"
wsGET = ActiveSheet.Range("b1")
Set wb = Workbooks.Open("C:\Users\extosldva\documents\vatcontrols.xlsx")
Set sht = wsGET
sht.Activate
sht.Range("A1:A3").Copy
sht.Range("B1:B3").PasteSpecial Paste:=xlPasteValues
For Each Sheet In ActiveWorkbook.Worksheets
If Sheet.Name = wsGET Then
Sheet.Activate
End If
Next
If Not targetSheetFound Then
Set Sheet = Sheets.Add
Sheet.Name = targetSheetName
End If
나는 많은 것을 시도했고 다양한 소스의 몇 가지 샘플 코드 조각을 결합하여 다양한 결과를 얻었습니다. 코드가 엉망이고 일관성이 없기 때문에 정리가 필요하지만, 이 부분이 작동했으면 좋겠고, 하나의 목표를 달성하기 위해 여러 가지 방법을 뒤섞고 있는 것 같아 안타깝습니다.
명확히 하려면: 닫힌 통합 문서에서 시트 이름이 b1 셀의 값과 일치하는 전체 시트를 활성 통합 문서의 새 시트에 복사하거나 추가하고 싶습니다. 이후의 코드 부분은 {Set sht = wb.wsGET}
해당 부분이 작동하는지 확인하는 것이었습니다.
답변1
@Dennis 다음 매크로는 Z.active 통합 문서에 새 시트를 추가하고 vatcontrol workbook에서 국가 vat 시트를 복사합니다.
Sub Macro2()
Dim excel As excel.Application
Dim wsGET As String
Dim wb As excel.Workbook
Dim sht As excel.Worksheet
Dim ActvWB As String
Dim targetSheetFound As String
ActvWB = ActiveWorkbook.Name
Sheets.Add After:=Sheets(Sheets.Count)
Range("A1").Activate
Range("A1") = ActiveWorkbook.Name
Range("B1").Select
ActiveCell.FormulaR1C1 = "=LEFT(RC[-1],2)"
wsGET = ActiveSheet.Range("B1")
Set wb = Workbooks.Open("C:\Users\extosldva\documents\vatcontrols.xlsx")
targetSheetFound = "Not Found"
For Each Sheet In ActiveWorkbook.Worksheets
If Sheet.Name = wsGET Then
targetSheetFound = "Found"
Sheets(wsGET).Copy After:=Workbooks(ActvWB).Sheets(Workbooks(ActvWB).Sheets.Count)
wb.Close
Exit For
End If
Next
Workbooks(ActvWB).Activate
If targetSheetFound = "Not Found" Then
Sheets.Add After:=Sheets(Sheets.Count)
Sheet.Name = wsGET
End If
Worksheets(wsGET).Activate
MsgBox "done"
End Sub