excel vba 示例1
VBA 编程常见实例

1、将excel汇总好的表,按字段拆分为多sheet的情况:如下图:代码如下:Sub cfs()Dim GSArr() As String '公司名称清单Dim Rca As Integer 'A列数据行数Dim i As IntegerDim Sn As StringSn = Rca = Columns("A:A").End(xlDown).Row ‘按第A列数据拆分,且第一行无合并单元格ReDim GSArr(1 To 1)GSArr(1) = Cells(2, 1)For i = 3 To RcaIf IsError(Application.Match(Cells(i, 1), GSArr, 0)) ThenReDim Preserve GSArr(1 To UBound(GSArr) + 1)GSArr(UBound(GSArr)) = Cells(i, 1)End IfNextIf ActiveSheet.AutoFilterMode = False ThenRows("1:1").AutoFilterElseIf ActiveSheet.FilterMode = True Then ActiveSheet.ShowAllDataEnd IfFor i = 1 To UBound(GSArr)ActiveSheet.Cells.AutoFilter Field:=1, Criteria1:=GSArr(i)Sheets.Add After:=Sheets(Sheets.Count) = GSArr(i)Sheets(Sn).Cells.Copy ActiveSheet.CellsSheets(Sn).ActivateNextActiveSheet.Cells.AutoFilterEnd Sub2、将汇总的好的EXCEL表按字段拆分为多个工作薄代码如下:Sub CFGZB()Dim myRange As VariantDim myArrayDim titleRange As RangeDim title As StringDim columnNum As IntegermyRange = Application.InputBox(prompt:="请选择标题行:", Type:=8)myArray = WorksheetFunction.Transpose(myRange)Set titleRange = Application.InputBox(prompt:="请选择拆分的表头,必须是第一行,且为一个单元格,如:“姓名”", Type:=8)title = titleRange.ValuecolumnNum = titleRange.ColumnApplication.ScreenUpdating = FalseApplication.DisplayAlerts = FalseDim i&, Myr&, Arr, num&Dim d, kFor i = Sheets.Count To 1 Step -1If Sheets(i).Name <> "数据源" Then ‘待拆分的表sheet名为:数据源Sheets(i).DeleteEnd IfNext iSet d = CreateObject("Scripting.Dictionary")Myr = Worksheets("数据源").UsedRange.Rows.CountArr = Worksheets("数据源").Range(Cells(2, columnNum), Cells(Myr, columnNum))For i = 1 To UBound(Arr)d(Arr(i, 1)) = ""Nextk = d.keysFor i = 0 To UBound(k)Set conn = CreateObject("adodb.connection")conn.Open "provider=microsoft.ace.oledb.12.0;extended properties=excel 8.0;data source=" & ThisWorkbook.FullName‘2013版连接字符Sql = "select * from [数据源$] where " & title & " = '" & k(i) & "'"Dim Nowbook As WorkbookSet Nowbook = Workbooks.AddWith NowbookWith .Sheets(1).Name = k(i)For num = 1 To UBound(myArray).Cells(1, num) = myArray(num, 1)Next num.Range("A2").CopyFromRecordset conn.Execute(Sql)End WithEnd WithThisWorkbook.ActivateSheets(1).Cells.SelectSelection.CopyWorkbooks().ActivateActiveSheet.Cells.SelectSelection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _SkipBlanks:=False, Transpose:=FalseApplication.CutCopyMode = FalseNowbook.SaveAs ThisWorkbook.Path & "\" & k(i)Nowbook.Close TrueSet Nowbook = NothingNext iconn.CloseSet conn = NothingApplication.DisplayAlerts = TrueApplication.ScreenUpdating = TrueEnd Sub3、将含有多sheet的一个工作表,按sheet名拆分为工作表代码如下:Private Sub 分拆工作表()Dim sht As WorksheetDim MyBook As WorkbookSet MyBook = ActiveWorkbookFor Each sht In MyBook.Sheetssht.CopyActiveWorkbook.SaveAs Filename:=MyBook.Path & "\" & , FileFormat:=xlNormal '将工作簿另存为EXCEL默认格式ActiveWorkbook.CloseNextMsgBox "文件已经被分拆完毕!"End Sub4,、将多个工作薄合并为一个多sheet的工作薄代码如下:Sub Books2Sheets()'定义对话框变量Dim fd As FileDialogSet fd=Application.FileDialog(msoFileDialogFilePicker)'新建一个工作簿Dim newwb As WorkbookSet newwb=Workbooks.AddWith fdIf.Show=-1 Then'定义单个文件变量Dim vrtSelectedItem As Variant'定义循环量Dim i As Integeri=1'开始文件检索For Each vrtSelectedItem In.SelectedItems'打开被合并工作簿Dim tempwb As WorkbookSet tempwb=Workbooks.Open(vrtSelectedItem)'复制工作表tempwb.Worksheets(1).Copy Before:=newwb.Worksheets(i)'把新工作簿的工作表名字改成被复制工作簿文件名,这儿应用于xls文件,即Excel97-2003的文件,如果是Excel2007,需要改成xlsxnewwb.Worksheets(i).Name=VBA.Replace(,".xls","")'关闭被合并工作簿tempwb.Close SaveChanges:=Falsei=i+1Next vrtSelectedItemEnd IfEnd WithSet fd=NothingEnd Sub5、将含有多个sheet的工作表内容信息汇总至一个sheet中Sub Combine()Dim J As IntegerOn Error Resume NextSheets(1).SelectWorksheets.AddSheets(1).Name = "Combined"Sheets(2).ActivateRange("A1").EntireRow.SelectSelection.Copy Destination:=Sheets(1).Range("A1")For J = 2 To Sheets.CountSheets(J).ActivateRange("A1").SelectSelection.CurrentRegion.SelectSelection.Offset(1, 0).Resize(Selection.Rows.Count - 1).SelectSelection.Copy Destination:=Sheets(1).Range("A65536").End(xlUp)(2)NextEnd Sub。
excel vba常用实例

