0

我目前正在编写一个小型 VBA 工具,以便根据里面的一些数据快速对文件进行排序。例如,我有一个“待排序”文件夹,里面有一些文件,比如说“File1.xls,File2.xls”等等。

要读取“FileX.xls”中的数据,我使用ExecuteExcel4Macro(范围和文件名设置正确),然后我可以使用这些数据来应用过滤器并在其他目录中移动文件。

我的代码适用于本地文件,但是当我尝试在我的服务器上运行它时(该工具旨在对存储在服务器上的文件进行排序),当我使用ExecuteExcel4Macro.

从这里,我必须选择:

  • 在运行宏之前手动打开每个文件(我有 250 个文件要排序,所以......)
  • 在导致插件崩溃的对话框上按取消(类型不匹配错误)

这是困扰我的代码部分

For Each fsoFile In fsoParentFol.Files

    'I only want to sort .xls files
    If Right(fsoFile.Name, 4) = ".xls" Then
        'On active le workbook actuel
        strRef = "'[" & fsoFile.Name & "]" & "Sheet1" & "'!"

        'this is the data I want to retrieve ... and this is where the dialog pops up
        projectName = ExecuteExcel4Macro(strRef & rngProjectName.Address(1, 1, xlR1C1))
        
        'some more code goes here but is irrelevant
    End If
Next fsoFile           

所以我的问题是:如何禁用此对话框,或者,如果这是一个坏主意,是否有其他干净的方法(我不想打开每个工作簿,即使屏幕更新关闭)可以解决我的问题?

DisplayAlerts = False不能解决问题。再一次,没有这个对话框,程序运行良好。

我当然在发帖之前先尝试在网上研究我的问题,但即使是这样的主题也不能解决我的问题。

4

2 回答 2

1

将 UNC 路径更改为使用服务器映射到的驱动器号的路径:

因此,例如,更改您的字符串以生成:

[P:\Some_Folder\myfile.xls]Sheet1!A1

代替:

[\\my-server\Some_Folder\myfile.xls]Sheet1!A1

您可以尝试使用替换功能来实现这一点:

strRef = "'[" & Replace(fsoFile.Name, "\\", "P:\") & "]" & "Sheet1" & "'!"
于 2016-01-07T11:23:54.927 回答
0

我会使用更像这样的代码:

projectName = Workbooks.Open("\\srv1\folder\Book1.xlsx").Sheets("Sheet1").Range("a1")
Workbooks("Book1.xlsx").Close

这也适用于映射的网络驱动器。

于 2016-01-05T18:00:33.930 回答