在Word VBA中将记录集加载到数组中时遇到Null值会引发无效使用Null将ADODB连接与EXCEL结合使用

问题描述

最重要的是,代码是用Word VBA编辑器编写的,并且是从Word .docm文件获取的。

从这个Word .docm文件中,我正在连接到用作客户端数据库的Excel文件(使用ADODB连接),并且正在从该文件(工作表名称=“数据”)中读取整个工作表到动态数组,稍后将进行搜索

Option Explicit

Private Sub UseADOSelect()

Dim connection As New ADODB.connection
Dim recSet As New ADODB.Recordset    'All the results of the query are placed in a record set;
Dim exclapp As Excel.Application
Dim exclWorkbk As Excel.Workbook
Dim mySheet As Excel.Worksheet
Dim wordDoc As Word.Document
Dim cntCntrl As ContentControl
Dim strPESELfromWord As String
Dim strQuery As String
Dim intWiersz As Integer
Dim intRemainder As Integer
Dim intRow As Integer
Dim arraySize As Long       'prevIoUsly was integer =  -32,768 to 32,767
Dim strSexDigit As String
Dim strArray() As String    'Dim strArray() As Long    'Dim strArray() As String
Dim i As Long

Set wordDoc = Word.ActiveDocument
Debug.Print wordDoc

'Set mySheet = exclapp.ActiveWorkbook.Sheets("sample")
'Debug.Print mySheet.Name

strPESELfromWord = Trim(Selection.Text)
Debug.Print strPESELfromWord
Word.Application.Visible = True

strSexDigit = Mid(strPESELfromWord,10,1)      'Extract 10th digit from PESEL number
Debug.Print strSexDigit
intRemainder = strSexDigit Mod 2
Debug.Print intRemainder

connection.Open "Provider = Microsoft.ACE.OLEDB.12.0;Data Source = X:\Roesler\Excel\FW 1\custdb.xlsm;" & _
                "Extended Properties=""Excel 12.0 Macro;HDR=YES;IMEX=1;"";"                 'Now it works
                                                              
'strQuery = "SELECT * From [Simple$]"   '[Simple$] is the table name; in this case it's the sheet name;
strQuery = "SELECT * From [data$]"     '[data$]   is the table name; in this case it's the sheet name;

当从Excel文件中读取记录集时,我需要将其写入VBA数组中。

我遇到的问题是:当我遍历记录集中的值时,在将此记录集加载到Word VBA编辑器中的数组时,运行时错误94-无效使用从记录集中将第一个Null值绘制到数组中时,Null会弹出。

'recSet.Open strQuery,connection
recSet.Open strQuery,connection,adOpenStatic        ' Or specify adOpenStatic in the Open method directly.
Debug.Print " RecordCount = " & recSet.RecordCount             'https://www.geeksengine.com/article/recordcount-ado-recordset-vba.html
Debug.Print recSet.EOF      'Returns a value that indicates whether the current record position is after the last record in a Recordset object.
                            'At the moment the value is "False".
Debug.Print recSet.BOF      'The BOF property returns a Boolean value that indicates if the current position in a Recordset object is just before the first record.
                            'If True,you are at BOF. If False,you are at or beyond the first record,but still inside the Recordset.
                            
If recSet.BOF = True Then
   recSet.MoveFirst
End If
                            
'recSet.Open strQuery,connection
'recSet.CursorType = adOpenStatic
Debug.Print " RecordCount = " & recSet.RecordCount             'https://www.geeksengine.com/article/recordcount-ado-recordset-vba.html

arraySize = recSet.RecordCount   'I wanted to assign total number of records to arraySize variable to use it later in ReDim statement.
Debug.Print arraySize

ReDim strArray(1 To arraySize)
For i = 1 To arraySize
   strArray(i) = recSet(i)    'Here the code crashes when the first Null value is encountered,during loading data into the array.
Next i


intRow = 2



'  For Each cntCntrl In ActiveDocument.ContentControls
'    If cntCntrl.Title = "02KlientPelneImie" Then cntCntrl.Range.Text = objExcel.Sheets("data").Cells(intWiersz,4)
'    If cntCntrl.Title = "02KlientNrDowodu" Then cntCntrl.Range.Text = objExcel.Sheets("data").Cells(intWiersz,9)
'  Next

我想怎么办。 我通过与EXCEL的ADODB连接连接的Excel工作表中有空单元格。我对此无能为力。

当我内部具有Null值时,如何将工作表加载到记录集中,然后将此记录集加载到Word VBA中的数组中?

enter image description here

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)