VBA报表代码精简总结

时间:2024.4.14

VBA报表代码精简总结

VBA使用在报表输出的时候,通常结合excel进行报表输出,其功能非常强大。但是大家对报表经常复制前人的结果,稍作修改即可使用。虽说“条条大路通罗马”,现在本人遵循“同样的功能越简单越不容易出错”的原则做出以下改进:

1--模板精简:

在日常的报表编写过程中通产刚才用多张表格模板,例如:提升泵报表,细格栅和沉砂池报表,氧化沟报表,滤池池报表,进水处水质报表,月报表,年报表。。。。

缺点:生成模板时使用VBA写报表时,需要一张一张打开,写入数据,一张一张保存和关闭,需要些多个类似的VBA子程序,比较繁琐,容易出错,效率不高。

改进:将以上各个工艺段的报表整合在一张工作薄里面,每个工艺段为一张表,写日报表时只进行一次打开和关闭工作。

2—生成日报表的精简

传统方法采用:打开模板-另存为-重命名文件。

缺点:反复寻找模板文件,进行打开-另存为-关闭的动作,效率低,代码复杂,容易出错。 改进:使用filecopy函数,直接将模板复制到指定地方,顺便将文件名修改了。 3--写报表精简:

有了第一步的工作,这一步就自然水到渠成了。写日报表时:打开今日报表-对每张表写数据-保存-关闭。代码结构如下:

Sub ReportDay()

'打开日报表,写入数据

On Error GoTo ltnext:

Dim msexcel As Excel.Application

Set msexcel = CreateObject("Excel.Application")

filename = gProject.Path & "\report1\day\" & Date & " 一期日报表.xls"

With msexcel

.Visible = False

.Workbooks.Open (filename)

.DisplayAlerts = False

End With

On Error Resume Next

i = Hour(Now) + 6

'写日报表sheet1(粗格栅 提升泵房)

With msexcel.Worksheets(1)

.Cells(i, 2).Value = Plc1("plc1\Coarse\LET102\LEVEL").Value '1#粗格栅液位差 。。。。。。

.Cells(i, 9).Value = Plc1("plc1\Pumping\PET105\Ia").Value '5#提升泵电流 End With

'写日报表sheet2(细格栅 沉淀池)

With msexcel.Worksheets(2)

.Cells(i, 2).Value = Plc1("plc1\Fine\LET202\LEVEL").Value '1#细格栅液位差 。。。。。。

.Cells(i, 7).Value = Plc2("plc2\Sediment\Lt\txy1_lt").Value '污泥池液位

End With

'写日报表sheet3(1# 2# BAF池)

With msexcel.Worksheets(3)

.Cells(i, 2).Value = Plc2("plc2\Tank_N1\Pt\level").Value 'N2池池底压力 。。。。。。

.Cells(i, 13).Value = Plc2("plc2\Tank_N2\Blower02\Ia").Value '二级风机电流 End With

'写日报表sheet4(3# 4# BAF池)

With msexcel.Worksheets(4)

.Cells(i, 2).Value = Plc2("plc2\Tank_N3\Pt\level").Value 'N2池池底压力 。。。。。。

.Cells(i, 13).Value = Plc2("plc2\Tank_N4\Blower04\Ia").Value '二级风机电流 End With

'写日报表sheet5(反冲洗)

With msexcel.Worksheets(5)

.Cells(i, 2).Value = Plc2("plc2\Lt\wsch_lt").Value '回用水池液位

。。。。。。

.Cells(i, 11).Value = Plc2("plc2\Return\Pump01\Ia").Value '3#回用泵电流 End With

'写日报表sheet6(进出水水质)

With msexcel.Worksheets(6)

.Cells(i, 2).Value = Plc2("plc2\Sediment\Lt\txy2_lt").Value '瞬时流量 。。。。。。

.Cells(i, 10).Value = Plc2("plc2\nh\nh").Value '氨氮

End With

With msexcel

.ActiveWorkbook.Save

.ActiveWorkbook.Close

.Quit

End With

Plc1.ScanOff

Plc2.ScanOff

ltnext:

Set msexcel = Nothing

Shell "taskkill /f /im excel.exe"

End Sub

这样,代码比较简介,不易出错执行效率也很高。


第二篇:VBA代码


