0

我有一些我正在尝试改进但有一些问题的代码。

目前的代码是:

    Sub TestListFilesInFolder()
'Workbooks.Add ' create a new workbook for the file list
' add headers

Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogFolderPicker) ' Tried using a FileDialog Application  but had no luck

With Range("A1")
    .Formula = "Folder contents:"
    .Font.Bold = True
    .Font.Size = 12
End With
Range("A3").Formula = "Old File Path:"
Range("B3").Formula = "File Type:"
Range("C3").Formula = "File Name:"
Range("D3").Formula = "New File Path:"
Range("A3:H3").Font.Bold = True
ListFilesInFolder "L:\Pictures\A B C\B526 GROUP", True
' ListFilesInFolder fd, True ' I tried replacing the above line with this line but get an error

' list all files included subfolders
 End Sub

第 5 行和第 6 行是我添加的部分,我试图打开一个文件对话框,用户可以在其中选择要处理代码的文件夹。

此外,底部开始 ListFilesInFolder 附近的注释掉的行是我尝试插入以替换它上面的行的行。

下一段代码的开始是:

   Sub ListFilesInFolder(SourceFolderName As String, IncludeSubfolders As Boolean)

所以它使用第一个子文件夹中定义的文件夹和子文件夹。

对此的任何帮助将不胜感激。

问候,

山姆

4

2 回答 2

0

您将fd作为第一个参数传递给您的ListFilesInFolder子。这个 sub 接受 aString作为第一个参数,而不是a FileDialog

这是一些示例代码,执行时将打开一个文件对话框并让用户选择一个文件夹。选择后,它会将文件夹的路径打印到B2. 如果没有选择文件夹(例如对话框关闭或取消),B2将包含文本No item selected

我认为您应该创建一个新工作簿并使用此宏。设置一个断点并遍历它,看看它实际上在做什么。然后,您可以对其进行更改以使其满足您的特定需求。

Public Sub SelectExportDestinationPath()
    Dim fldr As FileDialog
    Dim sItem As String
    Set fldr = Application.FileDialog(msoFileDialogFolderPicker)
    With fldr
        .Title = "Select a Folder"
        .AllowMultiSelect = False
        .InitialFileName = strPath
        If .Show <> -1 Then
            sItem = "No item selected"
        Else
            sItem = .SelectedItems(1)
        End If
    End With

    'if trailing slash is not found, add it
    If Len(sItem) > 0 And InStr(Len(sItem), sItem, Application.PathSeparator, vbCompareText) = 0 Then
        sItem = sItem & Application.PathSeparator
    End If

    Sheet1.Cells(2, 2).Value = sItem

    Set fldr = Nothing
End Sub
于 2013-03-19T12:58:45.430 回答
-1

确保您选择了适当的参考:

按 Alt+F11 打开 VB 编辑器。在该窗口中,选择菜单项 Tools -> References...,然后查看Microsoft Office XXX Object Library的列表
,Access 2003 为 11.0,Access 2002 为 10.0;Access 2000 为 9.0,Access 97 为 8.0 - 选择正确的。
在该引用旁边的框中打勾,然后关闭对话框。

或者,使用实际值,而不是 mso 值

msoFileDialogOpen=1
msoFileDialogSaveAs=2
msoFileDialogFilePicker=3
msoFileDialogFolderPicker=4
于 2013-03-19T12:35:55.520 回答