2013-03-04 3 views
0

Прежде всего, я признаю, что почти ничего не знаю о написании макросов в excel. Мне удалось создать макрос ниже, связав другие макросы с другими сообщениями.Определение диапазона макросов excel с применяемым фильтром

Макрос ниже работает, но мне нужно это, чтобы сделать еще одну вещь, и я не могу понять это.

В основном, что делает макрос, пользователь может выбрать местоположение папки, а затем пройти через столбец и забрать ссылку, содержащуюся в каждой строке этого столбца, а затем сохранить файл на другом конце этой ссылки для путь к папке выбран с определенным форматом именования.

Единственный бит, который я не могу понять, - это когда я применяю фильтр к форме excel, он все равно будет захватывать все файлы независимо от того, видны они или нет.

Текущий макрос:

*Private Declare PtrSafe Function URLDownloadToFile Lib "urlmon" Alias _ 
    "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal _ 
    szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long 
Sub Button1_Click() 
Dim intranetLink As String 
Dim mainBook As Workbook 
Dim Counter As Integer 
Dim saveDialog As FileDialog 
Dim savePath As String 
Dim filename As String 
Counter = 4 

    Set saveDialog = Application.FileDialog(msoFileDialogFolderPicker) 
    With saveDialog 
     .Title = "Select a Folder"    'sticks a title on the dialog so the user kind of knows what they're supposed to be doing 
     .AllowMultiSelect = False    'prevents the user from selecting more than one item out the dialog. 
     .InitialFileName = strPath    ' 
     If .Show <> -1 Then GoTo FolderBombed 'if the user does something funky or cancels, abort the rest of the macro. 
     savePath = .SelectedItems(1)   'get the file path to the selected folder 
    End With 

    For Each vCell In Range("J4:J" & Cells(Rows.Count, "J").End(xlUp).Row) 
    intranetLink = vCell.Text 
    filename = Cells(Counter, 6) 
     filename = "c:\Path\" + filename 
     URLDownloadToFile 0, intranetLink, filename, 0, 0 
     Counter = Counter + 1 
    Next vCell 

FolderBombed: 
     MsgBox ("Completed") 
End Sub* 

Линия Мне нужно изменить это следующий:

For Each vCell In Range("J4:J" & Cells(Rows.Count, "J").End(xlUp).Row) 

Я попытался изменить его на что-то вроде этого:

For Each vCell In Range("J4:J" & Cells(Rows.Count, "J").CurrentRegion.SpecialCells(xlVisible).End(xlUp).Row). 

но все это - это выбор файла, который отфильтровывается из диапазона.

Любая помощь в получении этого права будет принята с благодарностью.

Chris.

ответ

0

Используйте это - петля через клетку и проверять каждый один:

For Each vCell In Range("J4:J" & Cells(Rows.Count, "J").End(xlUp).Row) 
    If not vCell.EntireRow.Hidden Then 
    [...]