快速合并200个Excel工作簿2009-04-06 22:06你会不会有大量Excel工作簿需要合并到一起呢?你可以手动完成这一工作,但这个工作可能会花费你一整天的时间。要完成合并工作,最好使用宏,这样只需花几分钟便可搞定。本文所介绍的技巧将向你说明如何创建这样一个宏,看看如何使用宏来节省你的宝贵时间。(本技巧可应用于Microsoft Excel 97、Excel 2000、Excel 2002、和Excel 2003。)这些工作簿总数约有200,保存在同一文件夹中,其中大多数工作簿中只包含一个单独的工作表,但有些工作簿包含多个工作表。这些工作簿中的工作表需要被添加到一个新的工作簿中。合并数量如此巨大的工作簿的最简单方法——如果经常要这样做的话——是使用宏。下面的宏会显示一个对话框,提示你选择要合并的文件。(你可以通过按下Ctrl键单击的方法选择多个工作簿。)它会使用代码在你所选的工作簿列表中循环,打开每个工作簿并将其中的工作表移动到工作簿的末尾。Sub CombineWorkbooks()Dim FilesToOpenDim x As IntegerOn Error GoTo ErrHandlerApplication.ScreenUpdating = FalseFilesToOpen = Application.GetOpenFilename(FileFilter: = "MicroSoft Excel文件(*.xls),*.xls",MultiSelect: = True,Title: = "要合并的文件")If TypeName(FilesToOpen) = "Boolean" thenMsgBox "没有选中文件"Goto ExitHandlerend ifx = 1While x <= UBound(filestoopen)Workbooks.Open fileName: = filestoopen(x)Sheets().Move After: = ThisWorkbook.Sheets (ThisWorkbook.Sheets.Count)x = x + 1WendExitHandler:Application.ScreenUpdating = TrueExit SubErrHandler:MsgBox Err.DescriptionResume ExitHandlerEnd Sub&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&先贴一段网上找的excel的各种事件工作簿对象事件一览表当工作簿更改、工作簿中的任何工作表更改、加载宏更改或数据透视表更改时,将引发工作簿事件。工作簿上的事件在默认情况下是可用的。若要查看工作簿的事件过程,请用鼠标右键单击处于还原状态或最小化状态的工作簿窗口标题栏,再单击快捷菜单上的“查看代码”。在“过程”下拉列表框内选择事件名称。事件说明Activate激活工作薄时AddinInstall当工作簿作为加载宏安装时AddinUninstall工作簿作为加载宏卸载时BeforeClose关闭工作薄前BeforePrint打印工作薄(或其中任何内容)之前BeforeSave保存工作薄前Deactivate工作簿从活动状态转为非活动状态时NewSheet在工作簿中新建工作表时Open打开工作簿时PivotTableCloseConnection在数据透视表关闭与其数据源的连接之后PivotTableOpenConnection在数据透视表打开与其数据

源的连接之后SheetActivate激活任何一张表时SheetBeforeDoubleClick双击任何工作表时SheetBeforeRightClick鼠标右键单击任一工作表时SheetCalculate工作表重新计算时SheetChange更改工作表中的单元格时SheetDeactivate任一工作表由活动状态转为非活动状态时SheetFollowHyperlink单击 Microsoft Excel 中的任意超链接时SheetPivotTableUpdate数据透视表的工作表更新之后SheetSelectionChange工作簿中的数据透视表更新之后WindowActivate工作簿的窗口激活时WindowDeactivate工作簿的窗口变为非活动状态时WindowResize工作簿窗口调整大小时工作表事件一览表工作表上的事件在默认情况下是可用的。若要查看工作表的事件过程,请用鼠标右键单击工作表标签,再单击快捷菜单上的“查看代码”。在“过程”下拉列表框内选择事件名称。事件说明Activate 激活工作表时Deactivate工作表从活动状态转为非活动状态时BeforeDoubleClick 双击工作表前BeforeRightClick 右键单击工作表时Calculate 对工作表进行重新计算之后Change 更改工作表中的单元格,或外部链接引起单元格时FollowHyperlink 单击工作表上的任意超链接时PivotTableUpdate 在工作簿中的数据透视表更新之后SelectionChange工作表上的选定区域发生改变时再贴一堆代码例为设置密码窗口 (1) If Application.InputBox("请输入密码:") = 1234 Then [A1] = 1 '密码正确时执行 Else: MsgBox "密码错误,即将退出!" '此行与第2行共同设置密码 End If 本示例为设置密码窗口 (1) X = MsgBox("是否真的要结帐?", vbYesNo) If X = vbYes Then Close 本示例为设置工作表密码 ActiveSheet.Protect Password:=641112 ' 保护工作表并设置密码 ActiveSheet.Unprotect Password:=641112 '撤消工作表保护并取消密码 '本示例关闭除正在运行本示例的工作簿以外的其他所有工作簿,并保存其更改内容 。 For Each w In Workbooks If w.Name ThisWorkbook.Name Then w.Close SaveChanges:=True End If Next w '每次打开工作簿时,本示例都最大化 Microsoft Excel 窗口。 Application.WindowState = xlMaximized '本示例显示活动工作表的名称。 MsgBox "The name of the active sheet is " & ActiveSheet.Name '本示例保存当前活动工作簿的副本。 ActiveWorkbook.SaveCopyAs "C:\TEMP\XXXX.XLS" '下述过程激活工作簿中的第四张工作表。 Sheets(4).Activate '下述过程激活工作簿中的第1张工作表。 Worksheets(1).Activate '本示例通过将 Saved 属性设为 True 来关闭包含本段代码的工作簿,并放弃对该 工作簿的任何更改。 ThisWorkbook.Saved = True ThisWorkbook.Close '本示例对自动重新计算功能进行设置,使 Microsoft Excel 不

