【问题标题】:Access/Excel VBA Failing访问/Excel VBA 失败
【发布时间】:2018-07-31 05:12:00
【问题描述】:

我有一个 Access 数据库,该数据库运行一个宏,该宏打开一些 Excel 文件并格式化工作表以备日后使用。这段代码一直运行良好,直到我的公司应用了最新的 Office 更新,现在我收到一个编译错误“找不到方法或数据成员”并且它正在发生在线...

wDate = Mid(XlSheet.Range("B4").Value, 13, Len(XlSheet.Range("B4").Value))

挑出“范围”。我无法弄清楚为什么会发生这种情况。感谢您提供任何帮助。完整代码如下...

Function ExcelProcess()
'Variables to refer to Excel and Objects
Dim MySheetPath As String
Dim Xl As Excel.Application
Dim XlBook As Excel.Workbook
Dim XlSheet As Excel.Worksheet
Dim MyFile As Variant
Dim MySheet As Variant
Dim wBook As Variant
Dim wSheet As Variant
Dim wDate As Variant

Dim rng As Range
Dim cel As Range


MyFile = Array("w1.xlsx", "w2.xlsx", "w3.xlsx")
MySheet = Array("T2_IND", "APPR_IND", "SLG_APPR_IND", "SLG_IND", "C2A_IND", "C3_IND", "C4_IND", "T3_IND", "T4_IND", "C2B_IND")

For Each wBook In MyFile
    ' Tell it location of actual Excel file
    MySheetPath = "\\fs1\Training\CSC_Training_Ops\Training Only\Buzzard\Pulled Data\" & wBook

    'Open Excel and the workbook
    Set XlBook = GetObject(MySheetPath)

    'Make sure excel is visible on the screen
    XlBook.Windows(1).Visible = True

    For Each wSheet In MySheet
        'Define the sheet in the Workbook as XlSheet
        Set XlSheet = XlBook.Worksheets(wSheet)
        wDate = Mid(XlSheet.Range("B4").Value, 13, Len(XlSheet.Range("B4").Value))

        XlSheet.Range("A15").FormulaR1C1 = "WE_Date"
        If XlSheet.Range("A16").Value <> "No data found" Then
            Set rng = XlSheet.Range(XlSheet.Range("A16"), XlSheet.Range("A16").End(xlDown).Offset(-1))

            For Each cel In rng.Cells
                With cel
                    .FormulaR1C1 = wDate
                    .NumberFormat = "m/d/yyyy"
                End With
            Next cel
        End If
        XlSheet.Rows("1:14").Delete Shift:=xlUp
        XlSheet.Range("A1").End(xlDown).EntireRow.Delete Shift:=xlUp

    Next
    XlBook.Close SaveChanges:=True
Next

'Clean up and end with worksheet visible on the screen
Set Xl = Nothing
Set XlBook = Nothing
Set XlSheet = Nothing
End Function

【问题讨论】:

  • 您也添加了所有适当的参考资料?
  • @adidashawn6:是的,Access 中的引用(工具...引用)可能需要更新以引用 Office 的更新版本
  • 您是否 100% 确定硬编码的工作表名称完全按原样存在于您打开的工作簿中?如果工作表名称看起来合法,请查找前导或尾随空格。如果该数组包含工作簿中每个工作表的名称,请考虑使用 For Each 循环迭代工作表,而不是通过 Worksheets 集合中的硬编码名称提取它们。
  • 感谢我们的香蕉人和 QHarr。它是 Microsoft Office 16 对象库。感谢您的帮助!!!
  • @MathieuGuindon 我测试了这个理论,这种情况会出现“运行时错误'9':下标超出范围:'错误。

标签: excel vba ms-access


【解决方案1】:

代码本身没有任何明显的问题。

由于这与您更新办公室时中断,我敢猜测这是参考的问题。

  1. 转到工具->参考->
  2. 删除对 Excel 对象库的所有引用
  3. 保存并关闭宏工作表(应该没有必要,但只需几秒钟)
  4. 重新打开
  5. 添加仅引用最新版本的 Microsoft Excel 1X.0 对象库

如果这不能解决问题,您可能需要在办公室进行维修

  1. 控制面板 -> 添加删除程序
  2. 找到 Microsoft Excel(或办公套件)
  3. 运行修复

最后建议尝试后期绑定。删除对Microsoft Excel Object Library 的引用并将您的声明更新为:

Dim Xl As Object
Dim XlBook As Object
Dim XlSheet As Object
Set Xl = CreateObject("Excel.Application")

希望这会有所帮助!

【讨论】:

  • 如果wSheetChart 工作表的名称,那么您将在尝试将Chart 分配给Workbook 时遇到类型不匹配 错误局部变量,而不是让 index out of bounds 尝试在工作表集合中查找图表工作表。 XlSheet 必须声明为 As Chart 才能工作,然后其余代码将毫无意义,因为您不能在 Chart 表上调用 .Range。不,显然 OP 意味着使用Worksheet,因此使用Worksheets 集合是完全合适的。你答案的底部没有意义。
  • 投赞成票 - 我看不出这里还有什么问题。警告:AFAIK 你不能选择你早期绑定到哪个版本。如果“重置”引用没有帮助,那么唯一的解决方案可能是后期绑定 Excel 类型库调用(即彻底删除引用并在声明中用 Object 替换所有 Excel 类型,以及任何使用的 Excel 常量/枚举通过它们的基础整数值。
  • 切换到后期引用通常是一个不错的方法。如果你有 DEV 和 PROD 版本的数据库,你还可以使用条件编译在你的开发机器上使用早期绑定(这样你就得到了 Intellisense 等),并在你的生产版本上使用后期绑定,这样你就不用遇到版本问题。
【解决方案2】:

您是否有可能从 Office 14.0 升级到 15.0 或 16.0?点击 Alt+F11 > Tools References 并在打开的窗口中查找错误。搜索正确的参考并单击它。正如其他人建议的那样,考虑使用一些后期绑定方法重写代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-11
    • 1970-01-01
    • 2023-01-31
    • 1970-01-01
    • 1970-01-01
    • 2016-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多