• ベストアンサー

教えて下さい。m(__)m

ADODB6.1を使用し"smp2013*.xls"の"Sheet1"の列から"済"の数をカウントしたいのですが 列名に改行コード[ALT+Enter]があり、うまく取得できません。お助け下さい。 下記コードでは"0"と表示されます。(※エラー処理等は記述しておりません。) PC:Win7pro 64bit、Excel2010 32bit Sub smp_1() Dim myCon As New ADODB.Connection, myRS As New ADODB.Recordset, FileName As String Dim j As String, i As Integer Dim val_day As String val_day = "\\share01\12345\" FileName = Dir$("\\share01\12345\smp2013*.xls") myCon.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;" & _ "Data Source=" & val_day & FileName j = "select count(*) from [Sheet1$] where ""H24"" & Chr(10) & ""決済"" = '済';"  '←ここです。 myRS.Open j, myCon Worksheets(1).Range("A1").CopyFromRecordset myRS myRS.Close Set myRS = Nothing myCon.Close Set myCon = Nothing End Sub

質問者が選んだベストアンサー

  • ベストアンサー
  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.1

こちらで試した限りでは dim fld as object j = "select * from [Sheet1$] "  '←ここです。 myRS.Open j, myCon for each fld in myrs.fields debug.print fld.name next だと Alt + Enter (chr(10))は、_ アンダーバー になってますね。 j = "select count(*) from [Sheet1$] where H24_決済 = '済';" だと?

daruman_kita
質問者

お礼

助かりました。早々の回答有難うございます。アンダーバーとは・・・・・debugprintで見る方法まで回答に入れて下さって有難うございました。