对第一张工作表自 动进行重新计算。 Worksheets(1).EnableCalculation = False '下述过程打开 C 盘上名为 MyFolder 的文件夹中的 MyBook.xls 工作簿。 Workbooks.Open ("C:\MyFolder\MyBook.xls") '本示例显示活动工作簿中工作表 sheet1 上单元格 A1 中的值。 MsgBox Worksheets("Sheet1").Range("A1").Value 本示例显示活动工作簿中每个工作表的名称 For Each ws In Worksheets MsgBox ws.Name Next ws 本示例向活动工作簿添加新工作表 , 并设置该工作表的名称? Set NewSheet = Worksheets.Add NewSheet.Name = "current Budget" 本示例将新建的工作表移到工作簿的末尾 'Private Sub Workbook_NewSheet(ByVal Sh As Object) Sh.Move After:=Sheets(Sheets.Count) End Sub 本示例将新建工作表移到工作簿的末尾 'Private Sub App_WorkbookNewSheet(ByVal Wb As Workbook, _ ByVal Sh As Object) Sh.Move After:=Wb.Sheets(Wb.Sheets.Count) End Sub 本示例新建一张工作表,然后在第一列中列出活动工作簿中的所有工作表的名称。 Set NewSheet = Sheets.Add(Type:=xlWorksheet) For i = 1 To Sheets.Count NewSheet.Cells(i, 1).Value = Sheets(i).Name Next i 本示例将第十行移到窗口的最上面? Worksheets("Sheet1").Activate ActiveWindow.ScrollRow = 10 当计算工作簿中的任何工作表时,本示例对第一张工作表的 A1:A100 区域进行排序 。 'Private Sub Workbook_SheetCalculate(ByVal Sh As Object) With Worksheets(1) .Range("a1:a100").Sort Key1:=.Range("a1") End With End Sub 本示例显示工作表 Sheet1 的打印预览。 Worksheets("Sheet1").PrintPreview 本示例保存当前活动工作簿? ActiveWorkbook.Save 本示例保存所有打开的工作簿,然后关闭 Microsoft Excel。 For Each w In Application.Workbooks w.Save Next w Application.Quit 下例在活动工作簿的第一张工作表前面添加两张新的工作表? Worksheets.Add Count:=2, Before:=Sheets(1) 本示例设置 15 秒后运行 my_Procedure 过程,从现在开始计时。 Application.OnTime Now + TimeValue("00:00:15"), "my_Procedure" 本示例设置 my_Procedure 在下午 5 点开始运行。 Application.OnTime TimeValue("17:00:00"), "my_Procedure" 本示例撤消前一个示例对 OnTime 的设置。 Application.OnTime EarliestTime:=TimeValue("17:00:00"), _ Procedure:="my_Procedure", Schedule:=False 每当工作表重新计算时,本示例就调整 A 列到 F 列的宽度。 'Private Sub Worksheet_Calculate() Columns("A:F").AutoFit End Sub 本示例使活动工作簿中的计算仅使用显示的数字精度。 ActiveWorkbook.PrecisionAsDisplayed = True 本示例将工作表 Sheet1 上的 A1:G37 区域剪下,并放入剪贴板。 Worksheets("Sheet1").Range("A1:G37").Cut Calculate 方法 计算所有打开的工作簿、

工作簿中的一张特定的工作表或者工作表中指定区域的单元 格,如下表所示: '要计算 '依照本示例 所有打开的工作簿 ' Application.Calculate (或只是 Calculate ) 指定工作表 '计算指定工作表Sheet1 Worksheets ("Sheet1").Calculate 指定区域 'Worksheets(1).Rows(2).Calculate 本示例对自动重新计算功能进行设置,使 Microsoft Excel 不对第一张工作表自动 进行重新计算。 Worksheets(1).EnableCalculation = False 本示例计算 Sheet1 已用区域中 A 列、B 列和 C 列的公式。 Worksheets("Sheet1").UsedRange.Columns("A:C").Calculate 本示例更新当前活动工作簿中的所有链接? ActiveWorkbook.UpdateLink Name:=ActiveWorkbook.LinkSources 本示例设置第一张工作表的滚动区域? Worksheets(1).ScrollArea = "a1:f10" 本示例新建一个工作簿,提示用户输入文件名,然后保存该工作簿。 Set NewBook = Workbooks.Add Do fName = Application.GetSaveAsFilename Loop Until fName False NewBook.SaveAs Filename:=fName 本示例打开 Analysis.xls 工作簿,然后运行 Auto_Open 宏。 Workbooks.Open "ANALYSIS.XLS" ActiveWorkbook.RunAutoMacros xlAutoOpen 本示例对活动工作簿运行 Auto_Close 宏,然后关闭该工作簿。 With ActiveWorkbook .RunAutoMacros xlAutoClose .Close End With 在本示例中,Microsoft Excel 向用户显示活动工作簿的路径和文件名称。 'Sub UseCanonical() Display the full path to user. MsgBox ActiveWorkbook.FullNameURLEncoded End Sub 本示例显示当前工作簿的路径及文件名(假定尚未保存此工作簿)。 MsgBox ActiveWorkbook.FullName 本示例关闭 Book1.xls,并放弃所有对此工作簿的更改。 Workbooks("BOOK1.XLS").Close SaveChanges:=False 本示例关闭所有打开的工作簿。如果某个打开的工作簿有改变,Microsoft Excel 将显示询问是否保存更改的对话框和相应提示。 Workbooks.Close 本示例在打印之前对当前活动工作簿的所有工作表重新计算? 'Private Sub Workbook_BeforePrint(Cancel As Boolean) For Each wk In Worksheets wk.Calculate Next End Sub 本示例对查询表一中的第一列数据进行汇总,并在数据区域下方显示第一列数据的总 和。 Set c1 = Sheets("sheet1").QueryTables(1).ResultRange.Columns(1) c1.Name = "Column1" c1.End(xlDown).Offset(2, 0).Formula = "=sum(Column1)" 本示例取消活动工作簿中的所有更改? ActiveWorkbook.RejectAllChanges 本示例在商业问题中使用规划求解函数,以使总利润达到最大值。SolverSave 函数 将当前问题保存到活动工作表上的某一区域。 Worksheets("Sheet1").Activate SolverReset SolverOptions Precision:=0.001 SolverOK SetCell:=Range("TotalProfit"), _ MaxMinVal:=1, _ ByChange:=R

