0

最初に、私は Excel でマクロを書くことについてほとんど何も知らないことを認めます。他のさまざまな投稿から他のマクロをつなぎ合わせて、以下のマクロを作成することができました。

以下のマクロは機能しますが、もう 1 つ実行する必要があり、それがわかりません。

基本的に、マクロが行うことは、ユーザーがフォルダーの場所を選択して列を通過し、その列の各行に含まれるリンクを選択して、選択したフォルダー パスへのリンクの反対側にあるファイルを保存できるようにすることです。定義された命名形式で。

私が理解できない唯一のビットは、フィルターを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).

ただし、これは、範囲から除外されたファイルを選択するだけです。

これを正しく行うための助けをいただければ幸いです。

クリス。

4

1 に答える 1

0

これを使用してください - セルをループして、それぞれをチェックしてください:

For Each vCell In Range("J4:J" & Cells(Rows.Count, "J").End(xlUp).Row)
    If not vCell.EntireRow.Hidden Then
    [...]
于 2013-03-05T15:29:51.720 に答える