У меня есть немного сложный VBA, который я пытаюсь создать. В настоящее время у меня есть два других макроса, которые ищут два листа для имен поставщиков и создают новые листы с их конкретной информацией. Это оставляет мне около 40 листов, теперь я пытаюсь написать макрос, который будет искать имя поставщика в заголовке листа и сохранять все листы, связанные с этим поставщиком, в новую книгу (если файл существует обновление текущие листы в этой книге). У меня будет список поставщиков на одном листе, который я бы хотел использовать в качестве критериев поиска. Вот пример первого макроса я бегНужен код VBA, чтобы выбрать листы, соответствующие именам в списке, а затем сохранить в новую книгу
Sub ERP_POS()
Dim ws1 As Worksheet Dim wsNew As Worksheet
Dim rng As Range
Dim r As Integer
Dim c As Range
Dim bAF As Boolean
Set ws1 = Sheets("ERP_POS")
Set rng = Range("Database") bAF = ws1.AutoFilterMode
'extract a list of Sales Reps With ws1
.Columns("P:P").Copy _
Destination:=.Range("X1")
.Columns("X:X").AdvancedFilter _
Action:=xlFilterCopy, _
CopyToRange:=.Range("Y1"), Unique:=True
r = .Cells(Rows.Count, "Y").End(xlUp).Row
.Columns("X:X").ClearContents
'set up Criteria Area
.Range("X1").Value = .Range("P1").Value
For Each c In .Range("Y2:Y" & r)
'add the rep name to the criteria area
.Range("X2").Value = _
"=""="" & " & Chr(34) & c.Value & Chr(34)
'add new sheet (if required)
'and run advanced filter
If WksExists("ERP_POS" & " " & c.Value) Then
Sheets("ERP_POS" & " " & c.Value).Cells.Clear
rng.AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=.Range("X1:X2"), _
CopyToRange:=Sheets("ERP_POS" & " " & c.Value).Range("A1"), _
Unique:=False
Else
Set wsNew = Sheets.Add
wsNew.Move After:=Worksheets(Worksheets.Count)
wsNew.Name = "ERP_POS" & " " & c.Value
rng.AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=.Range("X1:X2"), _
CopyToRange:=wsNew.Range("A1"), _
Unique:=False
End If
Next
.Select
.Columns("Y:X").EntireColumn.Delete
If bAF = True Then
.Range("A1").AutoFilter
End If
End With
End Sub
Function WksExists(wksName As String) As Boolean
On Error Resume Next
WksExists = CBool(Len(Worksheets(wksName).Name) > 0)
End Function
А вот где я получил с помощью этого и recoring моего собственного макроса, но не понял, как создать функцию массива с переменными, полученными из поиска, или заставить поиск работать при создании c.value.
Sub Test1234() ' ' Test1234 Macro ' Dim ws As Worksheet Dim ws2 As
Worksheet ws = Worksheet.Name
For Each ws In ActiveWorkbook.Worksheets
If ws.Name Like "*CompanyA*" Then
Set ws2 = Worksheet.Name
Sheets(ws2).Select
Sheets(ws2).Copy
ActiveWorkbook.SaveAs filename:="C:\Users\xxxxx\Desktop\Lovley.xlsx", _
FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
End If
Next ws
End Sub
, похоже, выдает код ошибки 9 на 'ThisWorkbook.sheets (aWsh) .Copy', также где sKey мне нужно, чтобы быть переменной из другого листа, и эта переменная будет использоваться в качестве имени файла. Лист, содержащий список переменных, - «Disti_List». –
@B_ROB Извините забудьте включить «Option Base 1», отредактировав это сообщение, пожалуйста, попробуйте сейчас ... – EEM
** 'Ошибка 13 - Тип несоответствия' ** - Это означает, что« Лист »не был найден с похожим именем, поэтому проверьте, что вы кормите 'sKey', скорее всего, вы сделали ошибку ввода. – EEM