ange("C4:E6") SolverAdd CellRef:=Range("F4:F6"), _ Relation:=1, _ FormulaText:=100 SolverAdd CellRef:=Range("C4:E6"), _ Relation:=3, _ FormulaText:=0 SolverAdd CellRef:=Range("C4:E6"), _ Relation:=4 SolverSolve UserFinish:=False SolverSave SaveArea:=Range("A33") 本示例隐藏 Chart1、Chart3 和 Chart5。 Charts(Array("Chart1", "Chart3", "Chart5")).Visible = False 当激活工作表时,本示例对 A1:A10 区域进行排序。 'Private Sub Worksheet_Activate() Range("a1:a10").Sort Key1:=Range("a1"), order:=xlAscending End Sub 本示例更改 Microsoft Excel 链接。 ActiveWorkbook.ChangeLink "c:\excel\book1.xls", _ "c:\excel\book2.xls", xlExcelLinks 本示例启用受保护的工作表上的自动筛选箭头? ActiveSheet.EnableAutoFilter = True ActiveSheet.Protect contents:=True, userInterfaceOnly:=True 本示例将活动工作簿设为只读? ActiveWorkbook.ChangeFileAccess Mode:=xlReadOnly 本示例使共享工作簿每三分钟自动更新一次? ActiveWorkbook.AutoUpdateFrequency = 3 下述 Sub 过程清除活动工作簿中 Sheet1 上的所有单元格的内容。 'Sub ClearSheet() Worksheets("Sheet1").Cells.ClearContents End Sub 本示例对所有工作簿都关闭滚动条? Application.DisplayScrollBars = False 如果具有密码保护的工作簿的文件属性没有加密,则本示例设置指定工作簿的密码加 密选项。 'Sub SetPasswordOptions() With ActiveWorkbook If .PasswordEncryptionProvider "Microsoft RSA SChannel Cryptographic Provider" Then .SetPasswordEncryptionOptions _ PasswordEncryptionProvider:="Microsoft RSA SChannel Cryptographic Provider", _ PasswordEncryptionAlgorithm:="RC4", _ PasswordEncryptionKeyLength:=56, _ PasswordEncryptionFileProperties:=True End If End With End Sub 在本示例中,如果活动工作簿不能进行写保护,那么 Microsoft Excel 设置字符串 密码以作为活动工作簿的写密码。 'Sub UseWritePassword() Dim strPassword As String strPassword = "secret" ' Set password to a string if allowed. If ActiveWorkbook.WriteReserved = False Then ActiveWorkbook.WritePassword = strPassword End If End Sub 在本示例中,Microsoft Excel 打开名为 Password.xls 的工作簿,设置它的密码 ,然后关闭该工作簿。本示例假定名为 Password.xls 的文件位于 C:\ 驱动器上。 'Sub UsePassword() Dim wkbOne As Workbook Set wkbOne = Application.Workbooks.Open("C:\Password.xls") wkbOne.Password = "secret" wkbOne.Close '注意 Password 属性可读并返回 “********”。 End Sub 本示例将 Book1.xls 的当前窗口更改为显示公式。 Workbooks("BOOK1.XLS").Worksheets("Sheet1").Activate ActiveWindow.DisplayFormulas = True '本示例接受活动工作簿中的所有更改? ActiveWorkbook.AcceptAllChanges

