VBA运行两个功能的麻烦

时间:2019-02-19 10:49:39

标签: excel vba

我正在制作一个VBA工具,在其中提取excel文件夹中所有文件的名称(称其为输出A)。此后,我对文件名进行了一些处理以提取其中一部分(称为输出B)。 (直到这里我的工具都可以正常工作) 此后,我只想从输出B中提取唯一值。我在此步骤中面临问题。

获取输出A的代码:

Sub GetFileNames()

Dim xRow As Long
Dim xDirect$, xFname$, InitialFoldr$

InitialFoldr$ = "G:\" '<<< Startup folder to begin searching from

With Application.FileDialog(msoFileDialogFolderPicker)
    .InitialFileName = Application.DefaultFilePath & "\"
    .Title = "Please select a folder to list Files from"
    .InitialFileName = InitialFoldr$
    .Show
    Worksheets("Sheet1").Activate
    Worksheets("Sheet1").Range("C11").Activate

    If .SelectedItems.Count <> 0 Then
        xDirect$ = .SelectedItems(1) & "\"
        xFname$ = Dir(xDirect$, 7)
        Do While xFname$ <> ""
            ActiveCell.Offset(xRow) = xFname$
            xRow = xRow + 1
            xFname$ = Dir
        Loop
    End If
End With
getunique
End Sub

用于生成输出B的代码:

Sub getunique()
Range("F11:F70").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("C3"), Unique:=True
End Sub

两个函数都运行正常。但是当我试图将它们一起运行时,我会遇到问题。

我创建了两个单独的宏。当我运行第二个宏时,生成的列表(输出A)会自动清除。

有人可以帮忙吗?

谢谢

1 个答案:

答案 0 :(得分:0)

欢迎使用StackOverflow。

您的第二个函数引用ActiveSheet(在这种情况下为“ Sheet1”)。理想情况下,您应该始终完全限定范围,即:ThisWorkbook.Worksheets("Sheet2").Range("C3"),尽管我个人更喜欢使用变量:

Dim WB as Workbook : Set WB = ThisWorkbook
Dim WS as Worksheet : Set WS = WB.Sheets("Sheet1")

然后您可以在以后轻松地重用它们:

With WS
    .Range("F11:F70").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=.Range("D3"), Unique:=True
End With

无论如何,这和您尝试写入同一列的事实都无济于事...

假设您拥有"Sheet2",请尝试以下操作:

Sub getunique()
    Worksheets("Sheet1").Range("F11:F70").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Worksheets("Sheet2").Range("C3"), Unique:=True
End

或者,将CopyToRange:=Range("C3")更改为其他列也应该可以。

编辑 您收到的错误是因为Range("F11:F70")中实际上没有任何东西...更改AdvancedFilter使其指向收集文件名Range("C11:C70")的范围。