2016-05-02 81 views
0

私はゼロにしようとしているいくつかのワークシートに見出しを持つデータ(数値)がたくさんあります。これは、次のように各列で実行されます。列の最初の行の値を取得し、列のすべての行からこの値を減算します。エラー1004、オブジェクト '_Worksheet'のメソッド 'Range'が失敗しました

(:)ので、最善の方法ではないかもしれないが、VBAにImは新しい)私は一緒にこのコードを入れている

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を実行するとフリーズする?

答えて

0

過剰指定しています。置き換え:

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

で:

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

cellはすでに完全修飾です。

+0

coldataは今やセルの範囲になりますか?私は.Range関数を使うべきではありませんか? –

+0

@MofasaE 'Header'は範囲です。 'cell'は' Header'の部分なので範囲でもあります。... 'ws.'か* Range()*関数のどちらも必要ないはずです。その行 –

+0

私はそれを得た、それは私がそれを実行するとフリーズ? –

関連する問題