2016-11-30 13 views
0

テーブルの範囲をコピーして新しいブックに貼り付けたいとします。私は、他の列と行で構成された範囲を変数としてコピーしたいと思います。たとえば、列CとEを1から17,20、32から39、45の行でコピーします。その最大10回(列の場合)を実行して、コピーする列の選択が完了したら、私は出る。より明確にするために、例として、列B、D、Fを選択し、コピーする行を選択して(すべての列で同じです)、最後にコピーして新しいワークブックに貼り付けます。だから私は3回後に止まり、私が選んだものをコピーして外に出す。VBA - ランタイムエラー1004 'アプリケーション定義またはオブジェクト定義'

マイコード:

Sub Macro33() 
Dim col As String, row As String 
'Dim row As Integer 
Dim CopyRange As Range 
Set CopyRange = [A:A] 

    For i = 1 To 10 
    col = InputBox("Column number " & i & ", if finish write 'done'") 
    If col = "done" Then 
     MsgBox ("copy finished") 
     GoTo ExitIteration 
    Else 
     row = InputBox("row number to copy (max to 62), if finish write 'done'") 
     Do While row <> "done" 
     Set CopyRange = Union(CopyRange, Range(col & row & ":" & col & row)) 
     row = InputBox("row number to copy (max to 62), if finish write 'done'") 
     Loop 
    End If 
    Next 

ExitIteration: 
    CopyRange.copy 
    Workbooks.Add 
    ActiveSheet.Paste 
    Windows("Pedro.xlsm").Activate 
End Sub 

問題はラインである:

Set CopyRange = Union(CopyRange, Range(col & row & ":" & col & row)) 

私は常に、アプリケーション定義またはオブジェクト定義のエラー(エラー1004)を取得し、見つけることができませんそれのための任意の解決策! 助けてください?

+1

のようなものを試してみてください?私はあなたがこれらのlong/integer値を割り当てているように見え、それは無効な範囲アドレス文字列( 'col&row&": "&col&row')になるでしょう。 –

+2

正しいエラーラインですか?私は 'CopyRange.Copy'で複数の選択肢に使うことができないので、1004を取得します。また、 'row'と' col'は常に同じですので、 '' B2:B2 ''のような範囲になります。 – Comintern

答えて

0

ユニオンは2つ以上の範囲にしか参加できません。あなたの最初のパスでCopyRangeは何も行われないので、ユニオンメソッドは失敗します。エラーが発生させたときに、 `col`と` row`の値がどのようなものがあり

If copyrange Is Nothing Then 
    Set copyrange = Range(col & Row & ":" & col & Row) 
Else 
    Set copyrange = Union(copyrange, Range(col & Row & ":" & col & Row)) 
End If 
+3

最初のパスでは、 'copyRange'は次のようにしてA列になります:' Set CopyRange = [A:A] ' –

+0

set copyRange = [A:A]を削除してDarrenが言及したように試してみました。ちょうど小さなパラメータのために!私は多くの列と行を取ることができません – Zigouma

+0

私の間違い - 私はそれを発見し、私は私の答えを削除したいと思ったが、私はそれを指摘した別の答えを説明するために編集の途中だったと思う@DavidZemensが彼のコメントで示したもの。私は私のコートを得るでしょう:) –

関連する問題