excel vba常用实例一、VBA在Excel中的应用实例1. 对单元格的操作● 定义并使用变量:使用变量来对某些单元格或变量的初始值、更改值等进行管理处理。
● 修改单元格属性:如居中,自动换行,字体大小等属性的更改,增强Excel 表格的易读性。
● 遍历所有表格:便于进行元格查找、值拷贝、内容整理等操作,提高操作效率。
2.公式和函数的操作● 编写适用于某些表格或公式的新函数:简化Excel的计算过程,减少公式的复杂性,提高效率。
● 获取公式结果:某些公式计算结果可以通过VBA来获取,并可以用来更新表格里的内容,依据该结果进行二次计算。
● 使用提示性函数:函数名或参数可以通过提示性幕进行输入,完美结合了两者,更方便Excel表格的操作。
3.使用控件● 插入控件:通过VBA插入对话框,指示标、选项按钮等可视化控件可以十分容易地更新Excel表格。
● 修改控件属性:可以通过控件的属性,如大小、位置、文本内容等属性进行调整,为表格添加贴心的交互。
● 事件驱动控件:如在控件上添加拖拽和双击事件,可以动态管理和更新控件的属性。
4. 其它实例● VBA批量更改内容:可以快速替换所有与某个字符串内容相关的单元格,或者将每一行都更新一次,提高更新效率。
● 删除无用页:通过VBA来快速删除包含特定内容的页,比如显示错误的页等等,大大简化整个变更过程。
● 文件保存:可以用VBA设计程序,在每次保存时自动备份文件,防止意外数据丢失。
● 向外部发送email:利用VBA,可以在特定时间自动发送email给目标账号,在表格变更时自动发出通知。
以上就是VBA在Excel中的应用实例,能够为Excel办公操作更新更多效率,添加一些额外的功能,大大提升Excel的能力。
43个典型ExcelVBA实例