本示例显示活动工作簿的路径和名称 Sub UseCanonical() MsgBox '消息框 [b7] = ActiveWorkbook.FullName '当前工作簿 [b8] = ActiveWorkbook.FullNameURLEncoded '活动工作簿 End Sub 本示例显示 Microsoft Excel 启动文件夹的完整路径。 MsgBox Application.StartupPath 本示例显示活动工作簿中每个工作表的名称。 For Each ws In Worksheets MsgBox ws.Name Next ws 本示例关闭除正在运行本示例的工作簿以外的其他所有工作簿,并保存其更改内容。 For Each w In Workbooks If w.Name ThisWorkbook.Name Then w.Close savechanges:=True End If Next w Activate 事件 激活一个工作簿、工作表、图表或嵌入图表时产生此事件。 当激活工作表时,本示例对 A1:A10 区域进行排序。 Private Sub Worksheet_Activate() Range("a1:a10").Sort Key1:=Range("a1"), order:=xlAscending End Sub Calculate 事件 对于 Worksheet 对象,在对工作表进行重新计算之后产生此事件 每当工作表重新计算时,本示例就调整 A 列到 F 列的宽度。 Private Sub Worksheet_Calculate() Columns("A:F").AutoFit End Sub BeforeDoubleClick 事件 应用于 Worksheet 对象的 Activate 方法。 当双击某工作表时产生此事件,此事件先于默认的双击操作。 Private Sub expression_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) expression 引用在类模块中带有事件声明的 Worksheet 类型对象的变量。 Target 必需。双击发生时最靠近鼠标指针的单元格。 Cancel 可选。当事件发生时为 False。如果事件过程将该参数设为 True,则该 过程执行完之后将不进行默认的双击操作。 BeforeRightClick 事件 应用于 Worksheet 对象的 Activate 方法。 当用鼠标右键单击某工作表时产生此事件,此事件先于默认的右键单击操作。 Private Sub expression_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) expression 引用在类模块中带有事件声明的 Worksheet 类型对象的变量。 Target 必需。右键单击发生时最靠近鼠标指针的单元格。 Cancel 可选。当事件发生时为 False。如果该事件过程将本参数设为 True,则 该过程执行结束之后不进行默认的右键单击操作。 Change 事件 当用户更改工作表中的单元格,或外部链接引起单元格的更改时产生此事件。 Private Sub Worksheet_Change(ByVal Target As Range) Target 更改的区域。可以是多个单元格。 说明 重新计算引起的单元格更改不触发本事件。可使用 Calculate 事件俘获工作表重新 计算操作。 本示例将更改的单元格的颜色设为蓝色。 Private Sub Worksheet_Change(ByVal Target as Range) Target.Font.ColorIndex = 5 End Sub Deactivate 事件 图表、工作

表或工作簿从活动状态转为非活动状态时产生此事件。 Private Sub object_Deactivate() object Chart、Workbook 或者 Worksheet。有关对 Chart 对象使用事件的详细 信息,请参阅 Chart 对象事件的用法。 本示例当工作簿转为非活动状态时,对所有打开的窗口进行排列。 Private Sub Workbook_Deactivate() Application.Windows.Arrange xlArrange End Sub FollowHyperlink 事件 当单击工作表上的任意超链接时,发生此事件。对于应用程序级或工作簿级的事件, 请参阅 SheetFollowHyperlink 事件。 Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink) Target Hyperlink 类型,必需。一个代表超链接目标位置的 Hyperlink 对象。 本示例对在当前活动工作簿中访问过的所有链接保留一个列表或历史记录。 Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink) With UserForm1 .ListBox1.AddItem Target.Address .Show End With End Sub PivotTableUpdate 事件 发生在工作簿中的数据透视表更新之后。 Private Sub expression_PivotTableUpdate(ByVal Target As PivotTable) expression 引用在类模块中带有事件声明的 Worksheet 类型对象的变量。 Target 必需。选定的数据透视表。 本示例显示一则消息,说明数据透视表已经更新。本示例假定您已在类模块中声明了 带有事件的 Worksheet 类型的对象。 Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable) MsgBox "The PivotTable connection has been updated." End Sub SelectionChange 事件 当工作表上的选定区域发生改变时,将产生本事件。 Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) Target 新选定的区域。 本示例滚动工作簿窗口,直至选定区域位于窗口的左上角。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) With ActiveWindow .ScrollRow = Target.Row .ScrollColumn = Target.Column End With End Sub 本示例显示活动工作簿中工作表 sheet1 上单元格 A1 中的值。 MsgBox Worksheets("Sheet1").Range("A1").Value 本示例显示活动工作簿中每个工作表的名称。 For Each ws In Worksheets MsgBox ws.Name Next ws 本示例向活动工作簿添加新工作表,并设置该工作表的名称。 Set newSheet = Worksheets.Add newSheet.Name = "current Budget" 本示例关闭工作簿 Book1.xls,但不提示用户保存所作更改。Book1.xls 中的所有 更改都不会保存。 Application.DisplayAlerts = False Workbooks("BOOK1.XLS").Close Application.DisplayAlerts = True 本示例设置保存文件时显示提示,要求用户输入汇总信息。 Application.PromptForSummaryInfo = True 本示例显示 Microsoft Excel 的完整路径。 Private Sub aa() MsgBox "The path is " & Application.Path End S

