ExecuteExcel4Macro & 更新值对话框
ExecuteExcel4Macro & update values dialog box
我目前正在编写一个 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
没有解决问题。再一次,程序 运行 没有这个对话框也很好。
在发帖之前,我当然会先尝试在线研究我的问题,但即使 this one 这样的主题也无法解决我的问题。
我会更像这样使用代码:
projectName = Workbooks.Open("\srv1\folder\Book1.xlsx").Sheets("Sheet1").Range("a1")
Workbooks("Book1.xlsx").Close
这也适用于映射的网络驱动器。
将 UNC 路径更改为使用服务器映射到的驱动器盘符的路径:
因此,例如,将您的字符串更改为生成:
[P:\Some_Folder\myfile.xls]Sheet1!A1
而不是:
[\my-server\Some_Folder\myfile.xls]Sheet1!A1
您可以尝试使用替换函数来实现:
strRef = "'[" & Replace(fsoFile.Name, "\", "P:\") & "]" & "Sheet1" & "'!"
我目前正在编写一个 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
没有解决问题。再一次,程序 运行 没有这个对话框也很好。
在发帖之前,我当然会先尝试在线研究我的问题,但即使 this one 这样的主题也无法解决我的问题。
我会更像这样使用代码:
projectName = Workbooks.Open("\srv1\folder\Book1.xlsx").Sheets("Sheet1").Range("a1")
Workbooks("Book1.xlsx").Close
这也适用于映射的网络驱动器。
将 UNC 路径更改为使用服务器映射到的驱动器盘符的路径:
因此,例如,将您的字符串更改为生成:
[P:\Some_Folder\myfile.xls]Sheet1!A1
而不是:
[\my-server\Some_Folder\myfile.xls]Sheet1!A1
您可以尝试使用替换函数来实现:
strRef = "'[" & Replace(fsoFile.Name, "\", "P:\") & "]" & "Sheet1" & "'!"