Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1546 / 13645 ツリー ←次へ | 前へ→

【73679】CopyFromRecordsetメソッド nh 13/2/2(土) 8:19 質問[未読]
【73680】Re:CopyFromRecordsetメソッド ichinose 13/2/2(土) 8:52 発言[未読]
【73681】Re:CopyFromRecordsetメソッド Yuki 13/2/2(土) 8:59 発言[未読]
【73683】おかげさまで問題点は解決しましたが、あと... nh 13/2/2(土) 9:56 発言[未読]
【73684】Re:おかげさまで問題点は解決しましたが、... kanabun 13/2/2(土) 10:04 発言[未読]
【73685】Re:おかげさまで問題点は解決しましたが、... nh 13/2/2(土) 10:09 お礼[未読]
【73690】Re:おかげさまで問題点は解決しましたが、... kanabun 13/2/2(土) 18:31 発言[未読]
【73692】Re:おかげさまで問題点は解決しましたが、... nh 13/2/2(土) 18:45 お礼[未読]

【73679】CopyFromRecordsetメソッド
質問  nh  - 13/2/2(土) 8:19 -

引用なし
パスワード
   CopyFromRecordsetメソッドでちょっと悩んでいます
やりたいことはMySQL(RDB)からバックアップでExcelにデータを貼り付けることで、

Sub S_DataPaste2Sheet(ByVal kbn As Integer,ByVal sc As Long, ByVal idx As Integer)
Dim strSQL As String
Dim dataR As New ADODB.Recordset
Dim lastrow As Long
Dim i As Long

If sc <> 0 And sc < 100000 Then
 strSQL = " select vol_date,startingprice,highprice,lowprice,closingprice,volume "
Else
 strSQL = " select vol_date,startingprice,highprice,lowprice,closingprice "
End If
strSQL = strSQL & " from stock_daily_tbl where stock_code=" & sc

Cells(1, 1) = sc

Select Case kbn
 Case 1
  lastrow = Cells(Rows.Count, "A").End(xlUp).Row
  strSQL = strSQL & " and vol_date > '" & CStr(Format(Cells(lastrow, 1), "yyyy-mm-dd")) & "'"
  With dataR
   .CursorLocation = adUseClient
   .Open strSQL, MgDB, adOpenStatic, adLockReadOnly
  End With
 
  If Not dataR.EOF Then
    Range(Cells(lastrow + 1, 1)).CopyFromRecordset dataR
  End If
 Case 2
  With dataR
   .CursorLocation = adUseClient
   .Open strSQL, MgDB, adOpenStatic, adLockReadOnly
  End With
  Range("a2").CopyFromRecordset dataR
  Cells(1, 2) = structscdata(idx).sname
 End Select
  
dataR.Close
Set dataR = Nothing
End Sub

で、Range(Cells(lastrow + 1, 1)).CopyFromRecordset dataR の部分で
"'Range'メソッドは失敗しました '_Global'オブジェクト"
で落ちています

以前(というか先週)はここの部分も成功していたんですが、昨日実行してみるとここで落ちているので
余計に何故?なんですが。
dataRの部分にOLEオブジェクトがあると失敗するってのはヘルプで見たんですが、
ではどうすればいいの?です^^;

変数にはそれぞれ
kbn   1
lastrow 2833
sc   1306
idx   2
が入っていることは確認しています

【73680】Re:CopyFromRecordsetメソッド
発言  ichinose  - 13/2/2(土) 8:52 -

引用なし
パスワード
   おはようございます。


>    Range(Cells(lastrow + 1, 1)).CopyFromRecordset dataR
単に
 Cells(lastrow + 1, 1).CopyFromRecordset dataR

 これでは?

【73681】Re:CopyFromRecordsetメソッド
発言  Yuki  - 13/2/2(土) 8:59 -

引用なし
パスワード
   ▼nh さん:
こんにちは。

>で、Range(Cells(lastrow + 1, 1)).CopyFromRecordset dataR の部分で
>"'Range'メソッドは失敗しました '_Global'オブジェクト"

このようなエラーの場合はシート名の参照をすることで解決されることが
多いです。
Worksheets("Sheet1").Range(Cells(lastrow + 1, 1)
とか。

【73683】おかげさまで問題点は解決しましたが、あ...
発言  nh  - 13/2/2(土) 9:56 -

引用なし
パスワード
   お二方、回答ありがとうございます。。
それぞれ試させていただいたところ、ichinose様の方法で
成功しました。なぜRange(〜が駄目なのか判らないのですが^^;

んでYuki様の方法で
Worksheets(CStr(sc)).Range(Cells(lastrow + 1, 1)).CopyFromRecordset dataR
としたところ、
アプリケーション定義またはオブジェクト定義のエラーです
で落ちてしまいました。
参照の仕方が間違っているんですかね?

【73684】Re:おかげさまで問題点は解決しましたが...
発言  kanabun  - 13/2/2(土) 10:04 -

引用なし
パスワード
   ▼nh さん:よこから失礼

>Worksheets(CStr(sc)).Range(Cells(lastrow + 1, 1))

では Cells の親シートが指定されてません。指定がないと
(標準モジュールにコードを書いていた場合)ActiveSheet が補われます。
そのため、ActiveSheetが Worksheets(CStr(sc)) でないばあい、異なる
シートのセル範囲を参照できず、エラーになります。

【73685】Re:おかげさまで問題点は解決しましたが...
お礼  nh  - 13/2/2(土) 10:09 -

引用なし
パスワード
   ▼kanabun さん:
>▼nh さん:よこから失礼
>
>>Worksheets(CStr(sc)).Range(Cells(lastrow + 1, 1))
>
>では Cells の親シートが指定されてません。指定がないと
>(標準モジュールにコードを書いていた場合)ActiveSheet が補われます。
>そのため、ActiveSheetが Worksheets(CStr(sc)) でないばあい、異なる
>シートのセル範囲を参照できず、エラーになります。

なるほど、そういう理由なんですか。
回答していただいた皆さん、ありがとうございます。

【73690】Re:おかげさまで問題点は解決しましたが...
発言  kanabun  - 13/2/2(土) 18:31 -

引用なし
パスワード
   ▼nh さん:ごめんなさい。間違ったことをコメントしてました m(_ _)m

>>では Cells の親シートが指定されてません。指定がないと
>>(標準モジュールにコードを書いていた場合)ActiveSheet が補われます。
>>そのため、ActiveSheetが Worksheets(CStr(sc)) でないばあい、異なる
>>シートのセル範囲を参照できず、エラーになります。

> Worksheets("Sheet1").Range(Cells(lastrow + 1, 1)

で、エラーになるのは Rangeの親シートと Cellsの親シートが一致しないから
ではありませんでした。

単に、

  Range(Cells(lastrow + 1, 1)

と書いても、同じエラーになります。
これは とどのつまり、そういう書き方は許されていない、ということのようです。
(Rangeの第1引数にはセル範囲を表す文字列が指定できる;
セルそのものを引数にはできない)

第2引数を使うときには許されるんですけどね

  Range(Cells(1), Cells(1))

---
時間が経ってしまいましたが、もしご覧になったら、
訂正願います。 申し訳ありませんでした。m(_ _)m

【73692】Re:おかげさまで問題点は解決しましたが...
お礼  nh  - 13/2/2(土) 18:45 -

引用なし
パスワード
   kanabun様、追加の指摘ありがとうございます。
書いてあること、今の段階ではちょっと難しいですが^^;。
また勉強してみます。

1546 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free