ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] EXCEL取值填至WORD指定表格老出错

[复制链接]

TA的精华主题

TA的得分主题

发表于 2022-10-28 13:57 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
做了一段代码,主要目的是根据条件把EXCEL中的内容放到指定的符合条件的第B张表格中,结果老是提示出错,希望高手们帮忙看下是哪儿出问题了,谢谢!
Private Sub 导至该井施工方案_Click()
  Dim filename, arr, wdapp, cel, i%, n%, kd, b, j
     filename = Application.GetOpenFilename _
        (FileFilter:="word Files (*.doc),*.doc," _
        & "Word Files (*.docx),*docx", _
        Title:="请选择需要填充数据的word文件")
    If filename = False Then Exit Sub
    If InStr(1, filename, Sheets("3施工方案1").Cells(1, 5)) = 0 Then
        i = MsgBox("非" & Sheets("3施工方案1").Cells(1, 5) & "单井提速创效施工方案,请重新选择!", 0 + 48 + 256 + 65536, "提示:")
        Exit Sub
    End If
   
    arr = Sheets("3施工方案1").[a1].CurrentRegion
    Set wdapp = CreateObject("word.application")
    wdapp.Visible = True            
      With wdapp.Documents.Open(filename)
         j = ActiveDocument.Tables.Count '表格的个数
           kd = Sheets("3施工方案1").Cells(1, 2) '取excel中第1行第2列的值,以判断是几开
        If Sheets("3施工方案1").Cells(1, 2) Like "*一开*" Then
            b = 1
            wdapp.Quit
            i = MsgBox(filename & "文件中已有对应方案!", 0 + 48 + 256 + 65536, "提示:")
            Exit Sub
           If Sheets("3施工方案1").Cells(1, 2) Like "*二开*" Then
                b = 2
             If Sheets("3施工方案1").Cells(1, 2) Like "*三开*" Then
                   b = 3
                If Sheets("3施工方案1").Cells(1, 2) Like "*四开*" Then
                     b = 4
                   If Sheets("3施工方案1").Cells(1, 2) Like "*五开*" Then
                         b = 5
        Else
            i = MsgBox(filename & "该文件中无此" & kd & "对应方案", 0 + 48 + 256 + 65536, "提示:")
            Exit Sub
            'wdapp.Quit
                   End If
                End If
             End If
           End If
        End If
        
        '以下语句是确定word表格已有数据的行数
             Tables(b).Columns(1).Select
        For Each cel In .Parent.Selection.Cells
            n = n + 1
            If cel.Range.Text = Chr(13) & Chr(7) Then   
                n = n - 1
                Exit For
            End If
        Next
            If UBound(arr) = n Then GoTo over
        
        '首先在word表格的第n行以下增加UBound(arr)-n行空行.这个行范围就是需要传送的数据行
        .Tables(b).Rows(n).Select
        .Parent.Selection.InsertRowsBelow UBound(arr) - n
        For i = n + 1 To UBound(arr)
            .Tables(b).Cell(i, 1).Range = arr(i, 1)
            .Tables(b).Cell(i, 2).Range = arr(i, 2)
            .Tables(b).Cell(i, 3).Range = Format$(arr(i, 3), "Standard")
            .Tables(b).Cell(i, 4).Range = Format$(arr(i, 4), "Standard")
        Next
over:
        .Save
        .Close wdSaveChanges
        wdapp.Quit
    End With
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-10-28 16:36 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
另外这个子过程前面还能运行,只是出错!刚才突然显示子过程或函数未定义——头大了!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-25 19:49 , Processed in 0.031450 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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