• ベストアンサー

EXCEL→Access ADO接続

fumufumu_2006の回答

回答No.7

エラーになる行をコメントアウトにして、それ以下でデータを表示してみます。 下記のようになるようにしてみてください。 どこでエラーになりますか? ANo.5で変更して下記の部分 Worksheets("シート名").Range(Worksheets("シート名").Range("開始セル名"), Worksheets("シート名").Range("開始セル名").Offset(myRs.Fields.Count - 1, myRs.RecordCount - 1)) = myRs.GetRows をコメントアウトして、それ以下を追加してみてください 'Worksheets("シート名").Range(Worksheets("シート名").Range("開始セル名"), Worksheets("シート名").Range("開始セル名").Offset(myRs.Fields.Count - 1, myRs.RecordCount - 1)) = myRs.GetRows Dim d() As Variant d = myRs.GetRows MsgBox "フィールド数=" & UBound(d, 1) + 1 MsgBox "レコード数=" & UBound(d, 2) + 1 MsgBox "A1に入るデータ=" & d(0, 0) MsgBox "開始アドレス=" & Worksheets("シート名").Range("開始セル名").Address MsgBox "終了アドレス=" & Worksheets("シート名").Range("開始セル名").Offset(myRs.Fields.Count - 1, myRs.RecordCount - 1).Address MsgBox "コピー先範囲をselectしました" Worksheets("シート名").Select Worksheets("シート名").Range(Worksheets("シート名").Range("開始セル名"), Worksheets("シート名").Range("開始セル名").Offset(myRs.Fields.Count - 1, myRs.RecordCount - 1)).Select myRs.MoveFirst Worksheets("シート名").Range(Worksheets("シート名").Range("開始セル名"), Worksheets("シート名").Range("開始セル名").Offset(myRs.Fields.Count - 1, myRs.RecordCount - 1)) = myRs.GetRows p.s. 差し支えなければ、"開始セル名"を教えてください。

BSR123
質問者

補足

