当前位置: 首页 > 知识库问答 >
问题:

读取许多行到记录集中,因为在Excel文件中的B列中有使用过的单元格,使用ADODB与EXCEL连接;

劳仲渊
2023-03-14

最重要的是,代码是在Word VBA编辑器中编写的,并由Word提供。docm文件。

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

问题是,在这个Excel文件中,A列中有一个索引号,该索引号是手动预填充的,使用序列填充,最多可填充70000行。同时,从B列开始的实际数据只填充了182行。

所以问题是:如何只检索记录集中有效填充的行数(B列中最后使用的行),这是从这个文件中提取出来的,当然不需要打开文件。并使用ADODB连接EXCEL。

我问这个问题是因为在代码后面,我需要记录集中的行数来将其写入一个动态数组(使用ReDim语句),稍后我需要它来搜索并自动填充word文件。

这是我到目前为止得到的代码:(宏将从Word文件中取出)

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 Integer
Dim strSexDigit As String
Dim strArray() As String
Dim i As Integer

Set wordDoc = Word.ActiveDocument
Debug.Print wordDoc

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 [data$]"     '[data$]   is the table name; in this case it's the sheet name;
'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 " 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)
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文件(工作表(“数据”)中有182个有效填充的行——在列B或C中没有空白单元格,直到列B或C中的第一个空单元格,现在将是“B183”和“C183”,但是随着新的客户数据填充后续行,这些列中的第一个空单元格会发生变化。

但永远不会有这样的情况,B列和C列中除了第一个空单元格之外,还有空白单元格。

共有1个答案

宁兴修
2023-03-14

连接字符串表示列的名称位于单元格的第一行。

假设“column”被称为mycolumn

那你需要改变

strQuery = "SELECT * From [data$]"

strQuery = "SELECT * From [data$] WHERE mycolumn <> ''"

或者你可能需要

strQuery = "SELECT * From [data$] WHERE mycolumn <> '' AND mycolumn IS NOT NULL"
 类似资料:
  • 问题内容: 我正在尝试使用Apache POI读取旧的(2007年前和XLS前)Excel文件。我的程序转到行的末尾并进行迭代,直到找到不为null或为空的值。然后迭代回去几次并获取这些单元格。该程序可以很好地读取Office 2010中制作的XLSX和XLS文件。 我收到以下错误消息: 在行: 从代码: 其中是文档中最后一个不为空或为null的单元格。当我尝试打印不为空或为null的第一个单元格

  • 问题内容: 我正在尝试将多行文本写入Excel单元格。 但是,当我打开文档时,我只看到一行,直到我双击它进行编辑,然后它变成了两行。为什么会这样呢?谢谢 问题答案: 您需要设置行高以容纳两行文本。 您需要设置以获取新行。试试这个:这是wb 。

  • 我正在尝试使用Apache POI来读取旧的(2007年之前和XLS)Excel文件。我的程序走到行的末尾并进行迭代,直到找到非null或非空的内容。然后它迭代几次并获取这些细胞。该程序可以很好地读取Office 2010中的XLSX和XLS文件。 我收到以下错误消息: 排队的时候: 根据代码: 其中是文档中最后一个不为空或null的单元格。当我尝试打印第一个不为空或null的单元格时,它不会打印

  • 问题内容: 我想在VBA中查询Excel工作表 并 指定条件。 简单的查询可以完美地工作,但是我不知道如何添加WHERE子句。 我尝试过,但随后它抱怨缺少参数。 这是完整的代码: 问题答案: 在您的连接字符串中,您说 这意味着不管第一行包含什么内容,都将被视为标题。如果要使用F1,F2等,请说

  • 问题内容: 我有包含多个工作表的Excel文件,每个工作表看起来都像这样(但更长): 第一列实际上是四个垂直合并的单元格。 当我使用pandas.read_excel阅读此内容时,我得到一个看起来像这样的DataFrame: 如何让Pandas理解合并的单元格,或者快速方便地删除NaN并按适当的值分组?(一种方法是重置索引,逐步查找值并将NaN替换为值,传入天数列表,然后将索引设置为该列。但是似乎

  • 我创建了一个excel文件,并在(0,0)[行,单元格]中插入了一个新值作为Hello。第二次打开同一个excel文件,同一张表,用另一个字符串值更新了同一个(0,0)单元格。 代码正在成功运行,没有任何错误,但文件已损坏,无法打开。 代码 在调试模式下,在设置第二个值之后。SetCellValue(第二个值);我可以通过Debug查看该值。打印(cell. ToString());并且该值在控制