43个典型ExcelVBA实例目录例1.九九乘法表(Print方法的应用) (3)例2 输入个人信息(Inputbox函数的应用) (3)例3 退出确认(Msgbox函数的应用) (5)例4 突出显示不及格学生 (7)例5 从身份证号码中提取性别 (8)例6 评定成绩等级 (9)例7 计算个人所得税 (11)例8 密码验证 (13)例9 求最小公倍数和最大公约数 (15)例10 输出ASCII码表 (16)例11 计算选中区域数值之和 (17)例12 换零钱法(多重循环) (18)例13 数据排序 (21)例14 彩票幸运号码 (22)例15 用数组填充单元格区域 (24)例16 判断单元格是否包含公式 (25)例17 自动填充公式 (26)例18 锁定和隐藏公式 (28)例19 将单元格公式转换为数值 (29)例20 删除所有公式 (29)例21 用VBA表示数组公式 (30)数据查询 (31)例22 查找指定的值 (31)例23 带格式查找 (33)例24 查找上一个/下一个数据 (34)例25 代码转换 (36)例26 模糊查询 (37)例27 网上查询快件信息 (38)例28 查询基金信息 (40)例29 查询手机所在地 (41)例30 使用字典查询 (43)数据排序 (45)例31 用VBA代码排序 (45)例32 乱序排序 (46)例33 自定义序列排序 (47)例34 多关键字排序 (49)例35 输入数据自动排序 (50)例36 数组排序 (51)例37 使用Small和Large函数排序 (52)例38 使用RANK函数排序 (54)例39 姓名按笔画排序 (56)例40 用VBA进行简单筛选 (59)例41 用VBA进行高级筛选 (61)例42 筛选非重复值 (62)例43 取消筛选 (63):例1.九九乘法表(Print方法的应用)1.案例说明在早期的Basic版本中,程序运行结果主要依靠Print语句输出到终端。
150个ExcelVBA编程实例

第一章Excel应用程序对象(Application对象)及其常用方法Application对象代表整个Microsoft Excel应用程序,带有175个属性和52个方法,可以设置整个应用程序的环境或配置应用程序。
示例01-01:体验开/关屏幕更新(ScreenUpdating属性)Sub 关闭屏幕更新()MsgBox "顺序切换工作表Sheet1→Sheet2→Sheet3→Sheet2,先开启屏幕更新,然后关闭屏幕更新"Worksheets(1).SelectMsgBox "目前屏幕中显示工作表Sheet1"Application.ScreenUpdating = TrueWorksheets(2).SelectMsgBox "显示Sheet2了吗?"Worksheets(3).SelectMsgBox "显示Sheet3了吗?"Worksheets(2).SelectMsgBox "下面与前面执行的程序代码相同,但关闭屏幕更新功能" Worksheets(1).SelectMsgBox "目前屏幕中显示工作表Sheet1" & Chr(10) & "关屏屏幕更新功能" Application.ScreenUpdating = FalseWorksheets(2).SelectMsgBox "显示Sheet2了吗?"Worksheets(3).SelectMsgBox "显示Sheet3了吗?"Worksheets(2).SelectApplication.ScreenUpdating = TrueEnd Sub示例说明:ScreenUpdating属性用来控制屏幕更新。
当运行一个宏程序处理涉及到多个工作表或单元格中的大量数据时,若没有关闭屏幕更新,则会占用CP U的处理时间,从而降低程序的运行速度,而关闭该属性则可显著提高程序运行速度。
Excel常用VBA函数实用经典案例

Excel常用VBA函数实用经典案例ASC函数一、题目:要求编写一段代码,运行后得到字符串”Excel”的首字母和”e”的ASCII值。
二、代码:S UB示例_1_01()D IM MY N UM1%,MY N UM2%MY N UM1=A SC("E XCEL")'返回69MY N UM2=A SC("E")'返回101[A1]="MY N UM1=":[B1]=MY N UM1[A2]="MY N UM2=":[B2]=MY N UM2E ND S UB三、代码详解1、Sub示例_1_01():宏程序的开始语句。
2、Dim myNum1%,myNum2%:变量myNum1和myNum2声明为整型变量。
也可以写为Dim myNum1As Integer。
Integer变量存储为16位(2个字节)的数值形式,其范围为 -32,768到32,767之间。
Integer的类型声明字符是百分比符号(%)。
3、myNum1=Asc("Excel"):把Asc函数的值赋给变量myNum1。
Asc函数返回一个Integer,代表字符串中首字母的字符的ASCII代码。
语法Asc(string)必要的string(字符串)参数可以是任何有效的字符串表达式。
如果string中没有包含任何字符,则会产生运行时错误。
4、myNum2=Asc("e"):把Asc函数的值赋给变量myNum2。
这里返回小写字母e的ASCII代码101。
5、[a1]="myNum1=":[b1]=myNum1:把字符串“myNum1=“赋给A1单元格,把变量myNum1的值赋给B1单元格。
6、[a2]="myNum2=":[b2]=myNum2:把字符串“myNum2=“赋给A2单元格,把变量myNum2的值赋给B2单元格。
Excel VBA代码 亲测可用

