首页 > 解决方案 > 使用 VBA 在 MS Access 中编目字文件数据

问题描述

我被要求创建一个 MS 访问数据库,该数据库对存储在 MS Word 文件中的所有数据进行编目。Word 文件具有包含数据的表。
例如,“客户名称:”| 客户资料 | “日期” | 日期数据

我使用 MS Access 使用对象 Word.Application 和 Word.Document 循环和打开每个文件。然后我在 i 上使用第二个循环,使用此命令获取单元格中的值:worddoc.Tables(tableindex).Range.Cells(i).Range.Value

但是,如果单元格包含一个下拉框,我没有得到下拉框中的值;我得到一个方形字符。

1)有没有办法确定单元格中的数据类型?大多数时候它是文本、文本框或下拉框。2)当它是一个下拉框时,我如何从中获取数据?

我希望我提供了足够的信息。请询问您是否需要更多信息。

标签: vbams-accessms-word

解决方案


你得到的小方块是单元格标记的结尾。在表格单元格中,它的功能有点像最后一段。所以......你必须在做任何其他事情之前摆脱它。

以下是一些示例测试代码,仅查看表格中的一个单元格,但将其用作指南以适应您循环各个单元格的过程。我的另一个警告是,在这个例子中,我把你提到的“教科书”从字面上看。如果您的意思是文本框内容控件,那么您可以忽略此示例的该部分。

Dim rng As Range, cc As ContentControl, shp As Shape
Set rng = ActiveDocument.Tables(1).rows(1).Cells(1).Range
rng.MoveEnd wdCharacter, -1
If rng.ContentControls.Count > 0 Then
    Set cc = rng.ContentControls(1)
    Debug.Print cc.Range.Text
ElseIf rng.ShapeRange.Count > 0 Then
    If rng.ShapeRange(1).Type = msoTextBox Then
        Set shp = rng.ShapeRange(1)
        If shp.TextFrame.HasText Then
            Debug.Print shp.TextFrame.TextRange.Text
        End If
    End If
Else
    If Not rng.Text = vbNullString Then
        Debug.Print rng.Text
    End If
End If

推荐阅读