使用带有多个工作簿的Select运行时错误1004

时间:2014-08-21 09:48:59

标签: excel vba excel-vba

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

  

WBSH.Range(Cells(j,“A”),Cells(lastRow - 1,“M”))。选择

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

只关注相关部分的代码片段。 这有什么不对?

'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

谢谢!

1 个答案:

答案 0 :(得分:0)

实际上,您无法在未选择/激活的工作表上的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

编辑:要清除内容(如评论中所述),您应该使用像

这样的内容
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