ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 求助!代码优化!

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-6-28 17:42 | 显示全部楼层 |阅读模式
我们每个月要写经济运行分析报告Word版本,里面涉及几百个数据,一个个敲上去太痛苦。

简单说,就是Excel里做好所需数据,全部位于某一列(有200-300个数据),然后替换Word模板中的预制文本(如C1、C2....C200...)

网上找了个代码,结果运行达不到效果。请大神帮助修改完善。



Sub ReplaceValuesInWordTemplate()
    Dim excelWorksheet As Worksheet
    Dim wordApp As Object
    Dim wordDoc As Object
    Dim templatePath As String
    Dim i As Integer
    Dim cValues(1 To 300) As Variant

    ' 获取 Excel 活动工作表
    Set excelWorksheet = ActiveSheet

    ' 从第一列开始将数值赋值给变量
    For i = 1 To 300
        cValues(i) = excelWorksheet.Cells(Application.ActiveCell.Row, i).Value
    Next i

    ' 获取 Word 模板路径
    templatePath = GetWordTemplatePath()
    If templatePath = "" Then
        MsgBox "未选择 Word 模板"
        Exit Sub
    End If

    ' 创建 Word 应用程序对象
    Set wordApp = CreateObject("Word.Application")
    wordApp.Visible = False

    ' 打开 Word 模板
    Set wordDoc = wordApp.Documents.Open(templatePath)

    ' 替换 Word 模板中的预置文本内容
    For i = 1 To 300
        With wordApp.Selection.Find
            .Text = "C" & i  ' 修改为您想要的预置文本形式,例如 "预置文本" & i
            .Replacement.Text = CStr(cValues(i))
            .Execute Replace:=2
        End With
    Next i

    ' 选择生成的 Word 文件的保存路径
    savePath = Application.GetSaveAsFilename(FileFilter:="Word Documents (*.docx), *.docx")
    If savePath = "False" Then
        MsgBox "未选择保存路径"
        Exit Sub
    End If

    ' 保存并另存为新的 Word 文件
    wordDoc.SaveAs2 savePath

    ' 关闭并退出 Word 应用程序
    wordDoc.Close SaveChanges:=False
    wordApp.Quit

    ' 释放对象变量
    Set wordDoc = Nothing
    Set wordApp = Nothing

    MsgBox "生成的 Word 文件保存成功"
End Sub

Function GetWordTemplatePath() As String
    Dim fileDialog As Object
    Set fileDialog = Application.fileDialog(msoFileDialogFilePicker)

    With fileDialog
        .Title = "选择 Word 模板"
        .Filters.Clear
        .Filters.Add "Word Documents", "*.docx"
        .AllowMultiSelect = False
        If .Show = -1 Then
            GetWordTemplatePath = .SelectedItems(1)
        Else
            GetWordTemplatePath = ""
        End If
    End With

    Set fileDialog = Nothing
End Function


TA的精华主题

TA的得分主题

发表于 2023-6-28 21:20 | 显示全部楼层
这个代码就是Ai写的,没有附件此代码也没有更改的必要。

TA的精华主题

TA的得分主题

发表于 2023-6-29 08:25 | 显示全部楼层
类似这种问题,没有附件和模拟结果,盲改代码,不过是盲人摸象,很难切合实际情况。
经济运行分析报告已经模式化了?每个月只改数据?文字分析不改了?
我觉得,应该在Excel中用公式准备好分析文本,写入Word。
常规数据分析,均可搞定。

TA的精华主题

TA的得分主题

发表于 2023-6-29 08:30 | 显示全部楼层
建议以后像这种直接扔一段代码上来的,都不用理会他。这是让大家不光给他改写代码,还要给他做模拟数据测试,不知道哪位大神会这么闲得慌。

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-6-29 09:13 来自手机 | 显示全部楼层
好的。我错了。接受大家批评。

TA的精华主题

TA的得分主题

发表于 2023-6-29 20:52 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-16 19:28 , Processed in 0.035710 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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