1、打开显示登录窗体代码打开隐藏表格,显示登录窗体private Sub Workbook_open()Application.Visible = falseUserForm1.Showend Sub2、固定账号、密码登录窗体设置(1)制作窗体(2)登录验证Private Sub CommandButton1_Click() If TextBox1 = "admin" ThenIf TextBox2 <> 123 ThenMsgBox "密码错误"Exit SubElseMsgBox "登录成功”"Unload MeApplication.Visible = TrueSheet1.ActivateEnd IfElseMsgBox "账号不存在"End IfEnd Sub(3)退出按钮Private Sub CommandButton2_Click() Unload MeThisWorkbook.CloseEnd Sub(4)打开注册窗体Private Sub CommandButton3_Click() UserForm2.ShowEnd Sub(5)唯一关闭代码Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) If CloseMode <> 1 Then Cancel = TrueEnd Sub3、注册账号(1)制作注册账号窗体(2)注册代码Private Sub CommandButton1_Click()Dim zh As Range, zt As RangeIf TextBox1 = "" Then MsgBox "未填入账户": Exit SubIf TextBox2 <> TextBox3 Then MsgBox "密码不一致": Exit SubSet zh = Sheets("注册").Range("a:a").Find(TextBox1.Text, , , 1)If zh Is Nothing ThenSet zt = Sheets("注册").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) zt = TextBox1.Textzt.Offset(0, 1) = TextBox2.Textzt.Offset(0, 2) = NowMsgBox "注册成功"Unload MeElseMsgBox "账号已经存在,请更换其他账号"End IfEnd Sub4、查找筛选代码Private Sub TextBox1_Change()If Len(TextBox1.Value) = 0 ThenSheet1.AutoFilterMode = FalseElseIf Sheet1.AutoFilterMode = True ThenSheet1.AutoFilterMode = FalseEnd IfSheet1.Range("B7:P" & Rows.Count).AutoFilter _field:=4, Criteria1:="*" & TextBox1.Value & "*"End IfEnd Sub5、多账号密码验证代码Private Sub CommandButton1_Click()If Len(TextBox1) = 0 Then MsgBox "未输入账号": Exit SubDim zh As RangeSet zh = Sheets("注册").Range("a:a").Find(TextBox1.Text, , , 1) If Not zh Is Nothing ThenIf TextBox2.Text <> zh.Offset(0, 1) ThenMsgBox "密码错误"Exit SubElseMsgBox "登录成功"Unload MeApplication.Visible = TrueSheet1.ActivateEnd IfElseMsgBox "账号不存在"End IfEnd Sub6、默认打开第一个工作表Private Sub Workbook_Open()Sheet1.ActivateEnd Sub7、退出保存工作表Private Sub Workbook_BeforeClose(Cancel As Boolean) ThisWorkbook.SaveEnd Sub。
(完整word版)ExcelVBA编程实例(150例)

