ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 求大佬帮忙把2楼的代码优化下!!!

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-10-12 20:58 | 显示全部楼层 |阅读模式
本帖最后由 mxdaidcc 于 2018-10-14 18:01 编辑

问题一:复制值和格式,列宽,行高 等等 除了不复制公式

想把  表1  A1 复制到  表2的 A1
表1  A2 B2 复制到  表2的 B1
表1  的   K2 : R(K列最后一个有数值的单元格的那个行)  的 区域    复制到  表2的 A2

求大佬帮帮忙

问题二:把EXCEL 表格里的数据 用

.ActiveDocument.Tables(i).Cell(j + 4, 1).Range = Sheets("基本信息").Cells(w, 11)

这个 复制到 word里时  0.25 会变成  .25    0会消失该怎么解决!!


问题三:0基础学习了2星期左右,附件里 自己凑得代码,运行时间长,而且会 崩溃,大佬帮忙优化下 代码见2楼  代码是我参考论坛然后凑的,其中很多意思不懂,大佬们莫要见怪!!  




自己凑得代码,0基础学习了2星期左右,大佬帮忙优化下.rar

58.2 KB, 下载次数: 4

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-10-12 22:18 | 显示全部楼层

大佬帮忙优化下代码

本帖最后由 mxdaidcc 于 2018-10-14 15:51 编辑
  1. Sub 生成word()
  2.     Dim 新表名称, 行
  3.     Dim Word对象 As New Word.Application, 当前路径, 新报表的名字, i, j, q, w
  4.     Dim Str1, Str2
  5.     Dim tt  As Single
  6.     tt = Timer
  7.     当前路径 = ThisWorkbook.Path
  8.     最后行号 = Worksheets("基本信息").Range("k65536").End(xlUp).Row

  9.     新表名称 = Worksheets("基本信息").Cells(2, 1) & "-" & Cells(1, 1)

  10.      
  11.     On Error Resume Next
  12.     If Sheets(新表名称) Is Nothing Then                   '判断新表是否已经存在
  13.     Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = 新表名称
  14.     Worksheets("基本信息").Range("A1").Copy Worksheets(新表名称).Range("A1")
  15.     Worksheets("基本信息").Range("A2,B2").Copy Worksheets(新表名称).Range("A2")
  16.     Worksheets(新表名称).Range("B2").HorizontalAlignment = xlHAlignLeft
  17.     Worksheets("基本信息").Range("K2:R" & 最后行号).Copy
  18.     Worksheets(新表名称).Range("A3").PasteSpecial Paste:=xlPasteValues
  19.     Worksheets("基本信息").Range("K2:R" & 最后行号).Copy
  20.     Worksheets(新表名称).Range("A3").PasteSpecial Paste:=xlPasteFormats
  21.     Else
  22.         MsgBox "工作表: " & 新表名称 & "已存在."
  23.     End If

  24.     FileCopy 当前路径 & "\模版.doc", 当前路径 & "" & 新表名称 & ".doc" '复制模版
  25.     新报表的名字 = 当前路径 & "" & 新表名称 & ".doc"
  26.     Worksheets(新表名称).Range("B1") = "报告路径:" & 新报表的名字
  27.    
  28.     With Word对象
  29.         .Documents.Open 新报表的名字
  30.         .Visible = flase
  31.         
  32.         Str1 = "数据1"
  33.         Str2 = Sheets("基本信息").Cells(1, 2)
  34.         .Selection.HomeKey Unit:=wdStory '光标置于文件首
  35.         If .Selection.Find.Execute(Str1) Then '查找到指定字符串
  36.            .Selection.Font.Color = wdColorAutomatic '字符为自动颜色
  37.            .Selection.Text = Str2 '替换字符串
  38.         End If
  39.         
  40.         Str1 = "数据2"
  41.         Str2 = Sheets("基本信息").Cells(2, 1)
  42.         .Selection.HomeKey Unit:=wdStory '光标置于文件首
  43.         If .Selection.Find.Execute(Str1) Then '查找到指定字符串
  44.            .Selection.Font.Color = wdColorAutomatic '字符为自动颜色
  45.            .Selection.Text = Str2 '替换字符串
  46.         End If
  47.         
  48.       .ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument '设置位置在正文
  49.       .Selection.WholeStory '全选
  50.       .Selection.Copy '复制
  51.       If 最后行号 > 20 Then
  52.          For i = 1 To (最后行号 - 2) / 18 '复制页
  53.             .Selection.EndKey Unit:=wdStory '光标置于文件尾
  54.             .Selection.InsertBreak Type:=wdPageBreak '分页
  55.             .Selection.PasteAndFormat (wdPasteDefault) '粘贴
  56.          Next i
  57.       End If
  58.       
  59.     q = (最后行号 - 2) / 18 + 1
  60.     w = (j + 2) + (i - 1) * 18
  61.     For i = 1 To q
  62.         For j = 1 To 18 '填写表格数据
  63.             .ActiveDocument.Tables(i).Cell(j + 4, 1).Range = Sheets("基本信息").Cells(w, 11)
  64.             .ActiveDocument.Tables(i).Cell(j + 4, 2).Range = Sheets("基本信息").Cells(w, 12)
  65.             .ActiveDocument.Tables(i).Cell(j + 4, 3).Range = Sheets("基本信息").Cells(w, 13)
  66.             .ActiveDocument.Tables(i).Cell(j + 4, 4).Range = Sheets("基本信息").Cells(w, 14)
  67.             .ActiveDocument.Tables(i).Cell(j + 4, 5).Range = Sheets("基本信息").Cells(w, 15)
  68.             .ActiveDocument.Tables(i).Cell(j + 4, 6).Range = Sheets("基本信息").Cells(w, 16)
  69.             .ActiveDocument.Tables(i).Cell(j + 4, 7).Range = Sheets("基本信息").Cells(w, 17)
  70.             .ActiveDocument.Tables(i).Cell(j + 4, 8).Range = Sheets("基本信息").Cells(w, 18)
  71.         Next j
  72.     Next i
  73.       End With
  74.       Word对象.Documents.Save
  75.       Word对象.Quit
  76.       Word对象.Documents.Open 新报表的名字
  77.       Set Word对象 = Nothing
  78.       
  79. MsgBox "已生成“" & 新报表的名字 & "”!" & vbCrLf & "用时" & Timer - tt & "秒!", 0 + 48 + 256 + 0, "提示:"
  80.    
  81. End Sub
复制代码


TA的精华主题

TA的得分主题

发表于 2018-10-12 22:40 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-10-12 23:47 | 显示全部楼层
skyzxh 发表于 2018-10-12 22:40
分两次,先把值复制过去,再把格式复制过去

复制格式的代码是什么

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-10-13 07:39 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2018-10-13 07:52 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
mxdaidcc 发表于 2018-10-12 23:47
复制格式的代码是什么

录制宏就知道了

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-10-13 10:17 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-10-13 12:11 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
11111111111111111111

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-10-13 13:24 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-10-13 15:18 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-17 02:56 , Processed in 0.028400 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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