Как я могу преобразовать сгенерированный пользователем путь к папке (переменная) для использования в цикле For Each .SaveAs? - PullRequest
3 голосов
/ 25 апреля 2019

Я просмотрел другие ответы, но оказалось, что мои проблемы решены только частично, поскольку проблемы связаны с несколькими проблемами.


ФОН

Каждый месяц открывается рабочая книга со ссылками на внешние данные, и для каждого сайта создаются отчеты. Файл обновляется при доступе к каждому сайту из выпадающего списка. После создания отчета к каждому сайту применяется фильтр, основанный на их конкретных договорных требованиях: фильтры представляют собой отдельные столбцы с ячейками «» или «y».


ДЕЙСТВИЯ НА ДАТУ

Я построил некоторый код для циклического перемещения по выпадающему списку (в ячейке "H1") и сохранения полученных рабочих листов в новом отдельном месте под именем расположения сайта в ячейке "H1". У меня есть код для фильтрации на основе местоположения сайта в ячейке "H1". Я также написал код, чтобы попросить пользователя выбрать местоположение папки «Сохранить в».


ПРОБЛЕМА (S)

  1. Путь к папке, генерируемый диалоговым окном FileDialog (msoFileDialogFolderPicker), работает только для первого цикла «Для каждого».
  2. Я не знаю, куда поместить код автофильтра в цикл «Для каждого».

Я думаю, что # 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...