|
楼主 |
发表于 2018-10-12 22:18
|
显示全部楼层
大佬帮忙优化下代码
本帖最后由 mxdaidcc 于 2018-10-14 15:51 编辑
- Sub 生成word()
- Dim 新表名称, 行
- Dim Word对象 As New Word.Application, 当前路径, 新报表的名字, i, j, q, w
- Dim Str1, Str2
- Dim tt As Single
- tt = Timer
- 当前路径 = ThisWorkbook.Path
- 最后行号 = Worksheets("基本信息").Range("k65536").End(xlUp).Row
- 新表名称 = Worksheets("基本信息").Cells(2, 1) & "-" & Cells(1, 1)
-
- On Error Resume Next
- If Sheets(新表名称) Is Nothing Then '判断新表是否已经存在
- Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = 新表名称
- Worksheets("基本信息").Range("A1").Copy Worksheets(新表名称).Range("A1")
- Worksheets("基本信息").Range("A2,B2").Copy Worksheets(新表名称).Range("A2")
- Worksheets(新表名称).Range("B2").HorizontalAlignment = xlHAlignLeft
- Worksheets("基本信息").Range("K2:R" & 最后行号).Copy
- Worksheets(新表名称).Range("A3").PasteSpecial Paste:=xlPasteValues
- Worksheets("基本信息").Range("K2:R" & 最后行号).Copy
- Worksheets(新表名称).Range("A3").PasteSpecial Paste:=xlPasteFormats
- Else
- MsgBox "工作表: " & 新表名称 & "已存在."
- End If
- FileCopy 当前路径 & "\模版.doc", 当前路径 & "" & 新表名称 & ".doc" '复制模版
- 新报表的名字 = 当前路径 & "" & 新表名称 & ".doc"
- Worksheets(新表名称).Range("B1") = "报告路径:" & 新报表的名字
-
- With Word对象
- .Documents.Open 新报表的名字
- .Visible = flase
-
- Str1 = "数据1"
- Str2 = Sheets("基本信息").Cells(1, 2)
- .Selection.HomeKey Unit:=wdStory '光标置于文件首
- If .Selection.Find.Execute(Str1) Then '查找到指定字符串
- .Selection.Font.Color = wdColorAutomatic '字符为自动颜色
- .Selection.Text = Str2 '替换字符串
- End If
-
- Str1 = "数据2"
- Str2 = Sheets("基本信息").Cells(2, 1)
- .Selection.HomeKey Unit:=wdStory '光标置于文件首
- If .Selection.Find.Execute(Str1) Then '查找到指定字符串
- .Selection.Font.Color = wdColorAutomatic '字符为自动颜色
- .Selection.Text = Str2 '替换字符串
- End If
-
- .ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument '设置位置在正文
- .Selection.WholeStory '全选
- .Selection.Copy '复制
- If 最后行号 > 20 Then
- For i = 1 To (最后行号 - 2) / 18 '复制页
- .Selection.EndKey Unit:=wdStory '光标置于文件尾
- .Selection.InsertBreak Type:=wdPageBreak '分页
- .Selection.PasteAndFormat (wdPasteDefault) '粘贴
- Next i
- End If
-
- q = (最后行号 - 2) / 18 + 1
- w = (j + 2) + (i - 1) * 18
- For i = 1 To q
- For j = 1 To 18 '填写表格数据
- .ActiveDocument.Tables(i).Cell(j + 4, 1).Range = Sheets("基本信息").Cells(w, 11)
- .ActiveDocument.Tables(i).Cell(j + 4, 2).Range = Sheets("基本信息").Cells(w, 12)
- .ActiveDocument.Tables(i).Cell(j + 4, 3).Range = Sheets("基本信息").Cells(w, 13)
- .ActiveDocument.Tables(i).Cell(j + 4, 4).Range = Sheets("基本信息").Cells(w, 14)
- .ActiveDocument.Tables(i).Cell(j + 4, 5).Range = Sheets("基本信息").Cells(w, 15)
- .ActiveDocument.Tables(i).Cell(j + 4, 6).Range = Sheets("基本信息").Cells(w, 16)
- .ActiveDocument.Tables(i).Cell(j + 4, 7).Range = Sheets("基本信息").Cells(w, 17)
- .ActiveDocument.Tables(i).Cell(j + 4, 8).Range = Sheets("基本信息").Cells(w, 18)
- Next j
- Next i
- End With
- Word对象.Documents.Save
- Word对象.Quit
- Word对象.Documents.Open 新报表的名字
- Set Word对象 = Nothing
-
- MsgBox "已生成“" & 新报表的名字 & "”!" & vbCrLf & "用时" & Timer - tt & "秒!", 0 + 48 + 256 + 0, "提示:"
-
- End Sub
复制代码
|
|