2枚のエクセル間でデータコピーするとエラーがでる

解決


ととり  2008-03-08 01:42:45  No: 100422  IP: 192.*.*.*

1つめのエクセルの1行目を配列へ格納し
クローズ後

2つめのエクセルへコピーするVBを下記へ作ったんですが

2つめの途中で「実行時エラー1004 RANGEメゾッドは失敗しました_Global」
と出ます、何故か全くわかりません  お助け下さい。



  ww = pat & "\" & "e-data.csv"
   
    Set xlApp1 = New Excel.Application
    Set xlBook1 = xlApp1.Workbooks.Open(ww)
      

    

    'エクセルを表示します。(表示しなくてもOK)
    xlApp1.Visible = True
    

    
    
     '少し待つ
    For i = 0 To 4000000
        DoEvents
    Next
 
     
    
   'データの取り込み
   For i = 1 To 1000
   
       ww = "A" & i
       xx(i) = Range(ww)
    
   Next
    
    
    ' Quit メソッドを使って Excel を終了します。
   xlApp1.Quit
              
   ' オブジェクトを解放します。
   Set xlSheet1 = Nothing
   Set xlBook1 = Nothing
   Set xlApp1 = Nothing
    
    
      '少し待つ
    For i = 0 To 4000000
        DoEvents
    Next
    
    
     '算出シートエクセル名取得
   sys = 3
   Call system(sys)
   wk = sys
    
   ww = pat & "\" & wk
   Set xlApp = New Excel.Application
   Set xlBook = xlApp.Workbooks.Open(ww)
   Set xlSheet = xlBook.Worksheets("dat")
   
   
    
   Call log("売買サイン算出シートオープン    " & ww)
    
    xlApp.Visible = True
    
           
    
    '少し待つ
    For i = 0 To 4000000
        DoEvents
    Next
    
    
   
    
    
  'データの書き出し
   For i = 2 To 1000
   
       ww = "A" & i
       
       Range(ww) = xx(i)   ←  ここでエラー!!!!
    
   Next
    
    
    ' Quit メソッドを使って Excel を終了します。
   xlApp.Quit
              
   ' オブジェクトを解放します。
   Set xlSheet = Nothing
   Set xlBook = Nothing
   Set xlApp = Nothing

編集 削除
やじゅ  2008-03-08 02:12:30  No: 100423  IP: 192.*.*.*

値だけコピーならどうでしょう?
xx(i) = Range(ww).Value
Range(ww).Value = xx(i)

Range(ww)だと、参照するExcelが終了しているから
駄目なのかも知れませんね。

編集 削除
ととり  2008-03-08 07:57:39  No: 100424  IP: 192.*.*.*

ありがとうございます。


xx(i) = Range(ww).Value


Range(ww).Value = xx(i)


試しましたがやはり同じエラーです
「実行時エラー1004 RANGEメゾッドは失敗しました_Globalオブジェクト」

もうここで2週間も悩んでいます。お助けをーーーー。

編集 削除
やじゅ  2008-03-08 08:53:20  No: 100425  IP: 192.*.*.*

>もうここで2週間も悩んでいます。お助けをーーーー。

・ループが1つでもエラーとなるのか?それとも途中なのか
・Range(ww).Value = xx(i)ではなく、1などの固定値を入れても動作するか
・1回目のEXCELの読込みをコメントアウトし、2回目のみで動作するか

編集 削除
 2008-03-08 10:01:19  No: 100426  IP: 192.*.*.*

xlSheet.Range(ww) = xx(i)
では?

編集 削除
YK  2008-03-08 11:16:18  No: 100427  IP: 192.*.*.*

こんにちは。
多分
>Range(ww) = xx(i)   ←  ここでエラー!!!!
xlSheet.Range(ww) = xx(i)
でよいかと。

下記のようにも書けます。
    ww = pat & "\" & "e-data.csv"
   
    Set xlApp = New Excel.Application
    Set xlBook = xlApp.Workbooks.Open(ww)
    Set xlSheet = xlBook.Worksheets(1)  'シート名がわからない
    
    'エクセルを表示します。(表示しなくてもOK)
    xlApp1.Visible = True
    
    'データの取り込み
    vD = xlSheet1.Range("A1:A1000").Value
    xlBook1.Close False
              
   ' オブジェクトを解放します。
    Set xlSheet = Nothing
    Set xlBook = Nothing
    
     '算出シートエクセル名取得
    sys = 3
    Call system(sys)
    wk = sys
    
    ww = pat & "\" & wk
    Set xlBook = xlApp.Workbooks.Open(ww)
    Set xlSheet = xlBook.Worksheets("dat")
   
    Call Log("売買サイン算出シートオープン    " & ww)
    
    xlSheet.Range("A1").Resize(1000).Value = vD
    
    xlBook.Save
    xlBook.Close False
    ' Quit メソッドを使って Excel を終了します。
    xlApp.Quit
              
    ' オブジェクトを解放します。
    Set xlSheet = Nothing
    Set xlBook = Nothing
    Set xlApp = Nothing

編集 削除
通ってみた  2008-03-08 12:46:03  No: 100428  IP: 192.*.*.*

むしろ

>    For i = 0 To 4000000
>        DoEvents
>    Next

こっちが気になるのは私だけでしょうか

編集 削除
やじゅ  2008-03-08 14:03:56  No: 100429  IP: 192.*.*.*

>xlSheet.Range(ww) = xx(i)
>では?

なるほど

いきなりRangeと書いた場合、どのWorkSheetのRangeプロパティなのか
明確ではないからです。この場合、VBは勝手に解釈して、新しいWorkSheet
オブジェクトを作成して割り当てているようなのです
http://homepage1.nifty.com/rucio/main/technique/teq_15.htm

編集 削除
ととり  2008-03-08 20:43:05  No: 100430  IP: 192.*.*.*

xlSheet.Range(ww) = xx(i)


で解決しました!!!!!!!!!!!!

ここにいる皆様方に大変感謝します。神です。

2週間ぶりに先へ進めます。ありがとうございました。

編集 削除