0

我的 MS Access VBA 代码遇到了一个奇怪的情况。我有一个带有几个按钮的表单,用于将数据导入来自不同 Excel 文件的表中。

在表单中,2 个按钮必须打开同一个 Excel 工作簿但不同的工作表。为了做到这一点,我在其中一个按钮中调用了以下子例程:

Sub solar_solar(showNotification As Boolean)

    Dim xlApp As Excel.Application
    Dim eexWB As Workbook
    Dim updatedDates As String
    Dim insertedDates As String

    On Error GoTo errorHandling

    ' open excel application and source file
    Set xlApp = CreateObject("Excel.Application")
    xlApp.Visible = False
    xlApp.DisplayAlerts = False
    Set eexWB = xlApp.Workbooks.Open(c_sourceFile_solar, False, True)

    ' update records
    updatedDates = updateWindOrSolarRecords(eexWB, cWindSheet, cStartRowWind, cStartColWind, c_sql_WindTable)
    ' more code ...
End Sub

另一个子例程 (wind_wind) 具有完全相同的代码来打开 excel 文件。solar_solar 子程序运行得很好,但是当我尝试运行第二个子程序时,代码没有开始执行,我收到警报:“不支持对象库功能”(Fehler beim Kompilieren:Funktionsmerkmal der Objektbibliothek nicht unerstützt)并指向该行:

Set xlApp = CreateObject("Excel.Application")

这发生在 Windows 7 MS Access 2002 中。我不明白这段代码怎么可能在一个子例程中运行良好,而不是在另一个子例程中运行良好,而实际上它实际上是相同的。有没有人经历过类似的事情?有什么建议吗?

谢谢。

4

1 回答 1

1

行标签在每个模块中只能出现一次,因为行标签范围是模块级别。您需要确保每个单行标签在任何给定模块中都是唯一的。

目前你有这样的事情:

Sub solar_solar(showNotification As Boolean)
  On Error GoTo errorHandling
  '...
  errorHandling:
  '...
End Sub

Sub wind_wind(showNotification As Boolean)
  On Error GoTo errorHandling
  '...
  errorHandling: 'This is bad!
  '...
End Sub

将行标签和 goto 语句更改为如下所示:

` Sub solar_solar(showNotification As Boolean) On Error GoTo solar_errorHandling '... solar_errorHandling: '... End Sub

Sub wind_wind(showNotification As Boolean)
  On Error GoTo wind_errorHandling
  '...
  wind_errorHandling:
  '...
End Sub

http://support.microsoft.com/kb/78335

于 2013-09-30T18:19:28.810 回答