У меня есть следующая процедура, предназначенная для запроса объекта ListObject через ADO.
Dim cnn As ADODB.Connection
Set cnn = New ADODB.Connection
cnn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1"";"
cnn.Open
Dim tblRange As String
tblRange = quoteWK.ListObjects("quoteWKStateInfo").Range().Address(False, False)
Dim strSQL As String
strSQL = "SELECT WkStateCd FROM [quoteWK$" & tblRange & "]"
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
rs.Open strSQL, cnn, adOpenStatic, adLockPessimistic
Однако набор записей возвращает только 23 записи, когда в таблице 198. Кроме того, значение для каждого поля равно нулю(debug.print rs.Fields(0).Value
).
Я довольно часто искал в Интернете, но не вижу проблемы. Я также играл с CursorType
и LockType
. Ниже я поместил то, что я считаю важной информацией, а также изображение таблицы.
?tblRange | Q4:AG206
?strSQL | SELECT WkStateCd FROM [quoteWK$Q4:AG206]
?rs.Fields(0).Value | Null
?rs.RecordCount | 23
?rs.Fields.Count | 1 'this is correct
Кроме того, FWIW, когда я запускаю SELECT DISTINCT
для таблицы, я не получаю никаких записей. В столбце WkStateCd имеется 15 различных состояний.