2017-08-16 8 views
0

基本的には概念の証明としてコードを書いています。しかし、私が試してみても、すべてのオンライン検索にもかかわらず、なぜ私のコードが1004エラーを返すのかわからないし、それを修正する方法もわかっていない。どんな助けもありがとう。私の.Range関数が1004ランタイムエラーを返すのはなぜですか?

Worksheets("Sheet1").Range("J3:J" & LastRow).Formula = "=J2+G2" 
Worksheets("Sheet1").Range("K3:K" & LastRow).Formula = "=K2+H2" 

Do While Worksheets("Sheet1").Range("J" & c).Value <> "" 
    c = c + 1 
Loop 

MsgBox c 

問題は、私が言った問題を削除すると、すべてが正常に動作として、レンジ機能自体の呼び出しであると思われます。

答えて

0
  • Worksheets("Sheet1")のコンテキストを修飾することはできません。それは、「どこか」、すなわちワークブックの文脈において、例えばThisWorkbook.Worksheets("Sheet1")でなければならない。
  • 変数cは決して開始しません。悪い習慣。
  • また、変数LastRowを初期化することもありません。再び、悪い習慣。

マクロが起動すると、これらの2つの変数にはどのような価値があると思いますか?どのようにExcel を知っている必要がありますあなたはそれを言わないと思う?

変数を小さくして、初期値を割り当てます。

常にDim変数。また、このような事態を避けるために、どのモジュールでも最初の行にOption Explicitを使用してください。これにより、コードの健全性をチェックし、コンパイルする前にエラーを指摘します。それは私が、私のC変数はグローバル変数である

Option Explicit 

Sub stuff() 
Dim c As Long, LastRow As Long 
c = 1 
LastRow = 20 ' or use code to work out the last row 

ThisWorkbook.Worksheets("Sheet1").Range("J3:J" & LastRow).Formula = "=J2+G2" 
ThisWorkbook.Worksheets("Sheet1").Range("K3:K" & LastRow).Formula = "=K2+H2" 

Do While Worksheets("Sheet1").Range("J" & c).Value <> "" 
    c = c + 1 
Loop 

MsgBox c 
End Sub 
+0

に比較彼らが使用されている前に、すべての変数を宣言するために良い習慣を強制し、他の多くのもの

enter image description here

をピックアップします他のクラスでも同様の目的を果たしてください。しかし、私はそれがVBAの機能ではなかったことを知らないLastRowを含めていたことがわかります。また、私が理解しているように、「J3:J」はJの列全体を指し、長さの制限はありません。とにかく、 "ThisWorkbook"を追加します。 "LastRow"を削除してもエラーが表示されます。もう一度お返事ありがとうございました – Dylan

+0

私の問題が見つかりました、VBAは無限の長さで動作しません、私は制限を含める必要がありました。助けてくれてありがとう、私はそれを働かせた。 – Dylan

関連する問題