2017-10-15 2 views
1

Ich habe 2 Excel-Arbeitsmappen und ich ziehe Daten (A1: A20) von einem (WB1) zu einem anderen unter Verwendung von Makro. Ich habe das Problem, dass nur Datensätze mit Zahlen gezogen werden, während String-Datensätze nicht sind. Es scheint, dass der Feldtyp als eine Zahl betrachtet wird und nur Zahlen gezogen werden. Was sollte ich im Code ändern, um es zu lösen?Recordset: leer für String-Datensätze?

untenstehenden Link enthält die Quelldatei: https://drive.google.com/open?id=0B64seB8-qtdLYk80N3hvX2F6VGc

Private Source As Variant 

Sub Copy_Paste() 
'copy the data from the source 
Source = ThisWorkbook.Path & "\WB1.xlsx" 
GetData Source, "Sheet1", "A1:A20", Sheets("Database").Range("A1") 
End Sub 

Public Sub GetData(Source As Variant, SourceSheet As String, SourceRange As String, TargetRange As Range) 
Dim rsCon As Object 
Dim rsData As Object 
Dim szSQL As String 
Dim szConnect As String 
'Create the connection string based on excel version 
    If Val(Application.Version) < 12 Then 
     szConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ 
        "Data Source=" & Source & ";" & _ 
        "Extended Properties=""Excel 8.0;HDR=No"";" 
    Else 
     szConnect = "Provider=Microsoft.ACE.OLEDB.12.0;" & _ 
        "Data Source=" & Source & ";" & _ 
        "Extended Properties=""Excel 12.0;HDR=No"";" 
    End If 
szSQL = "SELECT * FROM [" & SourceSheet$ & "$" & SourceRange$ & "];" 

On Error GoTo SomethingWrong 
Set rsCon = CreateObject("ADODB.Connection") 
Set rsData = CreateObject("ADODB.Recordset") 
rsCon.Open szConnect 
rsData.Open szSQL, rsCon, 0, 1, 1 
' Check to make sure we received data and copy the data 
If Not rsData.EOF Then 
    TargetRange.Cells(1, 1).CopyFromRecordset rsData 
Else 
    MsgBox "No records returned from : " & Source, vbCritical 
End If 
' Clean up our Recordset object. 
rsData.Close 
Set rsData = Nothing 
rsCon.Close 
Set rsCon = Nothing 
Exit Sub 
SomethingWrong: 
    MsgBox "The file name, Sheet name is invalid of : " & Source, vbExclamation, "Error" 
On Error GoTo 0 
End Sub 

Antwort

2

Siehe hier: https://social.msdn.microsoft.com/Forums/sqlserver/en-US/ce095b10-84a4-4ae3-8944-70a2b53daa44/mixed-data-types-in-excel-column-to-oedb-destination?forum=sqlintegrationservices

Sie benötigen IMEX = 1 auf Ihre Verbindungszeichenfolgen hinzuzufügen. ZB:

szConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ 
       "Data Source=" & Source & ";" & _ 
       "Extended Properties=""Excel 8.0;HDR=No;IMEX=1"";" 

Ansonsten schätzt der Fahrer Ihre Datenspalte numerisch ist (basierend auf den ersten Reihen) und ignoriert alle nicht-numerischen Werte.

+0

Vielen Dank Tim! –