当前位置: 首页 > article >正文

【EXCEL_VBA_实战】多工作薄合并深入理解

工作背景:多个工作薄存在冲突的名称,需快速合并

困难点:工作表移动复制时,若有冲突的名称,会不断弹出对话框待人工确认

思路:利用代码确认弹出的对话框

关键代码:Application.DisplayAlerts = False

Sub Merge_WB()
'文件合并

Dim WBs_Source As Variant '工作薄序列
Dim s As Integer '工作薄序列下标

'选择工作薄()
WBs_Source = Application.GetOpenFilename(fileFilter:="xlsx文件(*.xls*),*.xls*", Title:="选择Excel文件", MultiSelect:=True)
If TypeName(WBs_Source) = "Boolean" Then Exit Sub

Dim WB_Source As Workbook
Dim WS_Source As Worksheet

' 打开工作簿
For s = 1 To UBound(WBs_Source)
    
    '设定当前打开工作簿名称为WB_Source 
    Workbooks.Open WBs_Source(s), UpdateLinks:=0 '不更新外部链接
    Set WB_Source = GetObject(WBs_Source(s))
    
    '逐一复制粘贴工作表
    
    '重要代码,避免工作表复制过程中名称冲突
    '下行代码可以默认确认EXCEL弹出的对话框(不用手动逐个点击)
    Application.DisplayAlerts = False
    
    For Each WS_Source In WB_Source.Sheets
        WS_Source.Copy after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
    Next
    Application.DisplayAlerts = Ture
    
    '关闭源工作簿
    WB_Source.Close SaveChanges:=False
    
    '删除当前工作薄的无效名称
    AvoidingNameInvalid WB_Source:=ThisWorkbook
    
Next

End Sub

Function AvoidingNameInvalid(WB_Source As Workbook)
'删除当前工作薄的无效名称

    Dim nmSource As Name
    
    '删除当前打开工作薄的无效名称
    For Each nmSource In WB_Source.Names
    
        If InStr(1, nmSource.RefersTo, "#REF!") > 0 Then
        
            On Error Resume Next ' 忽略错误,以防删除时出现问题
            
            Debug.Print nmSource.Name & ": deleted" '在立即窗口查看即将删除的名称
            nmSource.Delete
            
            On Error GoTo 0 ' 恢复正常的错误处理
            
        End If
        
        
    Next nmSource
    
End Function


http://www.kler.cn/a/515424.html

相关文章:

  • 解锁C#编程新姿势:Z.ExtensionMethods入门秘籍
  • 《安富莱嵌入式周报》第349期:VSCode正式支持Matlab调试,DIY录音室级麦克风,开源流体吊坠,物联网在军工领域的应用,Unicode字符压缩解压
  • HP 笔记本重新安装 Windows 11 无法启动
  • Web安全攻防入门教程——hvv行动详解
  • 【STM32】-TTP223B触摸开关
  • 62,【2】 BUUCTF WEB [强网杯 2019]Upload1
  • Vue.js 配置路由:基本的路由匹配
  • grid 布局react组件可以循数据自定义渲染某个数据 ,或插入某些数据在某个索引下
  • docker部署flask项目后,请求时总是报拒绝连接错误
  • 某大厂一面:Java 构造器是否可以被重写
  • Node.js——express中间件(全局中间件、路由中间件、静态资源中间件)
  • 【中国电信-安全大脑产品介绍】
  • 华为支付-(可选)特定场景配置操作
  • 4【编程语言的鄙视链原因解析】
  • JS-Web API -day04
  • “推理”(Inference)在深度学习和机器学习的语境
  • 【数据结构】_顺序表
  • stm8s单片机(二)外部中断实验
  • K8S中Pod控制器之Horizontal Pod Autoscaler(HPA)控制器
  • 【HTML+CSS】使用HTML与后端技术连接数据库
  • 【漏洞复现】|方正畅享全媒体新闻采编系统reportCenter.do/screen.do存在SQL注入
  • Games104——游戏中地形大气和云的渲染
  • Couchbase UI: Dashboard
  • 为什么mysql更改表结构时,varchar超过255会锁表
  • bootloader
  • 3Dgaussian-splatting部署使用流程