【问题标题】:VBA code fails as soon as XML document is loaded一旦加载 XML 文档,VBA 代码就会失败
【发布时间】:2021-09-06 23:25:00
【问题描述】:

我有以下代码,它从共享位置获取一个 XML 文件并将其加载到 Excel 中。打开文件后,我会收到“运行时错误'1004':应用程序定义或对象定义错误”消息。

Sub Load_XML()

Dim xml_file_path As String
Dim file_date As String

Worksheets("Start").Activate
file_date = Range("B1").Value

xml_file_path = "Y:\mydrive\" & file_date & "-000000_RREP1002.XML"

Workbooks.OpenXML Filename:= _
        xml_file_path _
        , LoadOption:=xlXmlLoadImportToList

Dim lstrow as Integer
Dim r as Range

lstrow = ActiveSheet.UsedRange.Rows.Count 

Set r = Range("A2:AF & lstrow")

执行最后一行之前的代码错误,即 OpenXML 完成后。

请问有什么想法会导致这个问题吗?

谢谢!

【问题讨论】:

  • 阅读How to avoid using Select in Excel VBA可能会让您受益。
  • 嗨,对不起,我很抱歉,但我不确定如何避免此处的 Select 功能,因为我需要选择一个我不知道它有多少行的数据范围(它改变了一天当天)所以我这样做的方式是选择第一行,然后使用 XlDown 命令。如果我将范围声明为变量,我是否不必以某种方式确定数据集中有多少行?
  • 谢谢,我已更新我的代码以将最后一行修改为以下内容,但我仍然收到相同的错误: lstrow = ActiveSheet.UsedRange.Rows.Count Set r = Range("A2:AF & lstrow")
  • 另请注意,Excel 的行数超过了Integer 的行数。因此,您需要将行计数变量声明为Long,例如:Dim lstrow As Long。最后Range("A2:AF & lstrow") 需要是Range("A2:AF" & lstrow) 变量需要在字符串之外。

标签: excel xml vba load


【解决方案1】:

我会像下面这样重构代码。

Public Sub Load_XML()
    Dim wsStart As Worksheet
    Set wsStart = ThisWorkbook.Worksheets("Start")
 
    Dim file_date As String
    file_date = wsStart.Range("B1").Value  ' make sure all ranges have a worksheet specified!
    
    Dim xml_file_path As String
    xml_file_path = "Y:\mydrive\" & file_date & "-000000_RREP1002.XML"
    
    Workbooks.OpenXML Filename:=xml_file_path, LoadOption:=xlXmlLoadImportToList
    
    Dim lstRow As Long
    
    
    lstRow = wsStart.UsedRange.Rows.Count 
    ' I recommend a more reliable method to find the 
    
    Dim r As Range
    Set r = wsStart.Range("A2:AF" & lstRow)

我推荐一种比使用更可靠的方法来查找最后使用的行

lstRow = wsStart.UsedRange.Rows.Count

你最好用

lstRow = wsStart.Cells(wsStart.Rows.Count, "A").End(xlUp).Row

这将在A 列中找到最后使用的行。将列调整为始终包含数据且没有空白的列。

【讨论】:

    猜你喜欢
    • 2013-04-27
    • 2016-08-03
    • 1970-01-01
    • 2016-01-09
    • 1970-01-01
    • 2016-06-24
    • 1970-01-01
    • 2011-06-28
    • 2012-09-13
    相关资源
    最近更新 更多