【问题标题】:Runtime Error 1004 using Select with several workbooks将 Select 与多个工作簿一起使用时出现运行时错误 1004
【发布时间】:2014-08-21 20:06:21
【问题描述】:

我有一个 Excel 工作簿,它从另外两个工作簿中提取数据。 由于数据每小时更改一次,因此对于同一数据,该宏可能每天使用多次。 所以我只想选择这个日期期间的所有以前的数据并想删除它们。 稍后无论如何都会复制数据。 但是只要我想使用

WBSH.Range(Cells(j, "A"), Cells(lastRow - 1, "M")).Select

代码因错误 1004 应用程序定义或对象定义错误而停止。

仅跟随相关部分的代码的 sn-p。 这里有什么问题?

'Set source workbook
Dim currentWb As Workbook
Set currentWb = ThisWorkbook
Set WBSH = currentWb.Sheets("Tracking")

 'Query which data from the tracking files shoud get pulled out to the file
  CheckDate = Application.InputBox(("From which date you want to get data?" & vbCrLf &       "Format: yyyy/mm/dd "), "Tracking data", Format(Date - 1, "yyyy/mm/dd"))

    'states the last entry which is done ; know where to start ; currentWb File
With currentWb.Sheets("Tracking")
    lastRow = .Range("D" & .Rows.Count).End(xlUp).Row
    lastRow = lastRow + 1
End With

'just last 250 entries get checked since not so many entries are made in one week
j = lastRow - 250

'Check if there is already data to the look up date in the analyses sheet and if so deletes these records
Do
    j = j + 1
    'Exit Sub if there is no data to compare to prevent overflow
    If WBSH.Cells(j + 1, "C").Value = "" Then
        Exit Do
    End If
Loop While WBSH.Cells(j, "C").Value < CheckDate
If j <> lastRow - 1 Then
    'WBSH.Range(Cells(j, "A"), Cells(lastRow - 1, "M")).Select
    'Selection.ClearContents
End If

谢谢!

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    实际上,您不能在未选择/激活的工作表上使用Select 上的RangeSelect 仅适用于活动工作表。

    你应该有类似的东西

    WBSH.Activate
    

    之前

    WBSH.Range(Cells(j, "A"), Cells(lastRow - 1, "M")).Select
    

    WBSH.Range(WBSH.Cells(j, "A"), WBSH.Cells(lastRow - 1, "M")).Select
    

    看这里:Selecting and activating Cells

    注意:尽量避免使用 Select

    编辑:要清除内容(如 cmets 中所述),您应该使用类似

    WBSH.Range(WBSH.Cells(j, "A"), WBSH.Cells(lastRow - 1, "M")).Clear
    

    而不是(我想)

    WBSH.Range(Cells(j, "A"), Cells(lastRow - 1, "M")).Clear
    

    因为您范围内的单元格需要被限定。

    您可以使用Clear 删除单元格的格式和该单元格中的值,使用ClearContent 仅删除单元格中的值。

    注意你可以使用With:

    With WBSH
        .Range(.Cells(j, "A"), .Cells(lastRow - 1, "M")).Clear
    End With
    

    【讨论】:

    • 您好,感谢您的回答。我只想选择它以立即清除此范围 - 所以我尝试了 .Clear 但这也不起作用。那么有没有更聪明的方法来清除这个范围?谢谢
    • 嘿,我在选择之前尝试了激活,但仍然给出同样的错误..
    • @Johaen 我编辑了我的解决方案以添加应该可以工作的代码(未经测试,抱歉)以清除单元格。请注意,这是一个不同的问题,并且应该在 cmets 中提出了一个新问题 ^^
    • @Johaen 你是对的,我做错了,我忘记了 Cells 资格 (WBSH.) 告诉我它现在是否有效(:(如果 Clear 部分有效)跨度>
    • 是的。它有效 - 感谢您的帮助。选择的提示真的很有帮助,而且忘记处理单元格的错误:)谢谢 smagnan
    猜你喜欢
    • 1970-01-01
    • 2017-10-25
    • 1970-01-01
    • 1970-01-01
    • 2021-07-10
    • 1970-01-01
    • 2018-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多