ADO schneidet Excel-Daten ab

Ich habe eine Funktion, die mit ADO ein ADODB-Recordset aus dem Inhalt eines Arbeitsblatts abruft:

Function WorksheetRecordset(workbookPath As String, sheetName As String) As adodb.Recordset

Dim objconnection As New adodb.Connection
Dim objrecordset As New adodb.Recordset

On Error GoTo errHandler

Const adOpenStatic = 3
Const adLockOptimistic = 3
Const adCmdText = &H1

objconnection.CommandTimeout = 99999999

objconnection.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
    "Data Source=" & workbookPath & ";" & _
        "Extended Properties=""Excel 12.0 Xml;HDR=YES;IMEX=1"";"

objrecordset.Open "Select * FROM [" & sheetName & "$]", _
    objconnection, adOpenStatic, adLockOptimistic, adCmdText

If objrecordset.EOF Then
    Set WorksheetRecordset = Nothing
    Exit Function
End If

objrecordset.MoveLast
objrecordset.MoveFirst

Set WorksheetRecordset = objrecordset
Exit Function

errHandler:
Set WorksheetRecordset = Nothing

End Function

Ich habe ein Problem beim Importieren von Zahlen, bei denen die Zahlen auf 1 Dezimalstelle formatiert sind, aber tatsächlich 2 Dezimalstellen haben. Dies geschieht nur, wenn der Datentyp in der Spalte gemischt ist. Zum Beispiel diese Werte:

0.03
0.05
0.08
0.13

Wenn ich sie auf 1 Dezimalstelle in dieser Tabelle setze:

+-------+-----------+
| value | something |
+-------+-----------+
| 0.0   | a         |
| 0.1   | a         |
| 0.1   | sda       |
| 0.1   | sdf       |
+-------+-----------+

dann erhält das Re-Cord-Set die richtigen 2 Dezimal-Stellenwerte. Aber wenn ich sie in diese Tabelle lege:

+---------+-----------+
|  value  | something |
+---------+-----------+
| asdfasd | asdfas    |
| 0.0     | a         |
| 0.1     | a         |
| 0.1     | sda       |
| 0.1     | sdf       |
+---------+-----------+

dann erhält das Recordset nur die 1-Dezimalstellen-Werte, z. es nimmt "0.0" statt "0.03" auf. Ich denke, das liegt daran, dass die Zeichenfolge in der ersten Zeile bewirkt, dass ADO alle Werte in den Spalten als Zeichenfolgen wie angezeigt behandelt.

Gibt es eine Möglichkeit, wie ich die Textzeichenfolge noch aufnehmen kann, aber auch die richtige Anzahl von Dezimalstellen in den Zahlenwerten erhalte?

EDIT: Gerade etwas Merkwürdiges bemerkt. Wenn ich das ausführe, während die Arbeitsmappe geöffnet ist, erhält das Re-Cord-Set die richtigen Dezimalstellen. Wenn ich es ausführe, während die Arbeitsmappe geschlossen ist, werden nur die angezeigten Dezimalstellen angezeigt.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage