Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 7 Professional : Excel 2013)
オートメーションエラー
投稿日時: 18/02/25 16:44:46
投稿者: TI

こんにちは。
 
VBAにてSQL文を使用したいと思い、いろいろなホームページ等を参考に以下のように記述を
しました。
 
しかし、
-2147467259(80004006)
オートメーションエラー
不明なエラーです。
 
なってしまいます。
今日1日原因を調べてみたのですが、どうにもわからず質問をさせていただきました。
アドバイスをお願いします。
 
また、こちらのファイルを利用予定のパソコンにはExcel2010が入っております。
2010と2013での違いがありましたら、こちらも教えてください。
 
'**************************************************************************************************
'Excelファイルへの接続
'**************************************************************************************************
Sub Con_Open_Excel(ByVal Path As String)
Dim FileName As String
 
    'Set Con = New ADODB.Connection
    Set Con = CreateObject("ADODB.Connection")
     
    FileName = Path
     
     
     
    'Excelのバージョンで分岐をする
    '2013からは「Microsoft.ACE.OLEDB.12.0」を使用する
    Select Case Application.Version
        Case Is = "14.0"
            Con.Provider = "MSDASQL"
             
            Con.ConnectionString = _
                    "Driver={Microsoft Excel Driver (*.xls)};" & "DBQ=" & FileName & "; ReadOnly=False;"
             
            Con.Open
        Case Is = "15.0"
            Dim EXProperties As String
            Dim constr As String
             
            EXProperties = """Excel 12.0;HDR=No;"""
     
            constr = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                     "Data Source=" & FileName & ";Extended Properties=" & EXProperties
             
            Con.ConnectionString = constr
            Con.Open
             
' Con.Provider = "Microsoft.ACE.OLEDB.12.0"
' Con.Properties("Extended Properties") = "Excel 12.0;HDR=YES;IMEX=1"
'
' 'Con.ConnectionString = _
' "Driver={Microsoft.ACE.OLEDB.12.0};" & "DBQ=" & FileName & "; ReadOnly=False;"
'
' Con.Open FileName
    End Select
     
     
    Con.CursorLocation = 3
     
End Sub

回答
投稿日時: 18/02/25 20:03:49
投稿者: i-brown

ご参考までに、自分が使っているコードをお送りします。
(古いエンジンは考慮していません。元ネタを忘れてしまいました。)
 

' 新しいコネクションオブジェクトを作成して返す
Public Sub ConnectToFile( _
        ByRef cn As ADODB.Connection, _
        ByVal path As String)
        
    On Error GoTo Err
    Set cn = New ADODB.Connection
    
    ' Access 2010のエンジンを使用
    ' http://www.microsoft.com/ja-jp/download/details.aspx?id=13255

    Dim ext As String: ext = Right(path, Len(path) - InStrRev(path, "."))
    ext = LCase(ext)
    
    cn.Provider = "Microsoft.ACE.OLEDB.12.0"
    If ext = "mdb" Or ext = "accessdb" Then
        ' Accessの場合、特殊なプロパティ設定は不要
    ElseIf ext = "xls" Then
        cn.Properties("Extended Properties") = "Excel 8.0;HDR=Yes;IMEX=1;"
    ElseIf ext = "xlsx" Then
        cn.Properties("Extended Properties") = "Excel 12.0 Xml;HDR=Yes;IMEX=1;"
    ElseIf ext = "xlsm" Then
        cn.Properties("Extended Properties") = "Excel 12.0 Macro;HDR=Yes;IMEX=1;"
    Else
        cn.Properties("Extended Properties") = "Excel 12.0;HDR=Yes;IMEX=1;"
    End If
    
    cn.Open path
    Exit Sub
    
Err:
    MsgBox Err.Description, vbCritical, "ConnectToFile"
    Set cn = Nothing
    Err.Clear
End Sub

 
エラー発生時に関数内でメッセージボックスを出しているのは、今思えばいまいちです。

回答
投稿日時: 18/02/25 20:19:51
投稿者: i-brown

連投済みません。
 
スレ主さんは

 Con.Provider = "MSDASQL" 

でODBC用のドライバを使おうとしているようですが、JETドライバを使わないのですか?
ODBCを使う場合はコントロールパネルでODBCデータソースの設定が必要なのではないでしょうか?
(自信なし)
 
そちらのアプリケーションの事情は存じませんが、今となってはMicrosoft.ACE.OLEDB.12.0を使えば良いと思います(Office 2003をまだお使いなら考慮は必要ですが)。
 
以下、ご参考です。
 
Microsoft OLE DB Provider for ODBC
https://msdn.microsoft.com/ja-jp/library/cc426827.aspx
 
Microsoft OLE DB Provider for Microsoft Jet
https://msdn.microsoft.com/ja-jp/library/cc426819.aspx
 
付録 A: プロバイダ
https://msdn.microsoft.com/ja-jp/library/cc426812.aspx

投稿日時: 18/02/26 20:04:13
投稿者: TI

ご回答、ありがとうございます。
 
ご提示いただいたコードを一部修正して、無事やりたいことを実現することができました。
 
また、困ったときはお願いします。