【发布时间】:2020-03-31 17:47:00
【问题描述】:
我有一个大约 10 页和 20 个表格的 Word 文件。其中一些表格有复选框。我想将这些表复制到 Excel 文件中。
以下代码将我的 Word 文件中的所有表格复制到我的 Excel 文件中:
Sub Import()
Option Explicit
Dim wb As Workbook
Dim sh As Worksheet
Dim sheet As Worksheet
Dim lzeile As Integer
Set wb = ActiveWorkbook
Set sh = wb.ActiveSheet
Set sheet = wb.Worksheets("Tabelle1")
Dim Btxt As Object
Set Btxt = CreateObject("Word.Application")
Btxt.Visible = True
Btxt.documents.Open "C:\Users\*.doc" '*=path
lzeile = 0
For i = 1 To 20
Btxt.ActiveDocument.Tables(i).Range.Copy
Application.Goto sheet.Cells(1 + lzeile, 1)
sheet.PasteSpecial Format:="HTML", Link:=False, DisplayAsIcon:=False
lzeile = sheet.Cells(Rows.Count, 1).End(xlUp).Row
lzeile = lzeile + 1
sheet.Cells(lzeile, 1) = "Tabelle" & i
Next i
Btxt.Quit
Set Btxt = Nothing
Set wb = Nothing
Set sh = Nothing
End Sub
它不会复制复选框或复选框的值(0 = 未选中 / 1 = 选中)。
我可以使用以下行将复选框的值写入我的 Excel 工作表中的单元格:
sheet.Cells(j, 10) = Btxt.ActiveDocument.Tables(i).FormFields.Item("Kontrollkästchen" & j).Result
在所有“Kontrollkästchen”(内容控件或表单字段项的德语翻译)上都有一个循环 j,因此基本上是此 Word 文件中所有表单字段项的名称。
如何获取这些表单域项的位置或识别哪个表单域项/ContentControl 在哪个表中?
我试图遍历每个表中的所有行和列,因为它们都不大于 10x10。但是我找不到一种方法来检查一个复选框是否可能在第 5 列第 5 行的表 3 中,然后将该复选框的名称读取到相同位置的 Excel 单元格中的安全值 (0 / 1)我复制的表格。
【问题讨论】:
-
这需要您提供更多信息和想法。根据最后的代码sn-p,这些是遗留表单字段;这意味着文档被作为表单保护,这可能会影响代码的工作方式。是这样吗?如果是,是否有密码保护?最直接的方法是在复制表格之前将复选框转换为您要在 Excel 中使用的值。
-
感谢您的回答。我认为是您描述的情况,但 word 文件没有密码保护。正如下面的macropod评论的那样,我会尝试用数值替换复选框,但我遇到了下面提到的“.Range”和“.Delete”命令的问题。