微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将下拉表单域值从 Word 表导入 Excel

如何解决将下拉表单域值从 Word 表导入 Excel

我正在使用保存为 .docx 的受密码保护的完整 Word 模板,但我没有密码。

我想将所有表单域输入导入 Excel。通过指示文本在表格中的位置来导入文本有效,但我找不到导入下拉值的方法。这是我到目前为止的代码

Sub extractData()

Application.ScreenUpdating = False
    
Dim wd As New Word.Application
Dim doc As Word.Document
Dim sh As Worksheet
Dim fileName As Variant

fileName = Dir("C:\Users\...\*.docx")

While fileName <> ""
Set doc = wd.Documents.Open(ActiveWorkbook.Path & "\" & fileName,AddToRecentFiles:=False,Visible:=False)
Set tbls = doc.Tables
Set sh = ActiveSheet
Dim FmFld As Word.FormField
wd.Visible = False

    lr = sh.Cells(Rows.Count,1).End(xlUp).Row + 1
        sh.Cells(lr,1).Value = Application.WorksheetFunction.Clean(tbls(1).Rows(1).Cells(1).Range.Text)
        sh.Cells(lr,2).Value = Application.WorksheetFunction.Clean(tbls(1).Rows(1).Cells(2).Range.Text)
        sh.Cells(lr,3).Value = Application.WorksheetFunction.Clean(tbls(1).Rows(2).Cells(1).Range.Text)
        sh.Cells(lr,4).Value = Application.WorksheetFunction.Clean(tbls(1).Rows(2).Cells(2).Range.Text)
        sh.Cells(lr,5).Value = Application.WorksheetFunction.Clean(tbls(1).Rows(3).Cells(1).Range.Text)
        sh.Cells(lr,6).Value = Application.WorksheetFunction.Clean(tbls(1).Rows(4).Cells(1).Range.Text)
        sh.Cells(lr,7).Value = Application.WorksheetFunction.Clean(tbls(1).Rows(6).Cells(2).DropDown.Value)
        sh.Cells(lr,8).Value = Application.WorksheetFunction.Clean(tbls(1).Rows(6).Cells(3).Range.Text)
        sh.Cells(lr,9).Value = doc.FormFields(15).DropDown.Value
       
        doc.Close SaveChanges:=False
        fileName = Dir()
Wend

wd.Quit
Set doc = nothing
Set sh = nothing
Set wd = nothing

Application.ScreenUpdating = True

End Sub

遗憾的是,下拉菜单“书签/名称”似乎不存在。第一个似乎是认的“dropdown1”,但其他的没有命名,可能是因为被复制和粘贴。

我能够使用索引号导出下拉值,但这取决于人们是否添加了更多或更少的文本,并且我无法手动检查每个表单并计算在第一个表单之前有多少表单域下拉...这是在这个例子中起作用的:

sh.Cells(lr,7).Value = doc.FormFields(13).DropDown.Value

Word 表单中带有表单域的表格大致如下所示:

<html>
<head>
<style>
table,th,td {
  border: 1px solid black;
  border-collapse: collapse;
}
th,td {
  padding: 5px;
  text-align: left;    
}
</style>
</head>
<body>

<table style="width:100%">
  <tr>
    <td>Q1: text input 1</td>
    <td colspan="2">Q2: text input 2</td>
  </tr>
  <tr>
    <td>Q3: text input 3</td>
    <td colspan="2">Q4: text input 4</td>
  </tr>
  <tr>
    <td colspan="3">Q5: bullet point text inputs (approx. 5)</td>
  </tr>
  <tr>
    <td colspan="3">Q6: bullet point text inputs (approx. 5)</td>
  </tr>
  <tr>
    <td>text</td>
    <td>text</td>
    <td>text</td>
  </tr>
  <tr>
    <td>text</td>
    <td><b>Q7: dropdown 1</b></td>
    <td>Q8: text input</td>
  </tr>
  <tr>
    <td>text</td>
    <td><b>Q9: dropdown 2</b></td>
    <td>Q10: text input</td>
  </tr>
    
</table>

</body>
</html>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。