ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[已解决] Excel生成word文件遇到的问题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2025-1-10 13:11 | 显示全部楼层 |阅读模式
本帖最后由 鱼生 于 2025-1-12 23:27 编辑

我写了一个由excel表中导出数据至word的小程序

但是遇到了这样的问题:两台不同的电脑运行结果不一样,家中的Office版本是2019,可以正常运行,在UserForm2.TextBox2中无论输入多少个字符都可以正常运行,但单位的电脑,Office版本是2016,运行时在录入相同的内容时,.Replacement.text = cellValue就会报错:运行时错误5854'’:字符串参量过长。

我在Len计算了一下,如果121个一下就能输出,288个字符就报错

我在网上查了,说好像是由于TextBox有字符限制,刚才我把单位的Office也装成了2019(但估计具体版本与家中不同),运行依旧报错
20250110_12_46_35.png 20250110_12_45_48.png 20250110_11_45_03.png

我现在能想到的方法就是回家把家中的Office版本装到单位的电脑上,但这个程序我存在U盘中,有可能在任意一台电脑上使用,这种不太现实,烦请各位老师帮我看看,到底如何避免这个问题。谢谢各位!

TA的精华主题

TA的得分主题

发表于 2025-1-11 13:51 来自手机 | 显示全部楼层
本帖最后由 lss001 于 2025-1-12 09:17 编辑

建议把Find↓
With WordApp.Selection.Find
    ..............................
End With

修改为Replace↓
Dim r$, s$, t& '**********
t = WordDoc.Words.Count
s = WordDoc.Range(0, WordDoc.Words(t).End)
r = Replace(s, "数据" & Format(i, "000"), cellValue)
WordDoc.Range(0, WordDoc.Words(t).End) = r

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2025-1-12 23:32 | 显示全部楼层
lss001 发表于 2025-1-11 13:51
建议把Find↓
With WordApp.Selection.Find
    ..............................

感谢帮助,根据您的指导,我增加了一个设置word样式的函数。解决需求
20250112_23_31_39.png

TA的精华主题

TA的得分主题

发表于 2025-1-13 12:59 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
.Replacement.Text = "" ' 不要替换的文字,只查找

TA的精华主题

TA的得分主题

发表于 2025-1-13 13:02 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
With WordApp.Selection.Find
             .Text =“数据”&Format(i,“000”) '查找被替换的文字
            .Replacement.Text = "" '不替换,只查找
            .Forward = True
            .Wrap = wdFindContinue
            .Format = False
            .MatchCase = False
            .MatchWholeWord = False
            .MatchByte = True
            .MatchWildcards = False '通配符关闭
            .MatchSoundsLike = False
            .MatchAllWordForms = False
            .Execute
            If .Found Then
                '查找定位\替换
                  Selection.TypeText RplText
               End If
     END WITH

TA的精华主题

TA的得分主题

发表于 2025-1-13 13:10 | 显示全部楼层
With WordApp.Selection.Find
            .text=“数据”&Format(i,“000") '查找被替换的文字
            .Replacement.Text = "" 只查找不替换
            .Forward = True
            .Wrap = wdFindContinue
            .Format = False
            .MatchCase = False
            .MatchWholeWord = False
            .MatchByte = True
            .MatchWildcards = False '通配符关闭
            .MatchSoundsLike = False
            .MatchAllWordForms = False
            .Execute
            If .Found Then
                  '查找定位\替换
                  Selection.TypeText RplText
             End If
            
     End With

TA的精华主题

TA的得分主题

 楼主| 发表于 2025-1-13 22:11 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
CBWSY 发表于 2025-1-13 13:10
With WordApp.Selection.Find
            .text=“数据”&Format(i,“000") '查找被替换的文字
        ...

……      
        With WordApp.Selection.Find
            .text = "数据" & Format(i, "000") '查找被替换的文字
            .Replacement.text = "" '只查找不替换
            .Forward = True
            .Wrap = wdFindContinue
            .Format = False
            .MatchCase = False
            .MatchWholeWord = False
            .MatchByte = True
            .MatchWildcards = False '通配符关闭
            .MatchSoundsLike = False
            .MatchAllWordForms = False
            .Execute
            If .found Then
                  '查找定位\替换
                  Selection.TypeText cellValue
             End If
         End With
根据您提供的,这种运行Selcection.TypeText cellValue会报错

TA的精华主题

TA的得分主题

发表于 2025-1-14 13:14 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2025-1-14 22:18 | 显示全部楼层
CBWSY 发表于 2025-1-14 13:14
WordApp.Selection.TypeText cellValue

根据您的帮助,可以正常运行,我做些改动,如果出现两个以上“数据001”,原代码只会替换第一个。修改后目前正常,明天去单位测试一下,看看单位电脑是否可行。如果可以我就可以编辑说明了,越想越开心,非常感谢!
  1. With WordApp.Selection.Find
  2.     .text = "数据" & Format(i, "000") '查找被替换的文字
  3.     .Replacement.text = "" '只查找不替换
  4.     .Forward = True
  5.     .Wrap = wdFindContinue
  6.             .Format = False
  7.             .MatchCase = False
  8.             .MatchWholeWord = False
  9.             .MatchByte = True
  10.             .MatchWildcards = False '通配符关闭
  11.             .MatchSoundsLike = False
  12.             .MatchAllWordForms = False
  13.             Do
  14.     .Execute
  15.     found = .found
  16.     If found Then
  17.         WordApp.Selection.Delete ' 删除找到的文本
  18.         WordApp.Selection.TypeText cellValue ' 插入替换文本
  19.         If WordApp.Selection.Start = WordApp.ActiveDocument.Content.End - 1 Then
  20.             WordApp.Selection.Collapse Direction:=wdCollapseStart
  21.         End If
  22.     End If
  23.             Loop While found ' 只要找到匹配项就继续循环
复制代码


TA的精华主题

TA的得分主题

发表于 2025-1-15 09:56 来自手机 | 显示全部楼层
本帖最后由 lss001 于 2025-1-15 11:37 编辑


'以下查找替换另一方式
Sub word查找替换()
    Dim ht As Object, cp As Object
    Set ht = CreateObject("htmlfile")
    Set cp = ht.parentWindow.ClipboardData
    Selection.HomeKey 6, 0
    Do
        cp.ClearData "Text"
        cp.SetData "Text", cellValue
        Selection.Find.Execute "数据" & Format(i, "000")
        If Selection.Find.Found Then
            Selection.Paste
        Else
            Exit Do
        End If
    Loop
   
    Set ht = Nothing
    Set cp = Nothing
End Sub
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-15 23:02 , Processed in 0.038405 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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