ub 示例显示每一个可用加载宏的路径及文件名。 For Each a In AddIns MsgBox a.FullName Next a ChDir 语句 改变当前的目录或文件夹。 ChDir path 在 Power Macintosh 中,默认驱动器总是改为在 path 语句中指定的驱动器。完整 路径指定由卷标名开始,相对路径由冒号 ( 开始. ChDir 可以辨认路径中指定的 别名: ChDir "MacDrive:Tmp" ' 在 Macintosh 中 本示例显示当前路径分隔符。 MsgBox "The path separator character is " & _ Application.PathSeparator Move 方法 将一个指定的文件或文件夹从一个地方移动到另一个地方。 语法 object.Move destination Move 方法语法有如下几部分: 部分 描述 object 必需的。始终是一个 File 或 Folder 对象的名字。 destination 必需的。文件或文件夹要移动到的目标。不允许有通配符。 CreateFolder 方法 创建一个文件夹。 语法 object.CreateFolder(foldername) reateFolder 方法有如下几部分: 部分 描述 object 必需的。始终是一个 FileSystemObject 的名字。 foldername 必需的。字符串表达式,它标识创建的文件夹。 本示例使用 MkDir 语句来创建目录或文件夹。如果没有指定驱动器,新目录或文件 夹将会建在当前驱动器中。 MkDir "MYDIR" ' 建立新的目录或文件夹。 Name 语句示例 本示例使用 Name 语句来更改文件的名称。示例中假设所有使用到的目录或文件夹都 已存在。 在 Macintosh 中,默认驱动器名称是 “HD” 并且路径部分由冒号取代 反斜线隔开。 Dim OldName, NewName OldName = "OLDFILE": NewName = "NEWFILE" ' 定义文件名。 Name OldName As NewName ' 更改文件名。 OldName = "C:\MYDIR\OLDFILE": NewName = "C:\YOURDIR\NEWFILE" Name OldName As NewName ' 更改文件名,并移动文件。 本示例显示当前默认文件路径。 MsgBox "The current default file path is " & _ Application.DefaultFilePath 本示例设置替换启动文件夹。 Application.AltStartupPath = "C:\EXCEL\MACROS" FolderExists 方法 如果指定的文件夹存在返回 True,不存在返回 False。 语法 object.FolderExists(folderspec) 本示例在单元格中启用编辑。 Application.EditDirectlyInCell = True 程序说明: 几种用VBA在单元格输入数据的方法: Public Sub Writes() 1-- 2 方法,最简单在 "[ ]" 中输入单元格名称。 1 [A1] = 100 '在 A1 单元格输入100。 2 [A2:A4] = 10 '在 A2:A4 单元格输入10。 3-- 4 方法,采用 Range(" "), " " 中输入单元格名称。 3 Range("B1") = 200 '在 B1 单元格输入200。 4 Range("C1:C3") = 300 '在 C1:C3 单元格输入300。 5-- 6 方法,采用 Cells(Row,Column),Row是单元格行数,Column是单元格栏数。 5 Cells(1, 4) = 40

0 '在 D1 单元格输入400。 6 Range(Cells(1, 5), Cells(5, 5)) = 50 '在 E1:E 5单元格输入50。 End Sub 你点选任何单元格,按 Selection 按钮,则则所点选的单元格均会被输入文字 "Test"。 Public Sub Selection1() Selection.Value = "Test" '在任何你点选的单元格输入文字 "Test"。 End Sub VBALesson2 程序说明: 几种如何把别的工作表 Sheet4 数据,读到这个工作表的方法:在被读取的单元格 前加上工作表名称 Sheet4。 Public Sub Writes() 1-- 2 方法,最简单在被读取的 "[ ]" 前加上被读取的工作表名称 Sheet4。 1 [A1] = Sheet4.[A1] '把Sheet4 A1 单元格的数据,读到 A1单元格。 2 [A2:A4] = Sheet4.[B1] ''把 Shee4 工作表单元格 B1 数据,读到 A2:A4 单元格。 3-- 4 方法,在被读取的工作表 Range(" ")的 Range 前加上被读取的工作表名称 Sheet4。 3 Range("B1") = Sheet4.Range("B1") ''把 Shee4工作表单元格 B1 数据,读 到 B1 单元格。 4 Range("C1:C3") = Sheet4.Range("C1") '把 Shee4 工作表单元格 C1 数据 ,读到 C1:C3 单元格。 5-- 6 方法,在被读取的工作表 Cells(Row,Column),Cells 前加上被读取工作表 名称 Sheet4。 5 Cells(1, 4) = Sheet4.Cells(1, 4) '把 Shee4 工作表单元格 D1 数据,读 到 D1 单元格。 6 Range(Cells(1, 5), Cells(5, 5)) = Sheet4.Cells(1, 5) '把 Shee4 工 作表单元格 E1 数据,读到 E1:E 5单元格。 End Sub 你点选任何单元格,按 Selection 按钮,则所点选的单元格均会被输入 Shee4 工 作表单元格 F1 数据。 Public Sub Selection1() Selection.Value = Sheet4.[F1] '把 Shee4 工作表单元格 F1 数据,读到任 何你点选的单元格。 End Sub VBALesson3 程序说明: 如何利用 Worksheet_SelectionChange 输入数据的方法。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) Target = 100 End Sub Target 指的是你鼠标所选的单元格,Worksheet_SelectionChange() 事件的参数 。 可以是一个也可以是好几个单元格。 Range 是 Excel 特有的变量形态,叫范围。 Target As Rang 是把 Target 这个参数设定为 Range 变量形态。 Target = 100 是把你点选的单元格输入数字100。 VBALesson4 程序说明: 如何利用 Worksheet_SelectionChange 在限定的单元格输入数据的方法。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Row >= 2 And Target.Column = 2 Then Target = 100 End If End Sub If ... Then ... End If 这是我们学的这一个逻辑判断语句。 Target.Row >= 2,指的是鼠标选定的单元格的行大于或等于 2。 Target.Column = 2 ,指的是鼠标选定的单元格的栏等于 2。 If Target.Row >= 2 And Target.Column = 2 Then 指的是只有在Target.Row >= 2及Target.Column = 2二个

