Я просмотрел другие ответы, но оказалось, что мои проблемы решены только частично, поскольку проблемы связаны с несколькими проблемами.
ФОН
Каждый месяц открывается рабочая книга со ссылками на внешние данные, и для каждого сайта создаются отчеты.
Файл обновляется при доступе к каждому сайту из выпадающего списка.
После создания отчета к каждому сайту применяется фильтр, основанный на их конкретных договорных требованиях: фильтры представляют собой отдельные столбцы с ячейками «» или «y».
ДЕЙСТВИЯ НА ДАТУ
Я построил некоторый код для циклического перемещения по выпадающему списку (в ячейке "H1") и сохранения полученных рабочих листов в новом отдельном месте под именем расположения сайта в ячейке "H1".
У меня есть код для фильтрации на основе местоположения сайта в ячейке "H1".
Я также написал код, чтобы попросить пользователя выбрать местоположение папки «Сохранить в».
ПРОБЛЕМА (S)
- Путь к папке, генерируемый диалоговым окном FileDialog (msoFileDialogFolderPicker), работает только для первого цикла «Для каждого».
- Я не знаю, куда поместить код автофильтра в цикл «Для каждого».
Я думаю, что # 1 происходит из-за того, что сгенерированный путь к папке является переменной, и мне нужно иметь возможность объявить его как константу ....?
Опять же, для автофильтра, опять же, я думаю, что проблема заключается в доступе к имени из DDL в цикле For Each: не знаю, как его решить.
Возможно, я использую неправильный подход к достижению желаемого результата, или это может быть небольшая настройка, которая необходима.
Следующий код работает, так как файл сохраняется в выбранной папке для первого элемента, но затем пытается сохранить каждый последующий файл как «FALSE», но фильтр не применяется.
Я пытался вызвать Sub FilterRows_SiteSpecific из цикла For Each, но это не имеет значения для вывода, автофильтр не работает.
С благодарностью получена любая помощь.
Sub SelectFolderANDLoop()
Application.ScreenUpdating = False
Dim sFolder As String
' Open the select folder prompt
With Application.FileDialog(msoFileDialogFolderPicker)
'This sets the starting point for Folder selection as "T:\Business Information" etc
If .Show = -1 Then ' if OK is pressed
sFolder = .SelectedItems(1)
End If
End With
If sFolder <> "" Then ' if a file was chosen
' *********************
Dim rngListSelection As Range
Dim strListSelection As String
Dim intColumn As Integer
'Looks up each site from drop down lilst in cell H1
For Each rngListSelection In Range(Range("H1").Validation.Formula1)
Range("H1").Value = rngListSelection
' Copy tabs "Site Name" and "Data"
Worksheets(Array("Site Name", "Data")).Copy
' Clears the entry for the site name
Range("H1").Validation.Delete
' Copies the 2 worksheets to a new workbook
ActiveWorkbook.SaveAs sFolder & "\" rngListSelection.Value & ".xlsx", xlOpenXMLWorkbook
ActiveWorkbook.Close
Next rngListSelection
Application.ScreenUpdating = True
' *********************
End If
End Sub
Sub FilterRows_SiteSpecific()
' VLookupForAutoFilter Macro
' Set VLookup calculation output as Integer variable
Dim intColumn As Integer
' Calculation must start on woksheet "Site Name" and looks up Site name in cell "H1"
On Error Resume Next
intColumn = Application.WorksheetFunction.VLookup(ActiveSheet.Range("H1"), _
Worksheets("Data").Range("B125:E145"), 4, False)
On Error GoTo 0
' If the site name is not found in the VLookup table, create error message
Debug.Print intColumn
If intColumn = 0 Then
MsgBox "The unit name is mistyped as a match was not found"
Else
End If
' The above was to create a variable to provide the column number_
' to use in the Autofilter function below
With Worksheets("Site Name").Range("A2:r149")
' Filters to exclude "Info Only" in "Target" column
.AutoFilter field:=11, Criteria1:="<>Info Only"
' Filter to include "y" in column from VLOOKUP
.AutoFilter field:=intColumn, Criteria1:="y"
With Worksheets("Site Name").Range("A8:r149")
' Filters to exclude "n/a" in "Actual" column
.AutoFilter field:=10, Criteria1:="<>n/a"
End With
End With
End Sub