通过VBA

时间:2015-08-31 19:22:58

标签: excel vba file loops hyperlink

此宏假设在Excel文档的列表中打开多个超链接的CAD文件。我必须使用此列表(使用excel单元格,而不是下拉列表)用于我们的基础架构。

在满足第一个实例并打开第一个文件后,代码将停止。我认为这是因为当打开非办公应用程序时,宏会停止,因为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中是不可能的?如果没有,有没有人知道这样做的方法?

1 个答案:

答案 0 :(得分:1)

这种方法几乎可行。您应该谨慎使用ActiveSheet(或Active),因为用户可以在宏运行时更改应用程序。例如,如果宏需要很长时间并且用户在此期间检查他或她的电子邮件,则尤其如此。更好的方法是:

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,您可以保证始终正确引用。