条件成立时。 就是 (Target.Row >= 2) 为True及(Target.Column = 2)为True时,才执行下面的 程序 Target=100, 也就是 B 栏第二行及以下行用鼠标被点选时,才会被输入100,其它单元格则不被输 入数据。 VBALesson5 程序说明: 比较 Worksheet_SelectionChange() 与用按钮 CommandButton1_Click() 来执行 程序二者的方法与写法有何不同。 Worksheet_SelectionChange()事件 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Row >= 2 And Target.Column = 2 Then Target = 100 End If End Sub 按钮 CommandButton1_Click() Private Sub CommandButton1_Click() If ActiveCell.Row >= 2 And ActiveCell.Column >= 3 Then ActiveCell = 100 End If End Sub 二者执行方法最大的地方,在于 Worksheet_SelectionChange() 是自动的,你不用 了解他是怎么完成工作的。 按钮 CommandButton1_Click() 是人工的,比 SelectionChange()多一道手续, 就是要去按那接钮,程序才会执行。 SelectionChange() 有一个参数 Target 可用;CommandButton1_Click ()没有。 所以我们要用 ActiveCell 内定函数来取代Target,ActiveCell 与 Target最大的 不同点他只能指定一个单元格。 就是你选取多个单元格也只有最上面的单元格会加上数据;用 Selection 取代 ActiveCell, 用法就跟 Target 一样了。 VBALesson 6 程序说明: 完整的 If...Then ┅ End 逻辑判断式。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Row >= 2 And Target.Column = 2 Then Target = 200 ElseIf Target.Row >= 2 And Target.Column = 3 Then Target = 300 ElseIf Target.Row >= 2 And Target.Column = 2 Then Target = 400 Else Target = 500 End If End Sub 这是个完整的 If 逻辑判断式,意思是说,假如 If 後的判断式条件成立的话,就 执行第二条程序,否则假如 ElseIf 後的判断式条件成立的话,就执行第四条程序 ,否则假如另一个 ElseIf 後的判断式条件成立的话,就执行第六条程序。 Else 的意思是说,假如以上条件都不成立的话,就执行第八条程序。 他的执行方式是假如 IF 的条件成立的话,就不执行其它ElseIf 及Else 的逻辑判 断式,假如 If 後的条件不成立的话才会执行 ElseIf 或 Else 逻辑判断式。第二 个 ElseIf後的条件因为与 IF 後的条件一样,所以这个判断式後面的 Target=400 将是永远无法执行到的程序。 VBALesson 7 程序说明∶我们为什麽要用变数。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim i , j As Integer Dim k As Range i = Target.Row j = Target.Column Set k = Target If i >= 2 And j = 2 Then k = 200 ElseIf i >= 2 And j = 3 Then k = 300 ElseIf i >= 2 And j = 4 Then k = 400 Else k = 500 End If

