我正在制作一个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)会自动清除。
有人可以帮忙吗?
谢谢
答案 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")
的范围。