ADO obcina dane Excela

Mam funkcję, która pobiera zestaw rekordów ADODB z zawartości arkusza przy użyciu ADO, w następujący sposób:

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

Mam problem z importowaniem danych liczbowych, gdy liczby są sformatowane do 1 miejsca po przecinku, ale w rzeczywistości mają 2 miejsca po przecinku. Dzieje się tak tylko wtedy, gdy typ danych jest mieszany w kolumnie. Na przykład te wartości:

0.03
0.05
0.08
0.13

Kiedy ustawię je na 1 miejsce po przecinku w tej tabeli:

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

następnie zestaw rekordów otrzymuje poprawne 2 miejsca po przecinku. Ale kiedy umieściłem je w tej tabeli:

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

wtedy zestaw rekordów otrzymuje tylko wartości 1 miejsca po przecinku, np. podnosi „0.0” zamiast „0.03”. Myślę, że to dlatego, że łańcuch w pierwszym wierszu powoduje, że ADO traktuje wszystkie wartości w kolumnach jako łańcuchy, tak jak jest wyświetlane.

Czy jest jakiś sposób, w jaki wciąż mogę odebrać ciąg tekstowy, ale także uzyskać prawidłową liczbę miejsc dziesiętnych w wartościach liczbowych?

EDYCJA: Właśnie zauważyłem coś dziwnego. Gdy uruchamiam to, gdy skoroszyt jest otwarty, zestaw rekordów otrzymuje poprawne miejsca dziesiętne. Jeśli uruchomię go, gdy skoroszyt jest zamknięty, otrzyma tylko wyświetlane cyfry dziesiętne.

questionAnswers(2)

yourAnswerToTheQuestion