お返事ありがとうございます 開始セル名はF17にしております Private Sub CommandButton1_Click() Dim myConn As ADODB.Connection Dim myRs As ADODB.Recordset Dim mySQL As String Dim myConstr As String Dim myDBFName As String Dim myPswd As String Dim tableName As String Dim orderDate As String Dim shipDate As String orderDate = Format(DateValue(DTPicker1.Value), "mm/dd/yyyy") shipDate = Format(DateValue(DTPicker2.Value), "mm/dd/yyyy") myDBFName = "アクセスパス" myPswd = "" myConstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" _ & myDBFName & ";Jet OLEDB:Database Password=" & myPswd & ";" mySQL = "SELECT B.日付 FROM B " & _ "WHERE(((B.日付)>=#" & orderDate & "#) AND ((B.日付)<=#" & shipDate & _ "#));" Set myConn = New ADODB.Connection myConn.Open myConstr Set myRs = New ADODB.Recordset myRs.Open mySQL, myConn, adOpenKeyset Worksheets("ABC").Range(Worksheets("ABC").Range("F17"), Worksheets("ABC").Range("F17").Offset(myRs.Fields.Count - 1, myRs.RecordCount - 1)) = myRs.GetRows Dim d() As Variant d = myRs.GetRows MsgBox "フィールド数=" & UBound(d, 1) + 1 MsgBox "レコード数=" & UBound(d, 2) + 1 MsgBox "A1に入るデータ=" & d(0, 0) MsgBox "開始アドレス=" & Worksheets("ABC").Range("F17").Address MsgBox "終了アドレス=" & Worksheets("ABC").Range("F17").Offset(myRs.Fields.Count - 1, myRs.RecordCount - 1).Address MsgBox "コピー先範囲をselectしました" Worksheets("ABC").Select Worksheets("ABC").Range(Worksheets("ABC").Range("F17"), Worksheets("ABC").Range("F17").Offset(myRs.Fields.Count - 1, myRs.RecordCount - 1)).Select myRs.MoveFirst Worksheets("ABC").Range(Worksheets("ABC").Range("F17"), Worksheets("ABC").Range("F17").Offset(myRs.Fields.Count - 1, myRs.RecordCount - 1)) = myRs.GetRows myRs.Close Set myRs = Nothing myConn.Close Set myConn = Nothing Unload Me End Sub エラーは Worksheets("ABC").Range(Worksheets("ABC").Range("F17"), Worksheets("ABC").Range("F17").Offset(myRs.Fields.Count - 1, myRs.RecordCount - 1)) = myRs.GetRows ここででます よろしくお願いします

関連するQ&A

  • ADO1とADO2は意味は同じですか?

    Private Sub ADO1() Dim cn As New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source= " & CurrentProject.FullName cn.Close: Set cn = Nothing End Sub Private Sub ADO2() Dim cn As ADODB.Connection Set cn = New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source= " & CurrentProject.FullName cn.Close: Set cn = Nothing End Sub は、 Dim cn As ADODB.Connection Set cn = New ADODB.Connection を簡素化したものが Dim cn As New ADODB.Connection になるのでしょうか?

  • Access ADOについて質問です。

    Access ADOについて質問です。 以下コードでレコードセットを返す関数を使用しています。 動作的には問題ないのですが、標準モジュール内のレコードセットをClose及びNothingしていないのが気になります。 Private Sub Form_Open(Cancel As Integer) Dim rs2 As ADODB.Recordset Set rs2 = New ADODB.Recordset Set rs2 = CreateRecordSet("SELECT * FROM T_Standard;") Set Me.Recordset = rs2 rs2.Close: Set rs2 = Nothing end sub '標準モジュール Public Function CreateRecordSet(strSQL As String) As ADODB.Recordset Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = New ADODB.Connection cn.ConnectionString = "provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source=O:\標準DB\StandardBackEnd.mdb" cn.Open Set rs = New ADODB.Recordset rs.Open strSQL, cn, adOpenStatic, adLockReadOnly Set CreateRecordSet = rs ' rs.Close: Set rs = Nothing   ←この部分 ' cn.Close: Set cn = Nothing   ←この部分 End Function 標準モジュール内ではCloseやNothingしなくてもメモリの開放は行われているのでしょうか? アドバイスよろしくお願いいたします。

  • ADOでAccessファイルに接続して、ファイルの

    ADOでAccessファイルに接続して、ファイルの更新日時を取得するには? access2003です、 Private Sub 更新日時を取得() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Dim MyFileName As String MyFileName = "D:\My Documents\システム.mdb" cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source= " & MyFileName 'ここで更新日時を取得 rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub この状態で、更新日時を取得するにはどうすればいいでしょう? ご教授よろしくお願いします。

  • ADOでエクセルからSQL Serverへデータを移行するには

    エクセルvbaのADOを使って、 SQL Serverの「test」という名のデータベースの「Table_1」に 新規レコードを追加する事はできますか? エクセルからアクセスには Sub test() Dim データベース名 As String Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = New ADODB.Connection Set rs = New ADODB.Recordset cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & データベース名 rs.Open "Tテーブル1", cn, adOpenKeyset, adLockOptimistic rs.AddNew rs.Fields("フィールド1") = データ rs.Update rs.Close cn.Close Set rs = Nothing Set cn = Nothing End Sub で移行しています。 これをエクセルからSQL Serverへ移行させるにはどうすればいいのでしょうか? よろしくお願いします。

  • 【ADO】「Execute」を使うときは「Update」は不要?

    Sub test() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Desktop\test1.mdb" Set rs = New ADODB.Recordset rs.Open "テーブル1", cn, adOpenStatic, adLockPessimistic cn.Execute "DELETE FROM テーブル1" rs.Update '保存 Set rs = Nothing Set cn = Nothing End Sub を実行したとき テーブル1にデータがあるときはエラーにはならないのですが 何もデータがないときは「rs.Update」でエラーになります。 なので「Update」は消して実行していますが 「Update」がなくても「Execute」を実行した後は自動的に保存されるのでしょうか? よろしくお願いします。

  • ADO 「Set」は使ったほうがいいのでしょうか?

    Sub test1() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = New ADODB.Connection Set rs = New ADODB.Recordse End Sub Sub test2() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset End Sub この二つは同じ意味ですか? 「Set」は使ったほうがいいのでしょうか? よろしくお願いします。

  • ADOでテーブルにハイパーリンクを追加したい(アドレスと表示文字列は別)

    アクセスのtblのURLフィールドに 表示文字列→aaa URL→http://www.yahoo.co.jp/ を追加したいのですがうまくいきません。 (URLフィールドのデータ型はハイパーリンク型です) Sub test() Dim moji As String Dim URL As String Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & "C:\Documents" & "\access.mdb" Set rs = New ADODB.Recordset rs.Open "tbl", cn, adOpenStatic, adLockPessimistic moji = "aaa" URL = "http://www.yahoo.co.jp/" rs.AddNew rs("URL") = "#" & moji & "#" rs("URL") = "#" & URL & "#" rs.Update Set rs = Nothing Set cn = Nothing End Sub を実行すると 結果は 表示文字列もアドレスも「http://www.yahoo.co.jp/」になってしまいます。(そりゃそうか) どうすれば 表示文字列→aaa URL→http://www.yahoo.co.jp/ が実現できるのでしょうか? よろしくお願いします。 (ヴァージョンは2003です)

  • アクセス2007でADOは使えないのでしょうか?

    デスクトップにあるDatabase1.accdbを開いて ツールの参照設定で Microsoft ActiveX Data Objects 2.8 Library にチェックを入れ Sub a() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source= " & CurrentProject.FullName とやろうとしたら、 ************************************************************ 実行時エラー '-20147467259(80004005)': データベースの形式'C:\Users\○○\Desktop\Database1.accdb'を認識できません。 ************************************************************ となってしまいます。 再起動しても同じです。 ADOは2007では使えないのでしょうか?ご回答よろしくお願いします。

  • ADO+ODBCでテーブルに接続する時のエラー

    VB6.0(SP6)から、ADOとODBCでMySQLに接続しました。 '-------------------------------------------- Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim strCn As String Set cn = New ADODB.Connection strCn = "dsn=MySQL;uid=user;pwd=" cn.CursorLocation = adUseClient cn.Open strCn Set rs = New ADODB.Recordset rs.Open "select * from tbl;", cn, adOpenDynamic, adLockPessimistic Set DataGrid1.DataSource = rs '-------------------------------------------- データグリッドコントロールにテーブルの内容を表示させようとしているのですが、rs.Openの行でエラーが出てしまいます。エラーメッセージは「複数ステップの操作でエラーが発生しました。各状態の値を確認してください」です。 SQL文を変えて試してみると、何故かデータ型がDECIMALのカラムが含まれているとエラーになります。 DECIMALだといけないかと思うと、挿入は問題なく出来ます。 cn.Execute "insert into tbl (id,decimal_clm) values (10,900);" ご存知の方がいらっしゃいましたら宜しくお願いします。

    • ベストアンサー
    • MySQL
  • ADOでRecordsetオブジェクトをレコードソースに設定したい

    Access2000を使っています。リンクテーブルを使わずに、ODBCで繋いだDBのテーブルをフォームのレコードソースにセットしたいのですが、可能でしょうか。 宜しくお願いします。 Private Sub FormNoKansu() Dim cn as New ADODB.Connection Dim rs as New ADODB.Recordset Dim strSql as String 'ODBCでサーバーに接続 cn.ConnectionString = "ODBCでMySQLに..." ... strSql = "SELECT * FROM ..." rs.Open strSql, cn 'ここに[rs]を入れられたらと思っています Me.Recordset = "" End Sub