ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

跪求大师优化一下我的 VBA

[复制链接]

TA的精华主题

TA的得分主题

发表于 2017-8-13 14:16 | 显示全部楼层 |阅读模式
各位 VBA 版块的大师们,上午一个好心人帮我设计了一个VBA  EXCEL (附件),我找到问题点了,这个是一对一的提取数据,EXCEL 单元格1= word'单元格**             可以我发现word经常型号下面一栏 是变量,有时候8个,少的时候1个, 可否修改为  匹配数据描述为:  提取  型号 芯数  数量 盘长 下面1-9  个数据(没有数据就算了)   交货地址,等等 就是word 右边单元格 内容。这样就对了。
微信截图_20170813140744.png
微信截图_20170813140900.png

新建文件夹.rar

58.57 KB, 下载次数: 14

TA的精华主题

TA的得分主题

发表于 2017-8-13 22:09 | 显示全部楼层
  1. Sub 从Word中提取数据到Excel中()
  2.   Dim WrdDocApp As Object, FSO As Object, wordFilePath, wordFilename, arr(), brr()
  3.   Application.ScreenUpdating = False
  4.   Set WrdDocApp = CreateObject("Word.Application")    '用Set关键词创建Word应用程序对象!
  5.   Set FSO = CreateObject("Scripting.FileSystemObject") '文件系统对象
  6.   Set wordFilePath = FSO.GetFolder(ThisWorkbook.Path)  '获取文件夹的路径
  7.   
  8.   wordFilename = Dir(wordFilePath & "\*.doc*") '循环查找Word,可以适应不同版本 具体提取哪类文件,根据文件扩展名进行处理
  9.   Do While wordFilename <> ""  '在目录中循环
  10.     n = 0
  11.     m = 0
  12.    
  13.   On Error Resume Next
  14.   Set WrdDoc = GetObject(wordFilePath & "" & wordFilename) '使用此代码 ,打开Word文件 视窗会自动隐藏(给人的感觉是没有打开做的操作)
  15.   
  16.   ReDim arr(1 To 20, 1 To 10) '重新定义数组arr
  17.   With WrdDoc.Tables(1) '提取Word文件内第1页的第1个表格内容
  18.   Rem 第一部分
  19.     arr(1, 1) = WorksheetFunction.Clean(.cell(1, 4).Range.Text) '合同号
  20.     arr(1, 2) = WorksheetFunction.Clean(.cell(2, 2).Range.Text) '工程名称
  21.     arr(1, 3) = WorksheetFunction.Clean(.cell(2, 4).Range.Text) '销售单号
  22.     arr(1, 8) = WorksheetFunction.Clean(.cell(3, 2).Range.Text) '交货地址1
  23.   x = .Rows.Count
  24.   For i = 5 To x
  25.         y = WorksheetFunction.Clean(.cell(i, 1).Range.Text)
  26.         If y <> "收货人" Then
  27.         n = n + 1
  28.         ReDim Preserve brr(1 To 4, 1 To n)
  29.         brr(1, n) = WorksheetFunction.Clean(.cell(i, 2).Range.Text)
  30.         brr(2, n) = WorksheetFunction.Clean(.cell(i, 3).Range.Text)
  31.         brr(3, n) = WorksheetFunction.Clean(.cell(i, 4).Range.Text)
  32.         brr(4, n) = WorksheetFunction.Clean(.cell(i, 5).Range.Text)
  33.         Else
  34.             m = i
  35.             Exit For
  36.         End If
  37.         
  38.   Next
  39.    
  40.     arr(1, 9) = WorksheetFunction.Clean(.cell(m, 2).Range.Text) '收货人1
  41.     arr(1, 10) = WorksheetFunction.Clean(.cell(m, 4).Range.Text) '联系电话1
  42.    
  43.     Rem 第二部分
  44.     arr(n + 1, 8) = WorksheetFunction.Clean(.cell(m + 1, 2).Range.Text) '交货地址2
  45.     arr(n + 1, 9) = WorksheetFunction.Clean(.cell(x, 2).Range.Text) '收货人2
  46.     arr(n + 1, 10) = WorksheetFunction.Clean(.cell(x, 4).Range.Text) '联系电话2

  47.   For i = m + 3 To x - 1
  48.         y = WorksheetFunction.Clean(.cell(i, 1).Range.Text)
  49.         If y <> "收货人" Then
  50.         n = n + 1
  51.         ReDim Preserve brr(1 To 4, 1 To n)
  52.         brr(1, n) = WorksheetFunction.Clean(.cell(i, 2).Range.Text)
  53.         brr(2, n) = WorksheetFunction.Clean(.cell(i, 3).Range.Text)
  54.         brr(3, n) = WorksheetFunction.Clean(.cell(i, 4).Range.Text)
  55.         brr(4, n) = WorksheetFunction.Clean(.cell(i, 5).Range.Text)
  56.         Else
  57.             Exit For
  58.         End If
  59.         
  60.   Next
  61.   
  62.    
  63.     End With
  64.     myrows = Cells(Rows.Count, 4).End(3).Row + 1
  65.     Range("A" & myrows).Resize(n, 10) = arr '把提取的内容赋值给Excel工作表
  66.     Range("D" & myrows).Resize(n, 4) = Application.Transpose(brr)
  67.     Erase arr  '重新初始化arr数组
  68.     Erase brr
  69.     With Range("A2:J" & Cells(Rows.Count, 4).End(3).Row) '设定格式
  70.     .Font.Size = 11: .Borders.Value = 1
  71.     .HorizontalAlignment = xlCenter
  72.     .VerticalAlignment = xlCenter
  73.     End With
  74.     Range("H2:H" & Cells(Rows.Count, 4).End(3).Row).HorizontalAlignment = xlLeft  '设定格式
  75.     Columns("A:J").EntireColumn.AutoFit '自动栏宽
  76. '  WrdDoc.Close    ' 关闭Word文件
  77.     WrdDocApp.Quit  '关闭Word程序
  78.     Set WrdDocApp = Nothing '释放Word程序
  79.     wordFilename = Dir
  80.   Loop '结束循环
  81. Application.ScreenUpdating = True
  82. End Sub
复制代码
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-18 14:54 , Processed in 0.027646 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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