ExcelVBA编程实例(150例)主要内容和特点《ExcelVBA编程入门范例》主要是以一些基础而简短的VBA实例来对ExcelV BA中的常用对象及其属性和方法进行讲解,包括应用程序对象、窗口、工作簿、工作表、单元格和单元格区域、图表、数据透视表、形状、控件、菜单和工具栏、帮助助手、格式化操作、文件操作、以及常用方法和函数及技巧等方面的应用示例。
这些例子都比较基础,很容易理解,因而,很容易调试并得以实现,让您通过具体的实例来熟悉ExcelVBA编程。
■ 分16章共14个专题,以具体实例来对大多数常用的ExcelVBA对象进行讲解;■ 一般而言,每个实例都很简短,用来说明使用VBA实现Excel某一功能的操作;■ 各章内容主要是实例,即VBA代码,配以简短的说明,有些例子可能配以必要的图片,以便于理解;■ 您可以对这些实例进行扩充或组合,以实现您想要的功能或更复杂的操作。
VBE编辑器及VBA代码输入和调试的基本知识在学习这些实例的过程中,最好自已动手将它们输入到VBE编辑器中调试运行,来查看它们的结果。
当然,您可以偷赖,将它们复制/粘贴到代码编辑窗口后,进行调试运行。
下面,对VBE编辑器界面进行介绍,并对VBA代码输入和调试的基本知识进行简单的讲解。
激活VBE编辑器一般可以使用以下三种方式来打开VBE编辑器:■ 使用工作表菜单“工具——宏——Visual Basic编辑器”命令,如图00-01所示;■ 在Visual Basic工具栏上,按“Visual Basic编辑器”按钮,如图00-02所示;■ 按Alt+F11组合键。
图00-01:选择菜单“工具——宏——Visual Basic编辑器”命令来打开VBE编辑器图00-02:选择Visual Basic工具栏上的“Visual Basic编辑器”命令按钮来打开VBE编辑器此外,您也可以使用下面三种方式打开VBE编辑器:■ 在任一工作表标签上单击鼠标右键,在弹出的菜单中选择“查看代码”,则可进入VBE编辑器访问该工作表的代码模块,如图00-03所示;■ 在工作簿窗口左上角的Excel图标上单击鼠标右键,在弹出的菜单中选择“查看代码”,则可进入VBE编辑器访问活动工作簿的ThisWorkbook代码模块,如图00-04所示;■ 选择菜单“工具——宏——宏”命令打开宏对话框,若该工作簿中有宏程序,则单击该对话框中的“编辑”按钮即可进行VBE编辑器代码模块,如图00-05所示。
ExcelVBA解读(81):工作表事件示例

