通过搜索功能可以查询本站的所有文章
网站首页 本站动态 资源共享 美文妙乐 教学教案 双语新闻 论文相关 辅助教学 教学软件 广东高考

几个实用的Excel 宏代码


来源:高中英语教学交流 发布时间:2013-03-22 10:41:00 查看次数:

内容提要:   有时需要在Excel中将某个多行多列的区域转换到一列中,下面的VBA代码可以实现这个目的。

Excel 宏 多工作表(簿)合并

这段代码的作用:它会新建一个叫做“汇总”的工作表,然后把当前工作簿里的所有Sheet里有数据的内容都复制到“汇总”表里。提示:如果数据表里的内容没有表头的话需要把StartRow = 2改成StartRow = 1


  • Function LastRow(sh As Worksheet)  
  •     On Error Resume Next  
  •     LastRow sh.Cells.Find(what:="*" 
  •                             After:=sh.Range("A1"),  
  •                             Lookat:=xlPart,  
  •                             LookIn:=xlFormulas,  
  •                             SearchOrder:=xlByRows,  
  •                             SearchDirection:=xlPrevious,  
  •                             MatchCase:=False).Row  
  •     On Error GoTo  
  • End Function  
  •   
  • Sub MergeSheets()  
  •     Dim sh As Worksheet  
  •     Dim DestSh As Worksheet  
  •     Dim Last As Long  
  •     Dim shLast As Long  
  •     Dim CopyRng As Range  
  •     Dim StartRow As Long  
  •   
  •     Application.ScreenUpdating False  
  •     Application.EnableEvents False  
  •   
  •     '新建一个“汇总”工作表  
  •     Application.DisplayAlerts False  
  •     On Error Resume Next  
  •     ActiveWorkbook.Worksheets("汇总").Delete  
  •     On Error GoTo  
  •     Application.DisplayAlerts True  
  •     Set DestSh ActiveWorkbook.Worksheets.Add  
  •     DestSh.Name "汇总"  
  •   
  •     '开始复制的行号,忽略表头,无表头请设置成1  
  •     StartRow  
  •   
  •     For Each sh In ActiveWorkbook.Worksheets  
  •   
  •         If sh.Name <> DestSh.Name Then  
  •             Last LastRow(DestSh)  
  •             shLast LastRow(sh)  
  •   
  •             If shLast And shLast >= StartRow Then  
  •   
  •                 Set CopyRng sh.Range(sh.Rows(StartRow), sh.Rows(shLast))  
  •   
  •                 If Last CopyRng.Rows.Count DestSh.Rows.Count Then  
  •                     MsgBox "内容太多放不下啦!"  
  •                     GoTo ExitSub  
  •                 End If  
  •   
  •                 CopyRng.Copy  
  •                 With DestSh.Cells(Last 1, "A" 
  •                     .PasteSpecial xlPasteValues  
  •                     .PasteSpecial xlPasteFormats  
  •                     Application.CutCopyMode False  
  •                 End With  
  •             End If  
  •         End If  
  •     Next  
  •   
  • ExitSub:  
  •     Application.GoTo DestSh.Cells(1)  
  •     DestSh.Columns.AutoFit  
  •     Application.ScreenUpdating True  
  •     Application.EnableEvents True  
  •      
  • End Sub

多工作簿合并

这段代码的作用:它首先打开一个文件选择框,你可以选择一个或多个文件,然后把这些文件里的所有Sheet合并到当前这个工作簿里来,有重名的Sheet会自动在后面加数字。

  1. Sub MergeWorkbooks()  
  2.     Dim FileSet  
  3.     Dim As Integer  
  4.      
  5.     On Error GoTo  
  6.     Application.ScreenUpdating False  
  7.   
  8.     FileSet Application.GetOpenFilename(FileFilter:="Excel 2003(*.xls),*.xls,Excel 2007(*.xlsx),*.xlsx" 
  9.                                             MultiSelect:=True, Title:="选择要合并的文件" 
  10.      
  11.     If TypeName(FileSet) "Boolean" Then  
  12.         GoTo ExitSub  
  13.     End If  
  14.      
  15.     For Each Filename In FileSet  
  16.         Workbooks.Open Filename  
  17.         Sheets().Move After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)  
  18.     Next  
  19.      
  20. ExitSub:  
  21.     Application.ScreenUpdating True  
  22.      
  23. End Sub 
 

第1页 第2页 第3页

扫描二维码手机查看
相关文章
最新更新
阅读排行
快速导航
关于我们
联系我们
【高中英语教学交流网】 【yykzzsj】
微信公众号 站长微信
版权所有 2008-2024 高中英语教学交流网