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
値だけコピーならどうでしょう?
xx(i) = Range(ww).Value
Range(ww).Value = xx(i)
Range(ww)だと、参照するExcelが終了しているから
駄目なのかも知れませんね。
ありがとうございます。
xx(i) = Range(ww).Value
Range(ww).Value = xx(i)
試しましたがやはり同じエラーです
「実行時エラー1004 RANGEメゾッドは失敗しました_Globalオブジェクト」
もうここで2週間も悩んでいます。お助けをーーーー。
>もうここで2週間も悩んでいます。お助けをーーーー。
・ループが1つでもエラーとなるのか?それとも途中なのか
・Range(ww).Value = xx(i)ではなく、1などの固定値を入れても動作するか
・1回目のEXCELの読込みをコメントアウトし、2回目のみで動作するか
xlSheet.Range(ww) = xx(i)
では?
こんにちは。
多分
>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
むしろ
> For i = 0 To 4000000
> DoEvents
> Next
こっちが気になるのは私だけでしょうか
>xlSheet.Range(ww) = xx(i)
>では?
なるほど
いきなりRangeと書いた場合、どのWorkSheetのRangeプロパティなのか
明確ではないからです。この場合、VBは勝手に解釈して、新しいWorkSheet
オブジェクトを作成して割り当てているようなのです
http://homepage1.nifty.com/rucio/main/technique/teq_15.htm
xlSheet.Range(ww) = xx(i)
で解決しました!!!!!!!!!!!!
ここにいる皆様方に大変感謝します。神です。
2週間ぶりに先へ進めます。ありがとうございました。