2010-12-07 8 views
1

最後の行と列がわからない範囲のセルをコピーしようとしています(ただし、変数)。残念ながら、私が範囲を参照しようとしている方法は、変数を使用するときに実行時エラー1004(アプリケーション定義またはオブジェクト定義エラー)を与えているのですが、なぜそれを理解できません。以下のコードのサンプルは次のとおりです。範囲(Excel VBA)をコピーしようとするとランタイムエラー '1004'が返される

Dim wkbk As Workbook 
Dim copy_rng As Range 
... 
Set copy_rng = wkbk.Worksheets("Payable").Range("A1:Y3500") 
Set copy_rng = wkbk.Worksheets("Payable").Range(Cells(1, 1), Cells(last_row_pay, last_col_pay)) 

最初のSetステートメントは、単に一例であり、それが正常に動作します(私は適切に定義されwkbk知っていて、それが「支払い」のワークシートを見つけることです)。誰かがなぜ2番目のSet文が機能しないのか分かりますか?構文の問題はありますか? (デバッグ中に、last_row_payとlast_col_pay変数にカーソルを置くと、有効な値(それぞれ1533と25)が表示されます。

答えて

4

Cells()関数がアクティブなワークシートで機能し、混乱する可能性があるため、resize関数を使用してください。

Dim wkbk As Workbook 
Dim copy_rng As Range 
Dim pay_rows As Integer ,pay_columns As Integer 
... 
pay_rows = 3500 
pay_columns = 23 
Set copy_rng = wkbk.Worksheets("Payable").Range("A1").Resize(pay_rows,pay_columns) 

ここで、A1は、データの左上のセルです。

+0

非常によく見つかった! "Payable"以外のシートを有効にすることで問題を再現できます。 –

+0

私はこれを試しましたが、実行時エラー '438'が表示されます。オブジェクトはこのプロパティまたはメソッドをサポートしていません。私はそれを見ていきますが、もしあなたが思考を持っているなら私に知らせてください。ありがとう!!! – rryanp

+0

投稿を修正しました。私はデータの左上のセルを参照するのを忘れていました。 – ja72

0

コピーしようとしている範囲は、セルの連続したセットである場合、私はハードは任意の行/列カウントをコーディングすることなく、範囲のサイズを取得する最も簡単な方法を見つけるには、使用することですCurrentRegion

Sub GetCurrentRange 

Dim rng as range 
Set rng = Worksheets("Payable").Range("A1").CurrentRegion 

End Sub 

 A  B  C 
1 10 20 30 
2 40 50 60 
3 70 80 90 

Sub GetCurrentRange 

Dim rng as range 
Set rng = Worksheets("Payable").Range("A1").CurrentRegion 

Debug.Print rng.Address //Prints $A$1:$C$3 

End Sub 
:ここ

利点はCurrentRegionは、このあなたのための

例がそうであるように、あなたのデータセットに行/列を追加する場合でも、あなたは新しい列と行の制限を行うワーキング気にする必要がないということです

0
with Worksheets("Payable") 
    copy_rng = .Range(.Cells(1, 1), .Cells(last_row_pay, last_col_pay)).Value 
end with 

以上の行が、仕事...

0

私は同じ問題を抱えていました。セルプロパティと範囲プロパティの両方を修飾する必要があります。

Set copy_rng = wkbk.Worksheets("Payable").Range(Cells(1, 1), wkbk.Sheets("Payable").Cells(last_row_pay, last_col_pay))

関連する問題