End Sub 跟VBALesson 6比较,程序是不是明朗多了,在前课重复的用 Target.Row, Target.Column及Target来写程序是不是有一点烦。用变量的第一个好处大家马上感 觉得出来,就是可以简化程序。 使用变量前,你得先宣告变量。宣告变量的方法是在 "Dim " 后面写上变量 " i " As 后面接上变量的形态 "Integer"。 Dim i , j As Integer 就是宣告 i 与 j 为整数变量,这是同时宣告二个变量 i 与 j 所以要在二个变量间加个 " , "号。 Dim k As Range 是宣告 k 为范围资料形态,Range这是 Excel 特有的资料形态 。 i = Target.Row是把当前单元格的行数,指定给变量 i。 j = Target.Column 是把当前单元格的栏数,指定给变量 j。 Set k = Target 是把当前的单元格,指定给变量 k。 用像 i 与 j 这样简单的变量,在程序的前面你可能还记得 i 或 j 代表着 什厶。程序写长了,你可能忘记 i 或 j 代表着什厶。所以最好的方法是用比较有 意义的代号,来为变量命名如 iRow 或 iCol 来取代 i 及 j 。 VBALesson 8 程序说明∶体会一下Worksheet_Change()事件。 Private Sub Worksheet_Change(ByVal Target As Range) Dim iRow, iCol As Integer iRow = Target.Row iCol = Target.Column If iRow >= 2 And iCol = 2 And Target "" Then Application.EnableEvents = False Cells(iRow, iCol + 1) = Cells(iRow, iCol) * 2 Application.EnableEvents = True ElseIf iRow >= 2 And iCol = 2 And Target = "" Then Cells(iRow, iCol + 1) = "" Else Cells(iRow, iCol + 1) = "" End If End Sub 前几个教程都是用Worksheet_SelectionChange 事件来举例子,大家应该能体会他 是怎厶一回事了吧。 这个教程就是要让你来体会什厶是Worksheet_Chang()事件。因为这二个事件在VBA 都是非常有用的,所以一定要了解。 简单的说,前者是你鼠标移动到那个单元格,就触发那个事件的执行。後者是要等到 你点选的单元格,数

更多相关推荐:
要精简文件简报

要精简文件简报切实改进文风没有实质内容可发可不发的文件简报一律不发要规范出访活动从外交工作大局需要出发合理安排出访活动严格控制出访随行人员严格按照规定乘坐交通工具一般不安排中资机构华侨华人留学生代表等到机场迎送...

公文处理暨精简文件简报经验交流材料

学习为先制度为要切实规范公文处理和文件简报工作中共XXXX办公室尊敬的各位领导各位同仁XX历来都非常重视规范文件简报工作将其纳入全市XXXX活动的重要内容作为提升新形象打造新队伍推进办公标准化建设的有力举措近年...

精简会议、精简文件、精简简报实施意见(工作方案)

关于精简会议精简文件精简简报的实施意见为改进机关作风提高工作效率切实解决会议频繁文件过多简报过滥的问题根据中央八项规定和关于改进工作作风密切联系群众的具体办法结合四风整治会战工作部署现就进一步精简会议文件和简报...

20xx第15期“文明礼仪”阶段性总结表彰大会简报

第十五期奉节夔门高级中学二一二年五月一日激励先进鞭策后进夔门高中文明礼仪阶段性总结表彰大会为实现安全质量和谐的教育教学目标夔门高中于三月五日起在全校开展说文明话行文明举做文明人展夔中风采为宗旨的文明礼仪教育活动...

台湾学习与培训总结与感受精简版

台湾培训学习感悟与总结怀着求知与渴望的心情我们先后在圣约翰科技大学建国科技大学进行了交流学习先将有关总结与感受总结如下一大学学院和系部运行体系的架构1建国科技大学和圣约翰科技大学已经升级为本科附带研究生班的科技...

一建绝对内幕、重点、精简总结(法规)

一建法律法规一建设工程基本法律知识1宪法宪法组织法选举法国籍法民族区域自治法2民法调整平等主体的公民间法人间及公民与法人间的财产关系和人身关系的法律的总称3民商法包括民法通则合同法物权法侵权责任法公司法招标投标...

出纳工作总结精简版

出纳工作总结精简版,内容附图。

人力资源管理师三级必过精简总结1

第一章人力资源规划1人力资源规划指为实施企业的发展战略完成企业的生产经营目标根据企业内外环境和条件的变化运用科学的方法对企业人力资源的需求和供给进行预测制定相宜的政策和措施从而使企业人力资源供给和需求达到平衡实...

总结材料 Microsoft Word 文档

校本课程开发经验材料努力谱写高中新课程改革的光辉篇章校本课程开发工作总结材料为深入贯彻辽宁省教育厅关于下发辽宁省普通高中课程改革工作方案和辽宁省普通高中校本课程开发与实施工作方案等文件精神根据丹东市教育局制定的...

java IO文件输入输出流总结

文件输入与输出以流的形式进行同时根据内容不同分为字节和字符两种字节流的读取与写入读取步骤FileFileInputStreamfreadbytes写入步骤FileFileOutputStreamfwriteby...

【20xx】53号文件总结

开展全国建设工程质量安全监督执法检查活动工作总结为认真贯彻落实安吉县住房和城乡建设局关于转发湖州市住房和城乡建设局转发建设部办公厅省建设厅关于组织开展全国建设工程质量安全监督执法检查的通知的文件精神按照安吉县住...

AVI文件操作总结

AVI文件操作总结1加入Vfw32lib并includeltVfwhgt2主要函数说明AVIFileInit函数初始化AVIFile函数库AVIFileOpen函数打开AVI文件AVIFileInfo函数获得A...

精简文件简报总结(4篇)