0

したがって、私の問題は、2 台の異なるコンピューター間で、文字列への接続が接続を開くことができなくなることです。

これが私が持っているものです:

Dim sFileName As String
Dim sFilePath As String

sFileName = "DataSource.xls"
sFilePath = "C:\test\testingData\"

Dim sConn As String
sConn = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=" & sFilePath & sFileName & ";" & _
        "Extended Properties=""Excel 8.0;HDR=Yes"";"

Dim errorObject As ADODB.Error
Set errorObject = CreateObject("ADODB.Error")

On Error GoTo ErrorDisplay:

Dim conn As ADODB.Connection

Set conn = New ADODB.Connection
conn.Open sConn

Dim rst As ADODB.Recordset '* Record Set
Set rst = New ADODB.Recordset

rst.Open sSql, conn, adOpenForwardOnly

Worksheets(1).Range("A2").CopyFromRecordset rst

sSQL = "SELECT * FROM [MySheet$] WHERE [Status] = 2 AND [DocNo] LIKE '%-A%'

このコード セクションを 1 台のコンピューターで実行すると、ビルドしたとおりに完全に実行されます。同様のコンピューターで試してみると、 「オブジェクト変数またはブロック変数が設定されていません」というエラーが表示され続けます。問題はconn.Open sConnにあることがわかりましたが、何が原因なのかわかりません。

私は解決策を探していましたが、まだうまくいったものは見つかりませんでした。

追加情報:
両方のコンピューター:
Windows 7 x64
Excel 2007 x32

なぜこれが機能しないのかについての考えはありますか?

--更新: マクロを含む Excel ファイルを 3 台目の Windows 7 コンピューターで試してみたところ、正常に動作しました。

--更新: からプログラムを実行しようとしました

sFilePath = "C:\Users\FirstName.LastName\Desktop\"

sFilePath = "C:\Users\FirstName.LastName\Desktop\Test\"

私が本当に知りたいのは、「C:\Users\FirstName.LastName\Desktop\Test\」から動作しているが、他のどれも動作していないということです???

4

2 に答える 2

0

以下のコードを試すことができます。

' Add reference to Adodb library
    Dim conn As ADODB.Connection

    Public Function CreateConnection() As Boolean
        On Error GoTo ErrorRet

        Dim X As Integer
        Dim sConn As String
        Dim sFileName As String
        Dim sFilePath As String

        X = 0
    Reconn:
        X = X + 1

        sFileName = "DataSource.xls"
        sFilePath = "C:\test\testingData\"

        sConn = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                "Data Source=" & sFilePath & sFileName & ";" & _
                "Extended Properties=""Excel 8.0;HDR=Yes"";"

        Set conn = New ADODB.Connection
        conn.Open sConn

        CreateConnection = True
        Exit Function

    ErrorRet:
        If Err.Number = -2147467259 Then
            GoTo Reconn
        Else
            If X > 5 Then
                CreateConnection = False
            Else
                GoTo Reconn
            End If
        End If
    End Function

    Sub test()

        Dim sSql As String
        Dim rst As ADODB.Recordset
        Set rst = New ADODB.Recordset

        If CreateConnection Then
            sSql = "SELECT * FROM [MySheet$]"
            rst.Open sSql, conn
            Worksheets(1).Range("A2").CopyFromRecordset rst

        End If

    End Sub
于 2013-06-12T23:40:05.000 に答える
0

プライマリ相互運用機能アセンブリが両方のコンピューターにインストールされていることを確認しますか?

于 2013-06-12T21:18:26.203 に答える