ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1679|回复: 7

[求助] VBA代码批量提取带有控件的模板Word表格,版主大神帮修改完善代码,急求

[复制链接]

TA的精华主题

TA的得分主题

发表于 2014-4-23 19:43 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
表格数据,现有代码,要求的效果都在附近里,求大神帮看看怎么修改。谢谢啦

大赛报名表.rar

221.52 KB, 下载次数: 64

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-4-23 20:15 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2014-4-23 20:35 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-4-23 20:38 | 显示全部楼层
junhua_zhu 发表于 2014-4-23 20:35
看了代码,您已经是大神了。

先谢谢您,这些不是我写的,我是需要在此基础上改完善

TA的精华主题

TA的得分主题

发表于 2014-4-24 15:54 | 显示全部楼层
本帖最后由 zhanglei1371 于 2014-4-27 22:09 编辑

你的意思是否是提取嵌入式域中的word文档的表格?
你的表述有问题,因为从代码来看,已经是成型代码了。提供的附件中的文件打开总提示需要转换器。 360截图20140424155647765.jpg
至于表格,最后用2010打开后发现是内嵌入的控件,可以使用ole对象方法:Set olindoc = lindoc.InlineShapes(1).OLEFormat.Object来取得图像控件里表格的内容,稍作修改如下:【具体自己再修改下】
最终完成代码:
  1. Public astring As String
  2. '互函得到对话框中所有的文件路径+文件名
  3. Function filename1()  '此代码功能为列出指定文件夹中所有选取的WORD文件全路径名
  4.     Dim MyDialog As FileDialog
  5.     On Error Resume Next '忽略错误
  6.     '定义一个文件夹选取对话框
  7.     Set MyDialog = Application.FileDialog(msoFileDialogFilePicker)
  8.     With MyDialog
  9.         .Filters.Clear    '清除所有文件筛选器中的项目
  10.         .Filters.Add "所有 WORD 文件", "*.doc;*.docx", 1    '增加筛选器的项目为所有WORD文件
  11.         .AllowMultiSelect = True    '允许多项选择
  12.         If .Show = -1 Then    '确定
  13.             For Each vrtSelectedItem In .SelectedItems    '在所有选取项目中循环
  14.                 filename1 = filename1 & Chr(13) & vrtSelectedItem   '列出所有文件名
  15.             Next vrtSelectedItem
  16.         End If
  17.       
  18.     End With
  19. End Function
  20. Sub 主程序()
  21.     Dim arr
  22.     Dim arr1
  23.    
  24.     Dim astring As String
  25.     Application.ScreenUpdating = False
  26. '    On Error Resume Next '忽略错误
  27.    
  28.     Application.StatusBar = "程序正在运行,请稍等!......(看到这个,说明一切正常)"
  29.    
  30.     astring = filename1 '文件名
  31.     If astring = "" Then
  32.         MsgBox "你没有选择任何文件"
  33.         Exit Sub
  34.     Else
  35.         astring = Mid(astring, 2, Len(astring) - 1) '去掉第一个chr(13)
  36.         arr = Split(astring, Chr(13))
  37.         具体 (arr)
  38.     End If
  39.     Application.StatusBar = "程序已正确运行完毕!"
  40.     Application.ScreenUpdating = True
  41. End Sub
  42. Function 具体(arr)
  43.     Dim lindoc As Word.Document
  44.     Dim appword As Word.Application
  45.     Dim i As Long
  46.     Dim a
  47.     Dim aend As Long
  48.     Dim wordcell%, alin As String
  49.     Dim arr2, j%, k%


  50.     Set appword = GetObject(, "Word.Application")
  51.     If Err.Number > 0 Then
  52.         Set appword = CreateObject("word.Application")
  53.     End If
  54.     aend = Range("A65536").End(xlUp).Row + 1  '算得下一行行号
  55.     ReDim arr2(UBound(arr), 40)    '重定位数组,40是分工加的,可以改。改的话,要计算表格有多少个单元格

  56.     For Each arr1 In arr
  57.         arr2(i, 0) = aend - 2
  58.         Range("P3:P3").Formula = "=A1 &2"
  59.         Cells.HorizontalAlignment = xlCenter
  60.         Cells.WrapText = True  '自动换行
  61.         Cells.EntireColumn.AutoFit  '行高根据内容自动调整
  62.         Cells.EntireRow.AutoFit
  63.         k = 1
  64.         Set lindoc = appword.Documents.Open(Filename:=arr1, Visible:=True)
  65.         Application.StatusBar = "正在处理第" & i + 1 & "个文档,共" & UBound(arr) + 1 & "文档。..."
  66.         With lindoc.Tables(1).Range
  67.             For wordcell = 2 To .Cells.Count Step 2    '以2为循环
  68.                 Debug.Print .Cells(wordcell).Range.Fields.Count
  69.                 If .Cells(wordcell).Range.Fields.Count > 0 Then
  70.                     Dim f As Field, s As InlineShape
  71.                     For Each s In .Cells(wordcell).Range.InlineShapes
  72.                         If s.OLEFormat.Object.Value = True Then
  73.                             alin = s.OLEFormat.Object.Caption
  74.                             arr2(j, k) = alin
  75.                         End If
  76.                     Next
  77.                 Else
  78.                     alin = .Cells(wordcell).Range.Text
  79.                 arr2(j, k) = Mid(alin, 1, Len(alin) - 2)    '去掉后面的制表符
  80.                 End If
  81.                 k = k + 1    '转入下一列
  82.             Next
  83.         End With
  84.         lindoc.Close    '关闭文档
  85.         i = i + 1    '累加要处理的处理数
  86.         j = j + 1    '转入下一行
  87.     Next
  88.     Range("a" & aend & ":M" & aend + UBound(arr)) = arr2    '数组附值
  89.     Columns("H:H").Hidden = True
  90.     Columns("K:K").Hidden = True
  91.     Columns("L:L").Hidden = True
  92.     Columns("N:N").Hidden = True
  93.     Columns("P:P").Hidden = True
  94.     Columns("r:r").Hidden = True

  95.     appword.Quit    '退出Word
  96.     Set lindoc = Nothing
  97.     Set appword = Nothing

  98. End Function
复制代码




TA的精华主题

TA的得分主题

 楼主| 发表于 2014-4-24 20:29 | 显示全部楼层
zhanglei1371 发表于 2014-4-24 15:54
你的意思是否是提取嵌入式域中的word文档的表格?
你的表述有问题,因为从代码来看,已经是成型代码了。提 ...

您好,首先感谢您帮我修改了代码,但是我打开还是一样哦,无法提取到Word控件中的内容,现在是打不开了,一直处于运行直到无响应

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-4-24 20:32 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
这是现在的截图,无法响应了。请问不需要在代码中调用控件的属性是否选中这样吗?谢谢
QQ截图20140424202534.png
QQ截图20140424202309.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-4-25 21:50 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-1-16 19:07 , Processed in 0.024718 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表