通过VBA打开多个非Office文件

这个macros假设在Excel文档的列表中打开多个超链接的CAD文件。 我必须使用这个列表(使用Excel单元格,而不是下拉列表)来实现我们的基础结构。

遇到第一个实例并打开第一个文件后,代码将停止。 我认为这是因为当打开一个非办公室应用程序时,macros停止,因为excel不是当时的活动应用程序。

Sub OpenCadFiles() Application.ScreenUpdating = False Application.DisplayAlerts = False Dim excel As Workbook Set excel = ActiveWorkbook Dim j As Long For j = 32 To 133 Step 1 If ActiveSheet.Cells(j, 14).Value <> "" And Rows([j]).EntireRow.Hidden = False Then URL = Cells(j, 14).Text 'ShellExecute "explorer.exe " & URL, vbNormalFocus ThisWorkbook.FollowHyperlink URL excel.Activate Else End If Next j Application.ScreenUpdating = True Application.DisplayAlerts = True End Sub 

我的假设是否正确,在excel VBA中这是不可能的? 如果没有,有没有人知道一个办法呢?

这种方法几乎可行。 由于用户可以在macros运行时更改应用程序,所以应该less量使用ActiveSheet(或任何活动)。 例如,如果macros需要很长时间并且用户在其中同时检查他或她的电子邮件,则情况尤其如此。 更好的方法是:

 Sub OpenCadFiles() Application.ScreenUpdating = False Application.DisplayAlerts = False Dim currentWorkbook As Workbook Set currentWorkbook = ActiveWorkbook Dim currentWorksheet As Worksheet Set currentWorksheet = ActiveSheet Dim URL As String Dim j As Long For j = 32 To 133 If currentWorksheet.Cells(j, 14).Value <> "" And Rows([j]).EntireRow.Hidden = False Then URL = currentWorksheet.Cells(j, 14).Text currentWorkbook.FollowHyperlink URL End If Next j Application.ScreenUpdating = True Application.DisplayAlerts = True End Sub 

通过仅使用currentWorkbook和currentWorksheet一次,您可以确保始终创build正确的引用。