【问题标题】:Error 1004, Method 'Range' of object '_Worksheet' failed错误 1004,对象“_Worksheet”的方法“范围”失败
【发布时间】:2016-05-02 09:48:53
【问题描述】:

我有很多数据(数字)在我试图归零的几个工作表中带有标题。对每一列执行如下操作:取列中第一行的值,然后从列中的所有行中减去该值。

我已经整理了这段代码(可能不是最好的方法,但我是 VBA 新手,所以 :))

Dim ws As Worksheet
Dim Header As Range, Coldata As Range
Dim firstrow As Long
Dim cell As Range, cell2 As Range

Set ws = ActiveSheet
Set Header = ws.Range("B5:CJ5")

For Each cell In Header
    If cell Is Nothing Then Exit For
    firstrow = cell.Offset(2).Value
    ***Set Coldata = ws.Range(cell.offset(3),cell.Offset(3)).End(xlDown)***
    cell.Value = 0
    For Each cell2 In Coldata
        cell2.Value = cell2.Value - firstrow
    Next
Next
MsgBox "Done zeroing"

这个子在我正在处理的工作簿的模块下。每当我从 VBA 窗口内运行此子程序时,它都会给我在代码行的描述中说明的错误,周围有 ****。

当我尝试从工作表运行它时,它显示无法运行宏。该工作表中的宏可能不可用,或者所有宏都可能被禁用。问题是我在它工作的同一个模块中运行另一个宏,所以禁用宏是不可能的。

我错过了什么?

提前致谢!

编辑,我修好了.. 但是运行它需要这么多时间? Excel 在我运行时会冻结吗?

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    您过度指定了。替换:

    Set Coldata = ws.Range(cell.Offset(3)).End(xlDown)
    

    与:

    Set Coldata = cell.Offset(3).End(xlDown)
    

    cell 已经完全合格。

    【讨论】:

    • 所以coldata现在将是一个单元格范围?我不应该使用 .Range 函数吗?
    • @MofasaE Header 是一个范围。 cellHeader 的一部分,所以它也是一个范围......你不应该需要 ws.Range() i> 在该行中起作用。
    • 我知道了,但是当我运行它时它会冻结?
    • @MofasaE 我无法评论速度问题,这取决于您的数据。我只提到了语法上的缺陷。
    • 实际上用你的方式做只会选择最后一个单元格。我需要 Range() 函数。我测试过,你可以测试一下。我在 Range() 函数输入中发现了一个错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多