У меня есть необработанные данные CSV по каждой стране ЕС, к которым я применяю макрос для форматирования, создания сводной таблицы и т. д. Все файлы Excel начинаются с кода страны, например: AT report 201901, FR Report 201901 и т. д.
У меня есть еще одна рабочая книга Excel, сохраненная на сетевом диске, под названием VATCONTROLS, с листами по странам, то есть AT, FR, BE, DE и т. д.
Я ищу макрос, который будет искать первые две цифры имени активной рабочей книги, а затем копировать/вставлять соответствующий лист из закрытой рабочей книги 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
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