excel学习库

excel表格_excel函数公式大全_execl从入门到精通

Excel VBA「代码更正」文件合并工具代码更正/窗体控件布局调整

本文于2023年9月15日首发于本人同名其他平台,更多文章案例请搜索关注!

内容提要

  • 代码调试的基本方法

大家好,我是冷水泡茶,今天在论坛上看到一个求助:

如何将同一文件夹内多个工作簿多个工作表合并到一个工作表内?

这个功能我们分享过啊:【Excel VBA 文件合并神器】,正准备把它发到论坛上,转念一想,还是测试一下吧。

他要求合并多个工作表,我记得我们的代码中是按照合并多个工作表写的,但是没有测试,当时测试的时候用的都是只有一个工作表的文件。所以,还是先测试一下吧,等验证没有问题再发。

于是就搞了几个多工作表的Excel文件,这一测试就有问题了。一会报错,一会是合并不完整。

赶紧打开CombineExcel过程检查代码,看了几遍,感觉没有问题啊:

If FileExtn = ".xlsx" Or FileExtn = ".xls" Then    Set wb = Workbooks.Open(file.path)    For Each ws In wb.Sheets        If t = 0 Then            ws.UsedRange.Copy CombineWs.Cells(1, 1)        Else            lastRow = ws.Cells(Rows.Count, 1).End(xlUp).Row            lastCol = ws.Cells(1, Columns.Count).End(xlToLeft).Column            If blnCkb Then                Set rng = ws.Range(Cells(2, 1), Cells(lastRow, lastCol))            Else                Set rng = ws.Range(Cells(1, 1), Cells(lastRow, lastCol))            End If            rng.Copy CombineWs.Cells(CombineWs.Cells(Rows.Count, 1).End(xlUp).Row + 1, 1)        End If        t = t + 1    Next    wb.Close savechanges:=FalseEnd If

当然,运行结果不对,那肯定是有问题的,经过一番折腾,终于找到问题:

第4~5行,这里是复制第一张表,但只复制了一个表头。

第6~15行,复制其他工作表,内容缺失,是没有把要复制的工作表激活。

后来把代码修改如下:

If FileExtn = ".xlsx" Or FileExtn = ".xls" Then    Set wb = Workbooks.Open(file.path)    wb.Activate    For Each ws In wb.Sheets        ws.Activate        lastRow = ws.Cells(Rows.Count, 1).End(xlUp).Row        lastCol = ws.Cells(1, Columns.Count).End(xlToLeft).Column        If t = 0 Then            Set rng = ws.Range(Cells(1, 1), Cells(lastRow, lastCol))            rng.Copy CombineWs.Cells(CombineWs.Cells(Rows.Count, 1).End(xlUp).Row, 1)        Else            If blnCkb Then                Set rng = ws.Range(Cells(2, 1), Cells(lastRow, lastCol))            Else                Set rng = ws.Range(Cells(1, 1), Cells(lastRow, lastCol))            End If            rng.Copy CombineWs.Cells(CombineWs.Cells(Rows.Count, 1).End(xlUp).Row + 1, 1)        End If        t = t + 1    Next    wb.Close savechanges:=FalseEnd If

第3行,激活待合并工作簿。工作簿打开应该就是激活的,不管它,多激活一下不防事。

第5行,激活待合并工作表。

第8~11行,复制第一张工作表,从表格第一行开始复制。

第12~17行,复制第二张及以后的工作表,根据选项“明细表数据有标题”来确定从表格第一行还是第二行开始复制。

然后运行正常。

这里向大家说声抱歉!

后来,把用户窗体上的按钮布局顺便稍作修改:

主要原因是“每个文件另起一页”只针对WORD文档,但在选择其他文件类型的时候,它也是勾选的,有点容易让人产生误解。就想把它给搞一下,但怎么弄好呢?本来是想,在选择其他按钮的时候,把它取消勾选。后来决定把它们分类放到框架里,这样就对应起来了,应该不会产生误解了吧。

但是,问题又来了。选项按钮在不同的框架里是相互独立的,都可以选中,那又该怎么办呢?不想放弃这个框架,看上去还是比较顺眼的。那就再写代码吧,给每个选项按钮的Click事件添加代码,使得其他选项按钮的值都为FALSE:

Private Sub OptExcel_Click()    Me.OptPDF = False    Me.OptPictureToPDF = False    Me.OptWord = FalseEnd SubPrivate Sub OptWord_Click()    Me.OptPDF = False    Me.OptExcel = False    Me.OptPictureToPDF = FalseEnd SubPrivate Sub OptPdf_Click()    Me.OptWord = False    Me.OptExcel = FalseEnd SubPrivate Sub OptPictureToPdf_Click()    Me.OptWord = False    Me.OptExcel = FalseEnd Sub

今天是周末,祝大家周末愉快!

~~~~~~End~~~~~~

喜欢就点个赞、点在看、留个言、分享一下呗!感谢!

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2024年12月    »
1
2345678
9101112131415
16171819202122
23242526272829
3031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
    文章归档
      友情链接