関連するQ&A

  • ACCESS97で作成したmdbファイルに書き込む為の記述

     ADOを使用してExcelで作成したデータをACCESS97で作成したmdbファイルに書き込む処理を行いたいと思います。 書籍を見ながらコードを記述しているのですが、1,2,の項目については問題なく処理ができるのですが、最後のmdbファイルへの書き込み処理がどうしてもうまくいきません。 主に出力されるエラーは「現在のプロバイダはIndex機能に必要なインターフェイスをサポートしていません。」というものです。いろいろ試行錯誤したのですが解決できませんでした。 やはりACCESS97で作成したmdbファイルだからダメなのでしょうか? 原因と対処方法を教えていただければ幸いです。よろしくお願いします。以下はmdbファイルへの書き込みのサンプルコードです。 Dim myFile As String Dim myTbl As String Dim myRng As Range Dim myCon As New ADODB.Connection Dim myRS As New ADODB.Recordset Dim i As Integer myFile = ThisWorkbook.Path & "\sampleDB.mdb" myTbl = "社員" Set myRng = ThisWorkbook.Worksheets(1).Range("A1").CurrentRegion With myCon .Provider = "Microsoft.Jet.OLEDB.4.0" 'Access(Jet)用のOLE DBプロバイダを使用 .Open myFile End With myRS.Open myTbl, myCon, adOpenStatic, adLockPessimistic, adCmdTableDirect myRS.Index = "社員ID" For i = 2 To myRng.Rows.Count myRS.Seek myRng(i, 1).Value If myRS.EOF Then myRS.AddNew For j = 1 To myRng.Columns.Count myRS.Fields(myRng(1, j).Value).Value = myRng(i, j).Value Next Next myRS.Update myRS.Close Set myRS = Nothing myCon.Close Set myCon = Nothing

  • 削除、追加、更新処理に関して

    開発環境 Visual Basic 2008/ACCESS 2000 教えて下さい。 VBからACCESSを操作しようと思い、以下のような記述をしましたが、どうしても 以下のようなエラーとなってしまいます。 《記述内容》 'データベースファイル名 Dim sfina As String = "C:/sample.mdb" 'データベースパラメータ 'Dim strDatbasePara As String '参照設定をしない Dim myCon As Object, myRS As Object 'New キーワードを使用して新規ConnectionオブジェクトとRecordsetオブジェクトを生成 '**参照設定をしないのでCreateObject関数を使用する myCon = CreateObject("ADODB.Connection") myRS = CreateObject("ADODB.Recordset") '接続 myCon.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sfina) '接続先から「社員」テーブルの内容を読み込む myRS.Open("table1", myCon) Try 'テーブル全件削除(クリア) Do Until myRS.EOF myRS.Delete()    ※ ここでエラー myRS.MoveNext() Loop Catch ex As Exception Throw ex smsg = "失敗しました。" MessageBox.Show(smsg, "TEST", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) End Try 'Recordsetオブジェクトへの接続を閉じ、オブジェクトを破棄 myRS.Close() : myRS = Nothing 'データベースへの接続を切断し、オブジェクトを破棄 myCon.Close() : myCon = Nothing 《エラー内容》  現在の Recordset は更新をサポートしていません。プロバイダーか、選択された  ロックタイプの限界の可能性があります。 なぜ参照設定を使用しないかという事に関しては、他のクライアントでバージョン違い があり、動作しないという現象があった為、このObject型を使って接続しようと 考えています。 この形でも削除、追加、更新ができるような記述の仕方を教えて下さい。 よろしくお願いします。

  • EXCEL→Access ADO接続

    お世話になります 現在ADOにてEXCEL側からAccessDBにアクセスし 値を取得しているのですが 現在下方向に貼り付けしているのですが 横方向に貼り付けさせる方法はありますか? 下記参考(現状VBAです) 現状:日付で絞込みをしています 日付け絞込みをしてヒットしたものに対して下方向に貼り付けています それを横方向に貼り付けさせたいのです 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 = "Accessパス" myPswd = "" myConstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" _ & myDBFName & ";Jet OLEDB:Database Password=" & myPswd & ";" mySQL =SQL文 Set myConn = New ADODB.Connection myConn.Open myConstr Set myRs = New ADODB.Recordset myRs.Open mySQL, myConn Worksheets("シート名").Range("開始セル名").CopyFromRecordset myRs myRs.Close Set myRs = Nothing myConn.Close Set myConn = Nothing Unload Me End Sub わかる方ご教授願います

  • accessテーブルの数値をエクセルセルに移VBA

    accessファイルの abc.mdbのtable1のフィールド1のIDの数値を 現在開いているエクセルファイル Q.xlsxの A2セルに移行したいのですが エクセルのVBAにおいて Sub IDエクセルへ移行() ' 'Dim myCon As New ADODB.Connection Dim myRecordSet As New ADODB.Recordset Dim mySQL As String Dim dbFile As Variant Dim mySheetName As Variant Dim i As Integer dbFile = "C:\Users\USER\Desktop\ABC\abc.mdb" myCon.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & dbFile & "" myCon.Open mySQL = "SELECT * FROM table1" myRecordSet.Open mySQL, myCon, adOpenDynamic mySheetName = ActiveSheet.Name With Worksheets(mySheetName) .Cells(1, 2).Value = myRecordSet!ID End With myRecordSet.Close Set myRecordSet = Nothing myCon.Close Set myCon = Nothing ' ' ActiveWorkbook.Save End Sub ------------- 上記を実行すると objectがありません と myCon.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & dbFile & "" ここの部分が黄色くなってしまいます ここが さっぱり意味不明です すみません 宜しくお願い致します Microsoft ActiveX Data Objects 2.8 Library 6.1も 参照設定で チェックを入れました win10 office365

  • ADO Connection.Excuteで、INSERT出来ても、DELETE,UPDATE 出来ない

    ADOを使った、プログラムを練習しています。  Dim mycon As ADODB.Connection Dim myre As ADODB.Recordset Set mycon = CreateObject("ADODB.Connection") Set myre = CreateObject("ADODB.Recordset") mycon.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\sample7-10.mdb;" mycon.Execute "INSERT INTO 社員sample VALUES(308,'will', '営業','2007/1/1')" ※mycon.Excute "UPDATE 社員sample SET 部署名='営業' WHERE 部署名='営業'" ※mycon.Excute "DELETE FROM 社員sample WHERE 部署名='営業'" mycon.Close Set myco = Nothing ここで、INSERTは、うまくいくのですが、UPDATE,DELETE(※)が、 うまくいきません。 (コメントを使いながら、ひとつずつ、試しています)。 アクセスしているデータベースは、Accessのサンプルmdb、 ノースウィンドです。 何か、パスワードが働いているのでしょうか。 何かわかる人がいましたら、お願いします。

  • Excel VBA ADODB

    「Excel VBA ADODB」の本を手元にして、Excelのデータ処理を勉強しております。 以下の2つの例では、旨くいきますが、次の3番目では、エラーとなります。delete は、使えないのでしょうか? Const DATA_SOURCE = "Data Source=人事データ.xls;" Const DATA_SOURCE販売管理データ = "Data Source=販売管理データ.xls;" Const DATA_SOURCE商品マスタ = "Data Source=商品マスタ.xls;" Const ExProperties = "Extended Properties=Excel 8.0;" Sub SELECT文によるテーブル結合() ' 570 Dim myConn As New ADODB.Connection Dim myRS As New ADODB.Recordset Dim myField As Field, i As Long myConn.Open ConnectionString:="Provider=Microsoft.Jet.OLEDB.4.0; " & _ DATA_SOURCE販売管理データ & ExProperties ThisWorkbook.Activate Worksheets("570").Activate myRS.Open Source:="SELECT 売上No, 売上.商品コード, 商品名, 単価, 数量 FROM 売上 INNER JOIN 商品マスタ ON 売上.商品コード=商品マスタ.商品コード;", _ ActiveConnection:=myConn i = 1 For Each myField In myRS.Fields Cells(1, i).Value = myField.Name i = i + 1 Next myField Range(Cells(1, 1), Cells(1, i - 1)).Interior.ColorIndex = 35 Range("A2").CopyFromRecordset Data:=myRS myRS.Close: Set myRS = Nothing myConn.Close: Set myConn = Nothing End Sub Sub INSERT文によるレコード追加() ' 571 Dim myConn As New ADODB.Connection Dim myCmd As New ADODB.Command Dim myField As Field, i As Long myConn.Open ConnectionString:="Provider=Microsoft.Jet.OLEDB.4.0; " & _ DATA_SOURCE & ExProperties ThisWorkbook.Activate With myCmd .ActiveConnection = myConn .CommandText = "INSERT INTO 社員マスタ VALUES(11, '石川俊介', '大阪', 25);" .Execute ''' 追加は、範囲の下にデータがあってはいけない。 ''' 追加後、範囲名は広がらない。 ' .CommandText = "UPDATE 社員マスタ SET 所属支店='東京' WHERE 社員No=5;" End With Set myCmd = Nothing myConn.Close: Set myConn = Nothing End Sub Sub DELETE文によるレコード削除() ' 573 Dim myConn As New ADODB.Connection Dim myCmd As New ADODB.Command myConn.Open ConnectionString:="Provider=Microsoft.Jet.OLEDB.4.0; " & _ DATA_SOURCE & ExProperties ThisWorkbook.Activate With myCmd .ActiveConnection = myConn .CommandText = "DELETE FROM 社員マスタ WHERE 社員No=6;" .Execute End With Set myCmd = Nothing myConn.Close: Set myConn = Nothing End Sub

  • Accessから呼び出した値を比較するには?

    お世話になります。 Excel入力したデータをボタンをクリックすることによってAccessにインプットするVBAを組んでおります。  Accessにインポートするのは、できたのですが、重複データが存在していた際には、インポート時に「既に登録されてます」とエラー表示をさせたいのですが、なかなかできず手間取っておりますので、ご助力お願いします。 Private Sub DB登録_Click() 'Accessにて作成したeigyoデータベースへの登録 Const MyPath = "eigyo.mdb" Dim msg As Integer Dim MySQL As String Set MyCon = New ADODB.Connection Set MyRs = New ADODB.Recordset 'MDBへの接続情報を指定 MyCon.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source=" & MyPath MyCon.Open "provider=Microsoft.Jet.OLEDB.4.0;Data Source=eigyo.mdb" '接続を開く MySQL = "select * from 営業受託情報" MyRs.Open MySQL, MyCon, adOpenStatic, adLockOptimistic msg = MsgBox("データを追加しますか?", vbOKCancel) 'キャンセルのときは追加しない If msg = vbCancel Then Cancel = True Else '重複登録を回避 '工事名称を抽出して比較する name = Worksheets("横案").Range("d2").Value '名称を代入 sql = "select * from 営業受託情報 where 名称 & name" If sql = name Then MsgBox ("既に登録されています") Else With MyRs.AddNew MyRs!名称 = Worksheets("横案").Range("d2").Value MyRs!場所 = Worksheets("横案").Range("d3").Value MyRs.Update End With MyCon.Close '接続終了 Set MyRs = Nothing MsgBox ("データを追加しました") End If End If End Sub

  • 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しなくてもメモリの開放は行われているのでしょうか? アドバイスよろしくお願いいたします。

  • VBAでのSQL文によるエラー

    よろしくお願いします。 現在VBAでMySQLに接続し、複数のselect文を実行した結果をcsv出力したいのですが、 select文にinto outfileを入れると、 「オブジェクトが閉じている場合は、操作できません」のようなメッセージが出てしまいます。 普通のselectや、where付のselectに変えたところ、このエラーは出ませんでした。 以下サンプルコードです。 Dim cnct As ADODB.Connection Dim slct01 As ADODB.Recordset Dim slct02 As ADODB.Recordset Dim cnstSTR As String Dim sql01 As String Dim sql02 As String '接続文字列 cnstSTR = "Driver={MySQL ODBC 5.1 DRIVER};"・・・(←接続文字列は省きます) Set cnct = New ADODB.Connection cnct.Open cnstSTR Set rs = cnct.Execute("select * from table01 into outfile " & "'C:/test/test01.csv'" & " FIELDS TERMINATED BY ',';"")←ここ Set ds = cnct.Execute("select * from table2" into outfile " & "'C:/test/test02.csv'" & " FIELDS TERMINATED BY ',';"") 'テーブルのクローズ slct01.Close slct02.Close 'データベースのクローズ cnct .Close Set slct01= Nothing Set slct02= Nothing Set cnct = Nothing やはりinto outfileが原因でしょうか。。。 ソースの修正や、csv出力で他にいい方法あったら教えてください!! よろしくお願いします!!!

  • ACCESSでExcelにデータ出力、高速化

    ACCESSのVBAを使ってテーブルのデータを 既存ブックに出力し、別名で保存をしたいのですが、 どうも、処理が遅くて困っています。 改善点がありましたら教えてくださいお願いいたします。 Dim objExcel As Excel.Application Dim xlWrkbk As Excel.Workbook Dim xlWrksh As Excel.Worksheet Dim rs As DAO.Recordset Dim strFilename As String strFilename = CurrentProject.Path & "既存ブック名.XLS" Set objExcel = New Excel.Application Set xlWrkbk = objExcel.Workbooks.Open(Filename:=strFilename, ReadOnly:=True) Set xlWrksh = xlWrkbk.Worksheets("シート名") Set rs = CurrentDb.OpenRecordset("テーブル名", dbOpenSnapshot) With objExcel xlWrksh.Range("A:N").Clear xlWrksh.Range("A2").CopyFromRecordset rs xlWrkbk.SaveAs Filename:=CurrentProject.Path & "新しいブック名.xls" xlWrkbk.Close .Quit rs.Close End With Set rs = Nothing Set objExcel = Nothing Set xlWrkbk = Nothing Set xlWrksh = Nothing