ExcelVBA解读(81):工作表事件示例本文再列举一些示例,以加深对工作表事件的理解,方便应用。
示例1:阻止用户修改指定单元格区域的数据当用户修改工作表中指定单元格区域的数据时,给出提示信息并改回为原数据。
代码如下:Dim dataPrivate Sub Worksheet_Change(ByValTarget As Range)If Not Intersect(Target, Range('A1:C3')) Is Nothing ThenMsgBox '该区域数据重要,请不要修改!'Application.EnableEvents = FalseTarget.Value = dataApplication.EnableEvents = TrueEnd IfEnd SubPrivate Sub Worksheet_SelectionChange(ByValTarget As Range)data = Target.ValueEnd Sub运行效果如图1所示。
图1示例2:让不同的工作表有不同的快捷菜单在工作表“完美Excel”中,单击右键会出现属于该工作表的快捷菜单,同样,在工作表“Data”中单击右键也会出现属于该工作表的快捷菜单。
如下图2所示。
图2实现上述效果的代码如下。
在“完美Excel”工作表代码模块的BeforeRightClick事件中,输入下面的代码:Private SubWorksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)Dim cmb_excelperfect As CommandBarSet cmb_excelperfect = CreateSubMenu('完美Excel')Cancel = Truecmb_excelperfect.ShowPopupEnd Sub在“Data”工作表代码模块的BeforeRightClick事件中,输入相似的代码:Private SubWorksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)Dim cmb_data As CommandBarSet cmb_data = CreateSubMenu('数据处理')Cancel = Truecmb_data.ShowPopupEnd Sub插入一个标准模块,并输入下面的代码:示例3:双击单元格时显示输入框在双击工作表第1列中的单元格时,会显示下图3所示的自定义输入框。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Sub 设置计算名次的公式()
'首先选择待输入公式的单元格
[c2].Select
'设置C2的公式,第8参数必须用0,否则单元格中显示值而非公式
[c2].FormulaLocal = Application.InputBox("请输入计算名次的公式:", "公式", , , , , , 0)
'填充公式
Range("C2").AutoFill Destination:=Range("C2:C" & Cells(Rows.Count, 2).End(xlUp).Row)
End Sub
Sub 工作表改名2()
'声明变量, 用于获取Msgbox的返回值
Dim msg As VbMsgBoxResult
'设置一个标签
err:
On Error Resume Next '防错, 当出现错误时执行下一步
= Format(Date, "yyyy-mm-dd") '将当前工作表命名
If err.Number > 0 Then '如果存在错误(即已经有工作表的名称等于当前日期) '获取Msgbox的返回值
msg = MsgBox("存在同名工作表, 是否继续?", 2, "修改日期")
'如果用户单击"中断"则退出程序
If msg = vbAbort Then Exit Sub
'如果用户单击"忽略", 则将当前表命名为日期, 并添加左右括号
If msg = vbIgnore Then = "(" & Format(Date, "yyyy-mm-dd") & ")"
'如果用户单击"重试"则清除错误设置, 然后返回Err标签处继续执行
If msg = vbRetry Then err.Clear: GoTo err
End If
End Sub
Sub 生成月历()
On Error GoTo endd '防错:如果写入失败则动行Endd标签的语句
Dim Months As Byte
'提供一个让用户指定月份的对话框,对话框显示屏幕左上角,其上边距和左边距均为10
'inputbox反回值是String型,利用CByte转换成Byte型
Months = CByte(InputBox("请指定月份,程序将生成该月的月历", "月份", Month(Date), 10, 10))
If Months < 1 Or Months > 12 Then MsgBox "只能在1-12之间,请重新输入。
", 64, "提示": Exit Sub
Application.ScreenUpdating = False '关闭屏幕更新,加快速度
With ActiveCell
'在当前单元格显示当前日期
.Value = Format(DateSerial(Year(Date), Months, 1), "yyyy年m月d日")
'对首行合并居中
.Resize(1, 7).Merge
.HorizontalAlignment = xlCenter
' 设置标题行数据并设置为居中显示产,添加颜色
With .Offset(1, 0).Resize(1, 7)
.Formula = Array("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat") '标题
.HorizontalAlignment = xlCenter '居中显示
.Interior.ColorIndex = 15 '标示背景色
.Font.Bold = True '加粗显示
End With
With .Offset(2, 0).Resize(6, 7) '设置公式区域
'建立数组公式
.FormulaArray = "=text(IF(MONTH(" & ActiveCell.MergeArea(1).Address(0, 0) & ")<>MONTH("&ActiveCell.MergeArea(1).Address(0,0)&"-(WEEKDAY("&ActiveCell.MergeArea(1).A ddress(0, 0) & ")-1)+{0;1;2;3;4;5}*7+{0,1,2,3,4,5,6}),""""," & ActiveCell.MergeArea(1).Address(0, 0) &"-(WEEKDAY("&ActiveCell.MergeArea(1).Address(0,0)&")-1)+{0;1;2;3;4;5}*7+{0,1,2,3,4,5,6}),""d "")"
.HorizontalAlignment = xlCenter '居中
.Value = .Value '将公式转换成值
.EntireColumn.AutoFit '自动调整列宽
End With
.Resize(8, 7).Borders().LineStyle = xlContinuous '添加边框,中间部分
'再添加外框,外框显示为加粗
.Resize(8, 7).BorderAround ColorIndex:=1, Weight:=xlThick
End With
Application.ScreenUpdating = True
Exit Sub
endd:
MsgBox "您输入的月份包括文本" & Chr(10) & "或者当前区域无法写入", 65
End Sub
Sub 新建工作表() '批量建立新表,个数等于本月天数,同时对日期命名,并建立目录Dim i As Byte, months As Byte '声明变量
'弹出一个对话框,让用户指定月份,默认显示当前月
months = InputBox("请输入月份,程序将建立该月每日日期命名的工作表", "确定月份", Month(Date))
'批量生成工作表,其个数等于指定月份的天数减去当前已有工作表个数,即确保工作表数量等于该月天数
Sheets.Add After:=Sheets(Sheets.Count), Count:=Day(DateSerial(Year(Date), months + 1, 0)) - Sheets.Count
'将所有工作表重命名,工作表名对应每日的日期
For i = 1 To Sheets.Count
Sheets(i).Name = months & "月" & i & "日" '对每个工作表命名
Next i
MsgBox "建立完毕!", 64
End Sub。