Excel VBA命令大全

Excel VBA命令大全
Excel VBA命令大全

本示例为设置密码窗口 (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 https://www.360docs.net/doc/831259868.html, https://www.360docs.net/doc/831259868.html, Then w.Close SaveChanges:=True End If Next w '每次打开工作簿时,本示例都最大化 Microsoft Excel 窗口。 Application.WindowState = xlMaximized '

本示例显示活动工作表的名称。 MsgBox "The name of the active sheet is " & https://www.360docs.net/doc/831259868.html, '

本示例保存当前活动工作簿的副本。 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 https://www.360docs.net/doc/831259868.html, Next ws 本示例向活动工作簿添加新工作表 , 并设置该工作表的名称? Set NewSheet = Worksheets.Add https://www.360docs.net/doc/831259868.html, = "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) https://www.360docs.net/doc/831259868.html, = "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:=Range("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 https://www.360docs.net/doc/831259868.html, Next ws 本示例关闭除正在运行本示例的工作簿以外的其他所有工作簿,并保存其更改内容。 For Each w In Workbooks If https://www.360docs.net/doc/831259868.html, https://www.360docs.net/doc/831259868.html, 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 https://www.360docs.net/doc/831259868.html, Next ws 本示例向活动工作簿添加新工作表,并设置该工作表的名称。Set newSheet = Worksheets.Add https://www.360docs.net/doc/831259868.html, = "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 Sub 示例显示每一个可用加载宏的路径及文件名。 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) = 400 '在 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 都是非常有用的,所以一定要了解。简单的说,前者是你鼠标移动到那个单元格,就触发那个事件的执行。後者是要等到你点选的单元格,数有了改变才会触发事件的执行。二者执行的时机一前一後。 Target "" 是代表限定当前的单元格要是有数的,才会执行以下三行的程序。 Cells(iRow, iCol + 1) = Cells(iRow, iCol) * 2,是你在 B 栏输入数时,C 栏将可得到 B 栏二倍的数。 Target = "" 是限定当前的单元格要是没有数的,才会执行以下一行的程序。 Cells(iRow, iCol + 1) = "",是把 C 栏的数清成空格。 Application.EnableEvents = False与Application.EnableEvents = True,这是个成双的程序,当你用了前者记得在执行其他程序後要写上後面的程序。它的目的在抑制事件连锁执行。简单的说就是,在 B 字段所触发的事件,不愿在其它单元格再触发另一个Worksheet_Change()事件。VBALesson 9 程序说明∶体会一下Worksheet_Change()事件连锁反应。Private Sub Worksheet_Change(ByVal Target As Range) Dim iRow As Integer iRow = Target.Row Application.EnableEvents = False Cells(iRow, 3) = Cells(iRow, 3) + Cells(iRow, 2) Application.EnableEvents = True End Sub Private Sub Worksheet_Change(ByVal Target As Range) Dim iRow As Integer iRow = Target.Row 'Application.EnableEvents = False Cells(iRow, 3) = Cells(iRow, 3) + Cells(iRow, 2) 'Application.EnableEvents = True End Sub 这个程序的目的是要在 B2 输入新的数时,C2 会将 B2 输入的新数加上 C2 原有的数呈现在 C2 上。照上面有加上Application.EnableEvents = False 程序执行当然没问题。现在你在 Application.EnableEvents = False 与 Application.EnableEvents = True 前加上「 '」看看。程序前加上「 '」的目的是要使「 '」之后的文字变成说明文字,程序执行时是会跳过说明文字,不执行说明文字的内容。程序前加上「 '」符号后,文字会变成绿色。执行第二个程序时,你将发现 C2 不会按你所要求的,呈现结果。这就是所谓的事件连锁反应。请问这个宏该如何写! 我想运行一个宏,就能在当前工作表B3上填上一条公式;这条公式的结果是所有工作表上的B4单元格的和.请问这个宏该如何写.谢谢! Sub gg() Dim sh As Worksheet, shname$ For Each sh In Worksheets shname = https://www.360docs.net/doc/831259868.html, ActiveSheet.Range("b3").value = ActiveSheet.Range("b3").value +Worksheets(shname).Range("b4") Next End Sub VBA中怎样创建一个名为“table”的新工作表通过VBA编程,很容易添加新的工作表,但是新表的名字不知怎样控制,对

于新创建的工作表,由于其名字并非特定,所以就不好使用所创建的新表了。不知各位有何高见。。。。Sheets.Add https://www.360docs.net/doc/831259868.html, = "table" 请教:如何用VBA检索表1中A列与表2,3,4,5.....中A 列相同的行并把后者整行拷贝到表1检索到的行中,谢谢!!!! To yxptwq∶用这程序试看看。 Sub Copy1() Dim Row_dn1, Row_dnN, i, j, n As Integer Row_dn1 = Sheet1.Range("A65536").End(xlUp).Row k = 1: n = 1 For Each wSheet In ActiveWorkbook.Worksheets With wSheet If .Name "Sheet1" Then Row_dnN = .Range("A65536").End(xlUp).Row For i = 2 To Row_dn1 For j = 2 To Row_dnN If .Cells(j, 1) = Sheet1.Cells(i, 1) Then .Rows(j & ":" & j).Copy Destination:=Sheet1.Rows(Row_dn1 + n & ":" & Row_dn1 + n) n = n + 1 End If Next j Next i End If End With Next wSheet End Sub 如果要用VBA 程式输入密码使用下列程式码 Sub EnterNewPW() '程式说明:利用SendKey输入VBAProject密码 '注意事项:执行本程式需要在Excel视窗,不能在VBE视窗 Application.SendKeys "%{F11}", True 'Alt + F11 切换到VBA视窗Application.SendKeys "%T", True 'ALT + T 工具(繁体中文是(T)) Application.SendKeys "e", True '工具(T)-VBproject属性(E) Application.SendKeys "^{TAB}", True 'TAB 键(切换到PAge2 保护页面) Application.SendKeys "{+}", True '选取Checkbox方块(锁定专案以供检视) '({+} 选取, {-} 取消选取) Application.SendKeys "{TAB}", True 'TAB 键(跳到第一次输入密码 Textbox myPW = "chijanzen" '假设密码 chijanzen Application.SendKeys myPW, True '输入密码Application.SendKeys "{TAB}", True 'TAB 键(跳到第二次输入密码Textbox Application.SendKeys myPW, True '输入密码 Application.SendKeys "{ENTER}", True '按确定钮(预设值) Application.SendKeys "%{F11}", True '返回Excel视窗 End Sub 冒泡排序法:冒泡排序法之所以成为“冒泡排序”是因为值较小的或是较轻的元素浮到作为继续排序的一组数的顶部。 Sub Macro1() Dim i As Integer Dim j As Integer Dim t as integer Static number(1 To 10) As Integer For i = 1 To 10 number(i) = inputbox“输入要排序的数:” Next i For i = 10To 2 Step -1 For j = 1 To i –1 ‘下面进行位置交换 If number(j) > number(j + 1) Then t = number(j + 1) number(j + 1) = number(j) number(j) = t End If Next j Next i For i = 1 To 20 Print number(i) Next i End sub 首先定义一个数组:通过循环录入10个整数,然后用一个二重循环测试前一个数是否大于后一个数。如果大于则交换两个数的下标,即交换两个数在数组中的位置,交换通过一个变量来进行。我先用传统的方法解决这个问题,经过比较,选用了较为简单的和高效的排序方法——“快速排序”,具体算法可参考数据结构等有关书籍。对所有数据排序后再合并相同数据,合并程序较为简便,我开始时采用了这种方法,但后来发现对于这些的数据,先合并后排序速度更快,因为有大量相同的数据。合并是采用“标记”算法,具体如下:(设数据已存放在sData()数组中,结果存到Queryp()数组, Amount 是数据个数) '把相同元素置 0 For i = 1 To Amount If sData(i) 0 Then For j = i + 1 To Amount If sData(i) = sData(j) Then sData(j) = 0 Next j End If Next i '删除相同元素 Queryp(1) = sData(1) k = 1 For i = 2 To Amount If Not (sData(i) = 0) Then k = k + 1 Queryp(k) = sData(i) End If Next i kMax = k ReDim Preserve Queryp(kMax) 虽然这样使得运算速度有所高,但是仍然要进行大量的循环运算,占据了程序大部分的运算时间。于是我一直在寻觅一种更为高效的算法。功夫不负有心人,在仔细分析数据的特征,比较了多种方案之后,我终于找到了一种相当成功的算法,原来要3到4秒的运算缩短到仅需0.1到0.2秒。我遇到的数据具有以下特征:①相同数据很多,②最大、最小数之间相差不到3,③都是带两位小数的正数。针对数据的特征,我采用了以下算法:针对数据的特征,我采用了以下算法:步骤: 1.用一个循环找出整数和小数部分的最大、最小值。小数部分的最大、最小值乘以100转为整数。 2.定义一个二维数组,下标范围分别是整数和小数部分的最小值到最大值。 3.再用一个循环把所有源数据填入刚才定义的二维数组,填写规则是,源数据的整数和小数部分分别对应二维数组的两个下标。例如,“13.51"填到“A(13,51)" 中。 4.最后顺向或逆向读取二维数组中的非零数据即可得到从小到大或从大到小排列的数据,而且不会含有重复数据。用VB 编写的程序如下: '****密集型数据处理**** Dim i As Long, j As Long, k As Long, kMax As Long Dim Queryp() As Single ReDim Queryp(Amount) Dim IntegerPart As Integer, DecimalPart As Integer Dim IPmax As

Integer, IPmin As Integer Dim DPmax As Integer, DPmin As Integer Dim DiffDataArray() '读取数据 ReadData IPmax = 0: IPmin = 1000 DPmax = 0: DPmin = 99 For i = 1 To Amount ' 找整数和小数部分的最大、最小值 IntegerPart = Int(sData(i)) DecimalPart = (sData(i) - IntegerPart) * 100 If IntegerPart > IPmax Then IPmax = IntegerPart ElseIf IntegerPart DPmax Then DPmax = DecimalPart ElseIf DecimalPart 0 Then k = k + 1 Queryp(k) = DiffDataArray(i, j) End If Next j Next i kMax = k ReDim Preserve Queryp(kMax) 该方法对于本人遇到的这种“密集型”数据最为有效,但是如果遇上“稀疏型”数据,例如最大、最小值相差几千,甚至上万的数据,就没什么优势了,而且会占用较大的内存。经过改进,我得到了处理稀疏型数据的高效算法。高效的前提条件同样是源数据具有大量相同数据。思路是在前一种方法的基础上增加一个单维数组,用来保存整数部分数据,保存过程中用插入法对其进行排序。因为有大量重复数据,要排序的数据量相对较少。当从二维数组中读取数据时,用单维数组代入二维数组的第一个下标,具体代码下: '****稀疏型数据处理**** Dim i As Long, j As Long, k As Long, kMax As Long Dim Queryp() As Single ReDim Queryp(Amount) Dim IntegerPart As Integer, DecimalPart As Integer Dim IPmax As Integer, IPmin As Integer Dim DPmax As Integer, DPmin As Integer Dim IPArray() As Integer, IPAamount As Integer ReDim IPArray(Amount) Dim DiffDataArray() '读取数据 ReadData IPmax = 0: IPmin = 1000 DPmax = 0: DPmin = 99 IPAamount = 0 For i = 1 To Amount '获取整数和小数部分的最大最小值 IntegerPart = Int(sData(i)) DecimalPart = (sData(i) - IntegerPart) * 100 If IntegerPart > IPmax Then IPmax = IntegerPart ElseIf IntegerPart DPmax Then DPmax = DecimalPart ElseIf DecimalPart IPArray(j) Then IPAamount = IPAamount + 1 For k = IPAamount To j + 1 Step -1 IPArray(k) = IPArray(k - 1) Next k IPArray(j) = IntegerPart Exit For ElseIf IntegerPart = IPArray(j) Then Exit For End If Next j If j > IPAamount Then IPAamount = IPAamount + 1 IPArray(IPAamount) = IntegerPart End If Next i ReDim DiffDataArray(IPmin To IPmax, DPmin To DPmax) '填入数据 For i = 1 To Amount IntegerPart = Int(sData(i)) DecimalPart = (sData(i) -IntegerPart) *100 DiffDataArray(IntegerPart, DecimalPart) = sData(i) Next i '提取数据 k = 0 For i = 1 To IPAamount For j = DPmax To DPmin Step -1 If DiffDataArray(IPArray(i), j) 0 Then k = k + 1 Queryp(k) = DiffDataArray(IPArray (i), j) End If Next j Next i kMax = k ReDim Preserve Queryp(kMax) k ReDim Preserve Queryp(kMax) 具体采用哪种算法,要看数据的性质而定,以下是本人的一些实测数据,仅供参考。如果你有更好的方法,可不要忘记和朋友们分享哦。自动隐藏表格中无数据的行表1 是数据源,经常改变;表2 引用表1 中某列有数据的单元格(利用动态位址已实现。)由于表1 的改变,表2 的大小随之而变。问题:如何实现表2 中没有数据的行(有公式)自动隐藏?谢谢赐教! Sub abc() For i = 1 To 300 If Cells(i, 1).value = "" Then Rows(i).Hidden = True Next i End Sub 你写的语句可以解决隐藏的问题,可是如果我执行了它之后,再在表1中增加数据,表2不会自动显示有了数据的行。如何修改?将此宏设为自动运行(打开文件时) Sub abc() For i = 1 To 300 If Cells(i, 1).value "" Then Rows(i).Hidden = false Next i End Sub 用VBA如何自动合并列的内容?用VBA如何自动合并列的内容? To hongjian :Sub MergeTest() For i = 3 To 30 Cells(i, 3) = Cells(i, 1) & Chr(10) & Cells(i, 2) Next End Sub 基于VB和EXCEL的报表设计及打印在现代管理信息系统的开发中,经常涉及到数据信息的分析、加工,最终还需把统计结果形成各种形式的报表提供给领导决策参考,或进行外部交流。在Visual Basic 中制作报表,通常是用数据环境设计器(Data Environment Designer)与数据报表设计器(Data Report Designer),或者使用第三方产品来完成。但对于大多数习惯于Excel报表的用户而言,用以上方法生成的报表在格式和功能等方面往往不能满足他们的要求。由于Excel具有自己的对象库,在Visual Basic 工程中可以加以引用,通过对Excel使用OLE自动化,可以创建一些外观整洁的报表,然后打印输出。这样实现了Visual Basi应用程序对Excel的控制。本文将针对一个具体实例,阐述基于VB和EXCEL的报表设计及打印过程。1)创建Excel对象Excel对象模型包括了128个不同的对象,从矩形、文本框等简单的对象到透视表,图表等复杂的对象。下面简单介绍一下其中最重要,也是用得最多的五个对

象。(1)Application对象Application对象处于Excel对象层次结构的顶层,表示 Excel自身的运行环境。(2)Workbook对象Workbook对象直接地处于Application对象的下层,表示一个Excel工作薄文件。(3)Worksheet对象Worksheet对象包含于Workbook对象,表示一个Excel 工作表。(4)Range对象Range对象包含于Worksheet对象,表示 Excel工作表中的一个或多个单元格。(5)Cells对象Cells对象包含于Worksheet对象,表示Excel工作表中的一个单元格。如果要启动一个Excel,使用Workbook和Worksheet对象,下面的代码启动了Excel并创建了一个新的包含一个工作表的工作薄: Dim zsbexcel As Excel.Application Set zsbexcel = New Excel.Application zsbexcel.Visible = True 如要Excel不可见,可使zsbexcel.Visible = False zsbexcel.SheetsInNewWorkbook = 1 Set zsbworkbook = zsbexcel.Workbooks.Add 2)设置单元格和区域值要设置一张工作表中每个单元格的值,可以使用Worksheet对象的 Range属性或Cells 属性。 With zsbexcel.ActiveSheet .Cells(1, 2).value = "100" .Cells(2, 2).value = "200" .Cells(3, 2).value = "=SUM(B1:B2)" .Range("A3:A9") = "中国人民解放军" End With 要设置单元格或区域的字体、边框,可以利用Range对象或Cells对象的Borders 属性和Font属性:With objexcel.ActiveSheet.Range("A2:K9").Borders'边框设置.Line = xlBorderLine .Weight = xlThin .ColorIndex = 1 End With With objexcel.ActiveSheet.Range("A3:K9").Font '字体设置.Size = 14 .Bold = True .Italic = True .ColorIndex = 3 End With 通过对Excel单元格和区域值的各种设置的深入了解,可以创建各种复杂、美观、满足需要的、具有自己特点的报表。3)预览及打印生成所需要的工作表后,就可以对EXCEL发出预览、打印指令了。zsbexcel.ActiveSheet.PageSetup.Orientation = xlPortrait' 设置打印方向zsbexcel.ActiveSheet.PageSetup.PaperSize = xlPaperA4' 设置打印纸的打下zsbexcel.Caption = "打印预览"'设置预览窗口的标题zsbexcel.ActiveSheet.PrintPreview '打印预览zsbexcel.ActiveSheet.PrintOut '打印输出通过打印方向、打印纸张大小的设置,不断进行预览,直到满意为止,最终进行打印输出。为了在退出应用程序后EXCEL不提示用户是否保存已修改的文件,需使用如下语句:zsbexcel.DisplayAlerts = False zsbexcel.Quit '退出EXCEL zsbexcel.DisplayAlerts = True 如此设计的报表打印是通过 EXCEL程序来后台实现的。对于使用者来说,根本看不到具体过程,只看到一张张漂亮的报表轻易地被打印出来了。4)具体实例下面给出一个具体实例,它在window98、Visual Basic 6.0、Microsoft Office97的环境下调试通过。在VB中启动一个新的Standard EXE工程,在“工程”菜单的“引用”选项下引用Excel Object Library;然后在Form中添加一个命令按钮cmdExcel;最后在窗体中输入如下代码:Dim zsbexcel As Excel.Application Private Sub cmdExcel_Click() Set zsbexcel = New Excel.Application zsbexcel.Visible = True zsbexcel.SheetsInNewWorkbook = 1 Set zsbworkbook = zsbexcel.Workbooks.Add With zsbexcel.ActiveSheet.Range("A2:C9").Borders '边框设置.Line = xlBorderLine .Weight = xlThin .ColorIndex = 1 End With With zsbexcel.ActiveSheet.Range("A3:C9").Font '字体设置 .Size = 14 .Bold = True .Italic = True .ColorIndex = 3 End With zsbexcel.ActiveSheet.Rows.HorizontalAlignment = xlVAlignCenter'水平居中zsbexcel.ActiveSheet.Rows.VerticalAlignment = xlVAlignCenter'垂直居中With zsbexcel.ActiveSheet .Cells(1, 2).value = "100" .Cells(2, 2).value = "200" .Cells(3, 2).value = "=SUM(B1:B2)" .Cells(1, 3).value = "中国人民解放军" .Range("A3:A9") = "50" End With zsbexcel.ActiveSheet.PageSetup.Orientation = xlPortrait' xlLandscape zsbexcel.ActiveSheet.PageSetup.PaperSize = xlPaperA4 zsbexcel.ActiveSheet.PrintOut zsbexcel.DisplayAlerts = False zsbexcel.Quit

zsbexcel.DisplayAlerts = True Set zsbexcel = Nothing 提高EXCEL中VBA的效率方法1:尽量使用VBA原有的属性、方法和Worksheet函数由于Excel对象多达百多个,对象的属性、方法、事件多不胜数,对于初学者来说可能对它们不全部了解,这就产生了编程者经常编写与Excel对象的属性、方法相同功能的VBA代码段,而这些代码段的运行效率显然与Excel对象的属性、方法完成任务的速度相差甚大。例如用Range的属性CurrentRegion来返回 Range 对象,该对象代表当前区。(当前区指以任意空白行及空白列的组合为边界的区域)。同样功能的VBA代码需数十行。因此编程前应尽可能多地了解Excel对象的属性、方法。充分利用Worksheet函数是提高程序运行速度的极度有效的方法。如求平均工资的例子:For Each c In Worksheet(1).Range(″A1:A1000″) Totalvalue = Totalvalue + c.value Next Averagevalue = Totalvalue / Worksheet(1).Range(″ A1:A1000″).Rows.Cou nt 而下面代码程序比上面例子快得多:Averagevalue="/blog/Application.WorksheetFunction.Average(Worksheets (1).Range(″A1:A1000″)) 其它函数如Count,Counta,Countif,Match,Lookup等等,都能代替相同功能的VBA程序代码,提高程序的运行速度。方法2:尽量减少使用对象引用,尤其在循环中每一个Excel对象的属性、方法的调用都需要通过OLE接口的一个或多个调用,这些OLE调用都是需要时间的,减少使用对象引用能加快VBA代码的运行。例如1.使用With语句。Workbooks(1).Sheets(1).Range(″A1:A1000″)https://www.360docs.net/doc/831259868.html,=″Pay″

Workbooks(1).Sheets(1).Range(″A1:A1000″).Font.Font ... 则以下语句比上面的快With Workbooks(1).Sheets(1).Range(″A1:A1000″).Font .Name = ″Pay″ .Font = ″Bold″ ... End With 2.使用对象变量。如果你发现一个对象引用被多次使用,则你可以将此对象用Set 设置为对象变量,以减少对对象的访问。如:Workbooks(1).Sheets(1).Range(″A1″).value = 100 Workbooks(1).Sheets(1).Range(″A2″).value = 200 则以下代码比上面的要快:Set MySheet = Workbooks(1).Sheets(1) MySh eet.Range(″A1″).value = 100 MySheet.Range(″A2″).value = 200 3.在循环中要尽量减少对象的访问。For k = 1 To 1000 Sheets(″Sheet1″).Select Cells(k,1).value = Cells(1,1).value Next k 则以下代码比上面的要快:Set Thevalue = Cells(1,1).value Sheets(″Sheet1″).Select For k = 1 To 1000 Cells(k,1).value = Thevalue Next k 方法3:减少对象的激活和选择如果你的通过录制宏来学习VBA的,则你的VBA程序里一定充满了对象的激活和选择,例如Workbooks(XXX).Activate、Sheets(XXX).Select、Range(XXX).Select等,但事实上大多数情况下这些操作不是必需的。例如Sheets(″Sheet3″).Select Range(″A1″).value = 100 Range(″A2″).value = 200 可改为:With Sheets(″Sheet3″) .Range(″A1″).value = 100 .Range(″A2″).value = 200 End With 方法4:关闭屏幕更新如果你的VBA程序前面三条做得比较差,则关闭屏幕更新是提高VBA程序运行速度的最有效的方法,缩短运行时间2/3左右。关闭屏幕更新的方法:Application.ScreenUpdate = False 请不要忘记VBA程序运行结束时再将该值设回来:Application.ScreenUpdate = True 以上是提高VBA运行效率的比较有效的几种方法本示例重复最近用户界面命令。本示例必须放在宏的第一行。 Application.Repeat 下例中,变量 counter 代替了行号。此过程将在单元格区域 C1:C20 中循环,将所有绝对值小于 0.01 的数字都设置为0(零)。Sub RoundToZero1() For Counter = 1 To 20 Set curCell = Worksheets("Sheet1").Cells(Counter, 3) If Abs(curCell.Value) 0 Then ' Application.ActivePrinter = "//zdserver2/HP LaserJet 5000 PCL 6 在Ne00:" '指定打印机ActiveWindow.SelectedSheets.PrintOut Copies:=myPrintNum, Collate:=True '设置打印信息,其中Copies:=myPrint为打印份数 Else MsgBox "请输入要打印的份数" End If ActiveSheet.ShowAllData '全部显示 ActiveSheet.Protect Password:=641112 ' 保护工作表并设置密码 Sheets("封面").Select Application.ScreenUpdating = True End Sub Sub 打印余额() Application.ScreenUpdating = False

Sheets("余额表").Select Call 重算所有表 ActiveSheet.Unprotect Password:=641112 '撤消工作表保护并取消密码 ActiveWindow.ScrollColumn = 10 Selection.AutoFilter Field:=1, Criteria1:="" '以下10行弹出窗口输入打印信息 Dim myPrintNum As Integer Dim myPrompt, myTitle As String myPrompt = "请输入要打印的份数" myTitle = "打印选取范围" myPrintNum = Application.InputBox(myPrompt, myTitle, 4, , , , , 1) If myPrintNum 0 Then ' Application.ActivePrinter = "//zdserver2/HP LaserJet 5000 PCL 6 在 Ne00:" ' '指定打印机 ActiveWindow.SelectedSheets.PrintOut Copies:=myPrintNum, Collate:=True '设置打印信息,其中Copies:=myPrint为打印份数 Else MsgBox "请输入要打印的份数" End If ActiveSheet.ShowAllData '全部显示 ActiveSheet.Protect Password:=641112 ' 保护工作表并设置密码 Sheets("封面").Select Application.ScreenUpdating = True End Sub Sub 备份() Dim y '变量声明-需保存工作表的路径和名称 [M1] = ActiveWorkbook.FullName '单元格M1=当前工作簿的路径和名称 y = cells(1, 14) 'Y=单元格N1的值,即计算后的需保存工作簿的路径和名称 Worksheets("封面").UsedRange.Columns("M:N").Calculate '计算指定区域 ActiveWorkbook.SaveCopyAs y '备份到指定路么Y End Sub Sub 重算活动表() With Application .Calculation = xlManual .MaxChange = 0.001 End With ActiveWorkbook.PrecisionAsDisplayed = True ActiveWindow.DisplayZeros = True ActiveSheet.Calculate End Sub Sub 重算指定表() Attribute 重算指定表.VB_ProcData.VB_Invoke_Func = "z/n14" Worksheets("银行帐").Calculate Worksheets("日报表").Calculate End Sub 单元格数据改变引起计算激活过程 Private Sub Worksheet_Change(ByVal Target As Range) Dim irow, icol As Integer irow = Target.Row '变量行irow icol = Target.Column '变量列icol If irow > 6 And icol = 3 And cells(irow, 3) >= cells(irow - 1, 3) Then '>大于6行,并且第3列,当本行 3列>2行3列 Application.EnableEvents = False cells(irow, 2) = cells(irow - 1, 2) '本行 2 列=上一行2列 Application.EnableEvents = True ElseIf irow > 6 And icol = 3 And cells(irow, 3) 大于6行,并且第3列,当本行 3列>2行3列 Application.EnableEvents = False cells(irow, 2) = cells(irow - 1, 2) + 1 '本行 2 列=上行2列+1 Application.EnableEvents = True ElseIf (icol = 3 Or icol = 4 Or icol = 6 Or icol = 8 Or icol = 9 Or icol = 10 Or icol = 12 Or icol = 13) And irow > 6 Then 'And Target "" Application.EnableEvents = False cells(irow, 5) = "=单位名称" cells(irow, 7) = "=摘要" cells(irow, 11) = "=余额" Range(cells(irow, 14), cells(irow, 16)) = "=预内外收支NOP" cells(irow, 17) = "=审核Q" cells(irow, 18) = "=对帐U" Range(cells(irow, 19), cells(irow, 20)) = "=内转收支XY" cells(irow, 21) = "=政采Z" Application.EnableEvents = True End If End Sub '计算当前工作表路径及名称的函数,可作为单元格公式,也可写入宏 =CELL("FILENAME") '改变Excel界面标题的宏 Private Sub Workbook_Open() Application.Caption = "吃过了" End Sub '自动刷新单元格A1内显示的日期/时间的宏 Sub mytime() Range("a1") = Now() Application.OnTime Now + TimeValue("00:00:01"), "mytime" End Sub '用单元格A1的内容作为文件名保存当前工作簿的宏 Sub b() ActiveWorkbook.SaveCopyAs Range("A1") + ".xls" End Sub '激活窗体的宏,此宏写入有窗体的工作表内 Private Sub CommandButton1_Click() '点数据录入按钮控件激活窗体 Load UserForm3 '激活窗体 UserForm3.StartUpPosition = 3 '激活窗体UserForm3.Show '激活窗体 End Sub '以下为窗体中点击各按钮运行的宏,写入窗体内 Public pos As Integer '声明变量pos '战友确定按钮语句Private Sub CommandButton1_Click() Application.ScreenUpdating = False '此句和最后一句旨在不显示宏的执行过程 'On Error GoTo ErrorHandle '可以不要 'ErrorHandle: '可以不要 'If Err.Number = 13 Then '可以不要 'Exit Sub '可以不要 'End If '可以不要 Call writeToWorkSheet '执行宏writetoworksheet UserForm3.Hide '退出窗体,继续按钮少此句,退出按钮执行此句 Unload UserForm3 '退出窗体,继续按钮少此句,退出按钮执行此句 Call 批量打印 '[此处到接顺序2] [L2] = "" '[到此处结束] Sheets("打印信息").Select Application.ScreenUpdating = True End Sub '退出按钮语句 Private Sub CommandButton2_Click() UserForm3.Hide Unload UserForm3 End Sub '将窗体内的文本框中的数据写进工作表的单元格 Private

Sub writeToWorkSheet() ActiveSheet.Range("k2") = TextBox1.Value '将文字框内容写进k列ActiveSheet.Range("l2") = TextBox2.Value '将文字框内容写进l列 TextBox1.Value = "" '清空文字框内容 TextBox2.Value = "" '清空文字框内容 Worksheets("打印信息").Range("a2").Value = 1 '给指定表的单元格写入数据 Worksheets("打印信息").Range("B3:E113").Value = "" '清空指定表的单元格数据End Sub '以下为根据条件打印的宏Sub 打印() '部门明细查询及批星打印Application.ScreenUpdating = False '关闭屏幕更新 If Cells(1, 4) = "" And Cells(1, 5) = "" Then '打印条件Cells(3, 13) = 1 And ' Application.ActivePrinter = "//zdserver2/HP LaserJet 5000 PCL 6 在 Ne00:" ' '指定打印机 ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True '设置默认打印机的打印信息,其中Copies:=myPrint为打印份数 Else Call 打印信息 '打倒为假时执行 End If Application.ScreenUpdating = True '关闭屏幕更新 End Sub '以下的循环过程,也用于批量打印,Z 的值可以是Z=1 TO 5(1到5),也可是单元格的内容 Sub 批量打印() For Z = Cells(1, 11) To Cells(1, 12) '变量X的值从打印起始号K1到结束号L1之间逐渐递增 Cells(1, 13) = Z 'M1的值等于变量X Next Z End Sub '以下是将打印情况写入工作表的宏 Sub 打印信息() Application.ScreenUpdating = False '关闭屏幕更新 Dim Y '声明变量 Y = https://www.360docs.net/doc/831259868.html, '判定活动工作表名称 Sheets("打印信息").Select X = 3 '从第3行开始 Do While Not (IsEmpty(Cells(X, 2).Value)) '判断第1列的最后一行(即空行的上一行) X = X + 1 '在最后一行加一行即为空行 Loop Cells(X, 2) = Cells(2, 1) Cells(X, 3) = Sheets(Y).Cells(4, 3) Cells(2, 1) = Cells(2, 1) + 1 Cells(X, 4) = Sheets(Y).Cells(1, 4) Cells(X, 5) = Sheets(Y).Cells(1, 5) [c1] = Y Sheets(Y).Select '返回上一次打开的工作表Application.ScreenUpdating = True '打开屏幕更新 End Sub 将文件保存为以某一单元格中的值为文件名的宏怎么写假设你要以Sheet1的A1单元格中的值为文件名保存,则应用命令:ActiveWorkbook.SaveCopyAs Str(Range("Sheet1!A1")) + ".xls" 在Excel中,如何用程式控制某一单元格不可编辑修改?thanks!!! Private Sub Workbook_Open() ProtectSpecialRange ("A1") End Sub Sub ProtectSpecialRange(RangeAddress As String) On Error Resume Next With Sheet1 .Cells.Locked = False .Range(RangeAddress).Locked = True .Protection.AllowEditRanges.Add Title:="区域1", Range:=Range (RangeAddress) _ , Password:="pass" .Protect DrawingObjects:=True, Contents:=True, Scenarios:=True End With End Sub 对工作表编程,有时要判断工作表的记录总数,VBA里如何实现? x=1 do while not (isempty(sheets("").cells(x,1).value) x=x+1 loop 在VBA中等同于EXCELE中的求和函数-sum()-的函数是什么? Application.WorksheetFunction.Sum() 自定义菜单有三个菜单项,要求手工顺序执行。为防止误操作,执行完第一个菜单项后使其变灰(禁用),如何写?Rowen 令其 Enable 属性同步与某个工具按钮是较为方便的。如何进行表格更新?是这样的,比如我已经有了一个原始表格A,这时有人通知我A表有错误,须加以修改,并给我一个表B,表B列出了须修改的参数(注意B的列数少于A的列数,因A的其他列无需修改)。现在问题是如何根据表B中的新值,在表A中找到相应位置,并加以修改。比如表B中列出了10002的JOHN的身高和体重等值需要修改,如何在A中找到10002的相应位置(身高体重),并加以修改。建議將表b複製至表a的sheet2,然後執行下列的宏即可sub change() dim dd as range sheets(2).select lastcell = range("a65536").end(xlup).row for each dd in range(cells(2, 1), cells(lastcell, 1)) if dd = "" then exit sub ff = dd.value set c = sheets(1).columns(1).find(ff, lookat:=xlwhole) if not c is nothing then c.offset(0, 2) = dd.offset(0, 2) c.offset(0, 3) = dd.offset(0, 3) c.offset(0, 5) = dd.offset(0, 4) end if next end sub 自定义菜单把建立和删除自定义菜单的代码分别写在Workbook_open和Workbook_beforeclosed的事件中。应该用VBA,工作薄代码中有workbook-open()过程,在该过程中写入 with activeworkbook .sheets("表2").active end with VBA实现向锁定工作表中插入行,并自动复制上面行中指定列的函数 Option Explicit Public Const strPass = "123" 123是口令Sub 行上再插入一行() ActiveSheet.Unprotect password:=strPass Selection.Copy Selection.Insert Shift:=xlDown Selection.PasteSpecial Paste:=xlFormats, Operation:=xlNone,

SkipBlanks:= _ False, Transpose:=False Application.CutCopyMode = False ActiveSheet.Protect password:=strPass End Sub 如何使不出现每次关闭XLS文件时出现的:“XXX.xls文件已被修改,是否可在其修改后的内容?”字样??可以在工作表关闭之前进行手工保存工作ThisWorkbook.save 如何实现动态时间显示? sub mytime range("a1")=now() Application.OnTime Now + Timevalue("00:00:01"), "mytime" end sub 用 vba 判断指定 excel 文件是否打开? For Each w In Workbooks If https://www.360docs.net/doc/831259868.html, XXX Then ………… End If Next w vba怎么调用excel自带的函数?比如vlookup? Application.WorksheetFunction.f(x) f(x)是你想使用的工作表函数但是用内部函数时引用单元格会出错,怎么办?把你要引用的单元格改成VBA认可格式(类型)。如在Excel中的“F7:F12”应改为“Range("F7:F12")”等。 VBA中如何关闭,保存和退出Excel? Workbooks("你的工作簿").Save。下表举例说明了使用 Rows 和 Columns 属性的一些行和列的引用。引用含义 Rows(1) 第一行 Rows 工作表上所有的行 Columns(1) 第一列 Columns("A") 第一列 Columns 工作表上所有的列若要同时处理若干行或列,请创建一个对象变量并使用 Union 方法,将对 Rows 属性或 Columns 属性的多个调用组合起来。下例将活动工作簿中第一张工作表上的第一行、第三行和第五行的字体设置为加粗。 Sub SeveralRows() Worksheets("Sheet1").Activate Dim myUnion As Range Set myUnion = Union(Rows(1), Rows(3), Rows(5)) myUnion.Font.Bold = True End Sub 如果只是你说的只连接几个储存格那用简单的方法Range("A1").Formula = Application.Evaluate("=[Book2.xls]Sheet1!A1") 或 Range("A1").Formula = "=[Book2.xls]Sheet1!A1" 请问在vba如何呼叫已定义的名称范围我在a1:b100插入名称∶myrange 请问我如何用vba选取此范围 Range("myrange").Select 如何访问没有打开的EXCEL文件? Sub AlternativeImport() Dim xlapp As Excel.Application Dim wbSource As Excel.Workbook Set xlapp = New Excel.Application xlapp.EnableEvents = False Set wbSource = xlapp.Workbooks.Open("C:/test/Book2.xls") Range("A1:A10").Value = wbSource.Sheets("Sheet1").Range ("A1:A10").Value wbSource.Close False xlapp.Quit End Sub 怎样使VBAprject工程不可查看?(不用密码)用可编辑十六进制文件的软件工具(如WinHex等)打开Excel.xls,在文件的尾部,查找ID="{00000000-0000-0000-0000-000000000000}"(有工程锁定密码时),或ID="{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}"(没有工程锁定密码时),修改其中的任意1位后,保存,即可达到目的.当查看工程是会出现“工程不可查看”的提示. 注意:修改前,一定要备份原文件,以防不测。如何用VBA控制报表的格式(左边距,纸张大小,打印第几页等)打印第几页控制:ActiveWindow.SelectedSheets.PrintOut From:=x, To:=y ActiveSheet.PageSetup.LeftMargin= 左边距 ActiveSheet.PageSetup..PaperSize = 纸张大小如何使VBA自动消除使用COPY复制后产生的虚线框? Application.CutCopyMode = False 替换Excel 97的菜单栏是很容易的,只需创建一个新的菜单栏就会删除Excel 97的菜单栏。当需要恢复Excel 97的菜单栏时,只要删除新创建的菜单栏就可以了。该系统的自定义菜单中只需两个命令按钮,一个用来返回到系统的主画面(ReturnMAIN),另一个用来退出系统(ExitSYS)。下面是模块(Module)中有关的宏或是事件控制程序。 Sub ZapMenu( ) On Error Resume Next CommandBars(“保险查询系统”).Delete End Sub 这是一个用来删除自定义菜单栏的宏。语句On Error Resume Next保证无论自定义菜单栏是否存在都能正确删除它。 Sub ExitSYS( ) ZapMenu ActiveWorkbook.Close SaveChanges := False End Sub 这是用来退出系统的宏。它删除自定义菜单,并关闭活动的工作簿(不提示保存修改)。Sub ReturnMAIN( ) Worksheets(“保险查询系统”).Select End Sub 该宏用来返回主画面。它激活“保险查询系统”工作表。 Sub SetMenu( ) Dim myBar As CommandBar Dim myButton As CommandBarButton ZapMenu Set myBar = CommandBars.Add(Name:=“保险查询系统”, _ Position :=msoBarTop, _ MenuBar :=True) Set myButton = myBar.Controls.Add(msoControlButton) myButton. = msoButtonCaption myButton.Caption = “退出[&E]” myButton.OnAction = “ExitSYS” Set myButton = myBar.Controls.Add(msoControlButton) my Button. = msoButtonCaption myButton.Caption = “返回[&R]” myButton.OnAction = “ReturnMAIN” myButton.Visible = False myBar.Protection = msoBarNoMove + msoBarNoCustomize myBar.Visible =

True End Sub 这个宏包含五部分。第一部分定义了一对变量。第二部分首先运行ZapMenu宏,保证保险查询系统菜单栏是不存在的,然后创建它。参数MenuBar的值设为True,确保这个新创建的命令栏为一菜单栏。第三部分和第四部分将两个命令按钮加入到菜单栏中。并设置ReturnMAIN命令按钮的初始状态为不可见状态。最后一部分保护这个新创建的菜单栏,使用户不能移动也不能自定义新菜单栏。工作表汇总Sub sum() '表汇总,第1张的a1:e20等于所有表的相同单元格的和Attribute sum.VB_ProcData.VB_Invoke_Func = "z/n14" Dim X As Worksheet For y = 1 To 20 For z = 1 To 5 For Each X In Worksheets shname = https://www.360docs.net/doc/831259868.html, ActiveSheet.Cells(y, z).Value = ActiveSheet.Cells(y, z).Value + Worksheets(shname).Cells(y, z) Next Next z Next y End Sub

Excel VBA实例教程 #055:在工作表中添加艺术字

工作表中的多个图形,如果使用系统缺省名称,如“文本框1”、“文本框2”这样前面是固定的字符串,后面是序号的,可以使用For...Next 语句遍历图形,如下面的代码所示。 1.Sub ErgShapes_1() 2. Dim i As Integer 3. For i = 1 To 4 4. Sheet1.Shapes("文本框 " & i).TextFrame.Characters.Text = "" 5. Next 6.End Sub 代码解析: ErgShapes_1过程清除工作表中四个图形文本框中的文字。 第3行到第5行代码,使用Shapes属性在工作表上的三个图形文本框中循环。 Shapes属性返回Shapes对象,代表工作表或图形工作表上的所有图形,可以使用Shapes (index)返回单个的Shape对象,其中index是图形的名称或索引号。 返回单个的Shape对象后使用TextFrame 属性和Characters方法清除文本框中的字符,关于Shape对象的TextFrame 属性和Characters方法请参阅技巧53 。 如果图形的名称没有规律,可以使用For Each...Next 语句循环遍历所有图形,根据Type 属性返回的图形类型进行相应的操作,如下面的代码所示。 1.Sub ErgShapes_2() 2. Dim myShape As Shape 3. Dim i As Integer 4. i = 1 5. For Each myShape In Sheet1.Shapes 6. If myShape.Type = msoTextBox Then 7. myShape.TextFrame.Characters.Text = "这是第" & i & "个文本框" 8. i = i + 1 9. End If 10. Next 11.End Sub 代码解析: ErgShapes_2过程在工作表中的所有图形文本框中写入文本。 第5行代码使用For Each...Next 语句循环遍历工作表中所有的图形对象。 第6行到第9行代码如果图形对象是文本框则在文本框中写入文本。其中第6行代码根据Type属性判断图形对象是否为文本框,应用于Shape对象的Type属性返回或设置图形类型,MsoShapeType类型,请参阅表格54 1 。 第7行代码根据返回的Type属性值在所有的文本框内写入相应的文本,如图1所示。

Excel_VBA实例教程_查找单元格

Excel VBA实例教程查找单元格 1、使用Find方法 在Excel中使用查找对话框可以查找工作表中特定内容的单元格,而在VBA中则使用Find方法,如下面的代码所示。 01.Sub RngFind() 02. Dim StrFind As String 03. Dim Rng As Range 04. StrFind = InputBox("请输入要查找的值:") 05. If Trim(StrFind) <> "" Then 06. With Sheet1.Range("A:A") 07. Set Rng = .Find(What:=StrFind, _ 08. After:=.Cells(.Cells.Count), _ 09. LookIn:=xlValues, _ 10. LookAt:=xlWhole, _ 11. SearchOrder:=xlByRows, _ 12. SearchDirection:=xlNext, _ 13. MatchCase:=False) 14. If Not Rng Is Nothing Then 15. Application.Goto Rng, True 16. Else 17. MsgBox "没有找到该单元格!" 18. End If 19. End With 20. End If 21.End Sub 代码解析: RngFind过程使用Find方法在工作表Sheet1的A列中查找InputBox函数对话框中所输入的值,并查找该值所在的第一个单元格。 第6到第13行代码在工作表Sheet1的A列中查找InputBox函数对话框中所输入的值。应用于Range 对象的Find方法在区域中查找特定信息,并返回Range对象,该对象代表用于查找信息的第一个单元格。如果未发现匹配单元格,就返回Nothing,语法如下: 01.expression.Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SerchFormat) 复制代码参数expression是必需的,该表达式返回一个Range对象。 参数What是必需的,要搜索的数据,可为字符串或任意数据类型。 参数After是可选的,表示搜索过程将从其之后开始进行的单元格,必须是区域中的单个单元格。查找时是从该单元格之后开始的,直到本方法绕回到指定的单元格时,才对其进行搜索。如果未指定本参数,搜索将从区域的左上角单元格之后开始。 在本例中将After参数设置为A列的最后一个单元格,所以查找时从A1单元格开始搜索。 参数LookIn是可选的,信息类型。 参数LookAt是可选的,可为XlLookAt常量的xlWhole 或xlPart之一。 参数SearchOrder是可选的,可为XlSearchOrder常量的xlByRows或xlByColumns之一。 参数SearchDirection是可选的,搜索的方向,可为XlSearchDirection常量的xlNext或xlPrevious 之一。

Excel VBA实例教程指南

Excel VBA教程之一:写在前面 VBA功能如何强大,这已勿庸费言,但如何才能很快进阶,写出自己满意的程序,却取决于个人努力和悟性。我下了很大功夫却收效甚微,有时,高手一句点拨却胜读三天书。所以,我把个人学习所得作一点整理,希望有助于后学。 只所以会有看书没用之感,一来是因为市面(我国)上大多数计算机类图书多为粗制滥造之作(这话稍有唐突),二来因为计算机这东西太呆板,不见得新出现的问题就能立即得到某本书籍上的解释,新问题总是层出不穷的。 想把一门编程语言全部搞懂,再去写点程序,是一个十分愚蠢的想法。你想盖房子,难道你想先学会制造砖头、玻璃等?我承认,把语言弄懂再做事情会很顺手,但是,你知道吗,有多少人在弄懂一门晦涩难懂的语言之前就放弃了呢?比如,什么叫面向对象编程?OOP和以前的流线性编程有什么异同?我还是大力提倡学以致用,别指望什么事你都能成专家,计算机世界的“罗氏定理”就是:“毕其一生,不能穷其万一”,你记住了吗? 那么,对于没有编程基础的人,怎样才能进步得快呢?我有几点思考: 1.你一定要带着明确的目的去做一件具体的事。这样,才会在做的过程中发现问题,并逐步去解决这些问题。比如,我想做一个《学生成绩分析系统》,我就会想到怎么才能把学生分数分成不同的班、怎么才能算出总分、平均分、标准差等、怎样比较各班的情况,怎样用图形显示更直观,怎么样才能把某个学生的历次成绩放在一起比较等。 2.你动手去做一做,一点一点地完成你上面的设想,不必因为这个大工程没做出来而忽略你在局部的突破,这样,你会越来越有信心,这就够了,还有什么比有信心做事的感觉更好的了吗? 3.合理及时利用网络资源,这绝对是个好东西,或许你看起来很了不起的问题,在别人看来简直不算什么,一定会有人为你解答。上网并不只是QQ和game啊!同时要好好利用软件的帮助系统,这才是最权威的解释,很多计算机书籍抄自帮助,你想,微软的专家写的,绝对原创,他还能去抄谁? 4.做了一些工作之后,再回过头来看书,就会感觉很亲切,觉得写书的人原来也不是一无是处,也是很辛苦的(不要过分自我批评了)。不过,要看书,计算机类的,我百分之一万地推荐你看外国人写的,首先,软件是人家编的,当然更了解。其次,外国人写的,又被介绍到中国来,也是比较优秀的了。三来,我确实作过对比,看老外的书收益最大。语言不通的问题怎么办?金山词霸一下呗。 我为什么要写这个东西?一是因为我想帮助别人,二是因为我想因此促进自己,三是因为我反感某些号称程序员的家伙,似乎编程是一件多么了不起的事,用一些极端人士的话来说:“编程有什么了不起?不就是判断和循环吗”,说得很有道理,从本质上说,计算机就是在做判断和循环,不信你就跟着我来吧。 好了,Let’s go Excel VBA教程之二:从一个界面设计开始 一个好的软件,除了运算速度快、体积小后,更重要的是,它的用户界面是不是很友好、亲切,“友好、亲切”这样的词汇在开始接触计算机语言时,感觉很好笑,但现在不一样了,我感觉这两个词最贴切!界面友好,就是引导用户能很快找到他需要的服务,最能想到他的心思,最体贴他,让他不时地心动,不时地赞叹!界面友好,就是能让用户在不经意间学到好多知识,无形中丰富了他自己,让他有美的享受!界面友好,还在于一目了然的界面却能让他需要的功能呼之即来,挥之即去!如此等等。 那么,我想做一个《学生成绩分析系统》,我该怎么做呢? 以下的界面你满意吗?

Excel VBA实例教程 #060:使用VBA自动生成图表

在实际工作中我们常用图表来表现数据间的某种相对关系,一般采用手工插入的方式,而使用VBA代码可以在工作表中自动生成图表,如下面的示例代码。 1.Sub ChartAdd() 2. Dim myRange As Range 3. Dim myChart As ChartObject 4. Dim R As Integer 5. With Sheet1 6. .ChartObjects.Delete 7. R = .Range("A65536").End(xlUp).Row 8. Set myRange = .Range("A" & 1 & ":B" & R) 9. Set myChart = .ChartObjects.Add(120, 40, 400, 250) 10. With myChart.Chart 11. .ChartType = xlColumnClustered 12. .SetSourceData Source:=myRange, PlotBy:=xlColumns 13. .ApplyDataLabels ShowValue:=True 14. .HasTitle = True 15. .ChartTitle.Text = "图表制作示例" 16. With .ChartTitle.Font 17. .Size = 20 18. .ColorIndex = 3 19. .Name = "华文新魏" 20. End With 21. With .ChartArea.Interior 22. .ColorIndex = 8 23. .PatternColorIndex = 1 24. .Pattern = xlSolid 25. End With 26. With .PlotArea.Interior 27. .ColorIndex = 35 28. .PatternColorIndex = 1

EXCEL宏编程简明教程(有实例),

Excel宏编程简明教程 一)、宏学习 首先需要明确的是,本文不可能教会您关于宏的所有内容。您需要学会利用"录制宏"的方法来学习宏: 点击Excel"工具"下拉菜单中"宏"下?quot;录制新宏",此后可象平时一样进行有关操作,待完成后停止录制。然后再点击"工具"下拉菜单中"宏"下"宏"的"编辑"选项即可打开刚才所录制的宏的Visual Basic源程序,并且可以在此时的"帮助"下拉菜单中获得有关的编程帮助。对录制宏进行修改不仅可以学习宏的使用,还能大大简化宏的编写。 二)、基本概念 为了学习Excel中的宏,我们需要先了解以下一些基本概念。 1、工作簿: Workbooks、Workbook、ActiveWorkbook、ThisWorkbooks集合包含Excel中所有当前打开的Excel工作簿,亦即所有打开的Excel文件;Workbook对应Workbooks中的成员,即其中的Excel文件;ActiveWorkbook代表当前处于活动状态的工作簿,即当前显示的Excel文件;ThisWorkbook代表其中有Visual Basic 代码正在运行的工作簿。 在具体使用中可用Workbooks(index)来引用Workbook对象,其中index为工作簿名称或编号;如Workbooks (1)、Workbooks("年度报表.xls")。而编号按照创建或打开工作簿的顺序来确定,第一个打开的工作簿编号为1,第二个打开的工作簿为2……。 2、工作表: Worksheets、Worksheet、ActiveSheet

Worksheets集合包含工作簿中所有的工作表,即一个Excel文件中的所有数据表页;而Worksheet则代表其中的一个工作表;ActiveSheet代表当前处于的活动状态工作表,即当前显示的一个工作表。 可用Worksheets(index)来引用Worksheet对象,其中index为工作表名称或索引号;如Worksheets (1)、Worksheets("第一季度数据")。工作表索引号表明该工作表在工作表标签中的位置: 第一个(最左边的)工作表的索引号为1,最后一个(最右边的)为Worksheets.Count。需要注意的是: 在使用过程中Excel会自动重排工作表索引号,保持按照其在工作表标签中的从左至右排列,工作表的索引号递增。因此,由于可能进行的工作表添加或删除,工作表索引号不一定始终保持不变。 3、图表: Chart、Charts、ChartObject、ChartObjects、ActiveChart代表工作簿中的图表。该图表既可为嵌入式图表(包含在ChartObject中),也可为一个分开的(单独的)图表工作表。 Charts代表指定工作簿或活动工作簿中所有图表工作表的集合,但不包括嵌入式在工作表或对话框编辑表中的图表。使用Charts(index)可引用单个Chart 图表,其中index是该图表工作表的索引号或名称;如Charts (1)、Charts("销售图表")。图表工作表的索引号表示图表工作表在工作簿的工作表标签栏上的位置。Charts (1)是工作簿中第一个(最左边的)图表工作表; Charts(Charts.Count)为最后一个(最右边的)图表工作表。 ChartObject代表工作表中的嵌入式图表,其作用是作为Chart对象的容器。利用ChartObject可以控制工作表上嵌入式图表的外观和尺寸。

Excel VBA实例教程 #022:选择工作表的方法

在VBA中需要激活或者选择某个工作表时使用Select方法或Activate方法,如下面的代码所示。 1.Sub SelectSh() 2. Worksheets("Sheet2").Select 3.End Sub 4.Sub ActivateSh() 5. Worksheets("Sheet2").Activate 6.End Sub 代码解析: SelectSh过程使用Select方法选择“Sheet2”工作表,而ActivateSh过程则使用Activate 方法选择“Sheet2”工作表,从表面看两者的作用是相同的,但是如果“Sheet2”工作表是隐藏的,Activate方法可以正常运行,而Select方法将会出现错误,如图1所示。 图 1 Select方法无效提示 如果需要同时选中工作簿中的所有工作表,则只能使用Select方法而不能使用Activate 方法,如下面的代码所示。 1.Sub SelectShs() 2. Dim Shs As Worksheet 3. For Each Shs In Worksheets 4. Shs.Select False 5. Next 6.End Sub 7.Sub SelectSheets() 8. Worksheets.Select 9.End Sub 10.Sub ArraySheets() 11. Worksheets(Array(1, 2, 3)).Select

12.End Sub 代码解析: SelectShs过程遍历工作表并使用带参数的Select方法选中所有工作表。应用于Worksheet对象的Select方法的语法如下: Select(Replace) 参数Replace是可选的。如果该值为True,则用指定对象替代当前选定对象。如果该值为False,则延伸当前选定对象以包括任何以前选定的对象。 SelectSheets过程使用Worksheets集合的Select方法选中集合中所有的对象。 ArraySheets过程使用Array 函数返回工作簿中的前三张工作表并使用Worksheets集合的Select方法选中前三张工作表。

excel2010 vba笔记 (实战教程)(基础实例)

VBA笔记 8-21 1.VBA是什么: 微软开发出来的应用程序一种能共享通用的自动化语言,VBA能使已有的应用程序(excel等)自动化,可以创建自定义的解决方案.等同:可以用excel的宏语言来使excel自动化,使用word BASIC使word自动化,等等。VBA可以称作excel的“遥控器”.此外,如果你愿意,还可以将excel用做开发平台实现应用程序. 2.VBA可以实现的功能 1. 使重复的任务自动化. 2. 自定义excel工具栏,菜单和界面. 3. 简化模板的使用. 4. 自定义excel,使其成为开发平台. 5. 创建报表. 6. 对数据进行复杂的操作和分析. 3.宏 3.1录制简单的宏 选择“工具”—“宏”—“录制新宏”—输入宏名—确定—开始录制(状态栏中显示“录制”)—结束宏录制(“工具”—“宏”—“停止录制”。)*开始录制并非一个按钮,而是你的一系列操作,宏会记录下来变为自己的操作。 3.2执行宏 选择任何一个单元格—选择“工具”—“宏”—“宏”(出现“宏”对话框)—选择相应的宏名—“执行”。 3.3查看录制的代码 工具”—“宏”—“宏”(显示“宏”对话框)—选择某个宏—“编辑” VBA的编辑器窗口(VBE) Sub 改变颜色() //宏名 ’ ’改变颜色Macro ’xw 记录的宏2000-6-10 ’ ’//以上五行录制时自动生成 Range("A5").Select //表示无论选择哪个单元格,最后都只作用于A5 With Selection.Interior//设置属性在选择区域的内部(开始录制属性) .ColorIndex = 3 //颜色为3号色:红色 .Pattern = xlSolid //区域内部图案=纯色(录制时自动生成,可删) PatternColorIndex = xlAutomatic //内部图案底纹颜色=自动(自动生成,可删) End With //结束属性录制 End Sub//结束宏录制 一个名为练习的宏: Sub 练习() ' ' 练习宏 ' ' With Selection.Borders(xlEdgeLeft) .LineStyle = xlContinuous .ColorIndex = 0

Excel VBA基础教程两篇

Excel VBA基础教程两篇 篇一:Excel VBA基础教程 Excel VBA教程是把VB编程应用在Excel平台的一套实用教程,Excel +VBA双剑合壁,他可以帮助我们实现Excel原本实现不了的功能,可以让工作变得更高效,可以让操作变得变方便,可以把重复性的操作变得更有趣,随心所欲的定制自己的工作平台,还可以针对企业来开发各种系统如,人事管理系统、仓库系统、进存销系统等,对于经常要处理大量数据工作的朋友,学会了这套VBA教程你的工作将游刃有余。 标题 Excel VBA基础教程 Excel VBA基础教程 第一章:Excel VBA基础知识 1-1、Excel VBA教程简介 1-2、宏在工作中的运用

1-3、Excel VBA基础 1-4、Excel VBA窗口介绍 1-5、Excel VBA代码编写规则1-6、对象 1-7、属性 1-8、方法 1-9、常量与变量 1-10、数据类型 1-11、判断语句之IF 1-12、判断语句IF之多条件1-12B、If条件判断小结

1-13、判断语句之SELECT 1-14、循环语句之DO...LOOP 1-15、循环语句之DO...LOOP实例 1-16、循环语句之DO WHILE...LOOP 1-17、循环语句之DO UNTIL...LOOP 1-18、循环语句之WHILE与UNTIL位置变化1-18B、DO...LOOP 语法小结 1-19、.循环语句之FOR EACH...NEXT 1-20、循环语句之FOX...NEXT 1-20B、For...NEXT小结与实例 1-21、用语句FOR...NEXT制作九九乘法表

Excel VBA实例教程 #036:复制自动筛选后的数据区域

用户在对如图1所示的数据列表进行自动筛选后,往往希望将自动筛选的结果复制到其它地方。 图1 筛选结果 这时可以通过获取该列表区域中可见单元格的方法得到筛选结果的单元格区域,并复制到工作表Sheet2中,如下面的代码所示。 1.Sub CopyFilter() 2. Sheet2.Cells.Clear 3. With Sheet1

4. If .FilterMode Then 5. .AutoFilter.Range.SpecialCells(12).Copy Sheet2.Cells(1, 1) 6. End If 7. End With 8.End Sub 代码解析: CopyFilter过程将Sheet1表中的筛选结果复制到工作表Sheet2中。 第2行代码清除Sheet2表中数据。 第4行代码判断Sheet1表是否处于自动筛选状态。FilterMode属性返回工作表是否处于筛选模式,如果指定工作表中包含已筛选序列且该序列中含有隐藏行,则该值为True。 第5行代码通过AutoFilter对象的Range属性返回工作表的自动筛选列表区域,再使用SpecialCells方法获取该列表区域中可见单元格(SpecialCells 方法请参阅技巧4 ),得到筛选结果的单元格区域,然后使用Copy方法将结果区域复制到工作表Sheet2中,应用于Range对象的Copy方法将单元格区域复制到指定的区域或剪贴板中,语法如下: expression.Copy(Destination) 参数expression是必需的,该表达式返回一个Range对象。 参数Destination是可选的,指定区域要复制到的目标区域。如果省略该参数,则将该区域复制到剪贴板中。 运行CopyFilter过程工作表Sheet2如图2所示。

Excel_VBA编程常用实例(150例)

Excel_VBA编程常用实例(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所示。

Excel VBA实例教程 #021:引用工作表的方式

VBA中,在不同的工作表之间转换或者对不同工作表中的单元格区域进行操作时,需要指定引用的工作表,通常有下面几种方法: 1、使用工作表的名称 工作表名称是指显示在工作表标签中的文本,工作表名称可以使用WorkSheets集合和Sheets集合两种引用方式,如下面的代码所示。 1.Sub ShActivate() 2. Worksheets("索引号").Activate 3. 'Sheets("索引号").Activate 4.End Sub 第3、4行代码都激活工作簿中名称为“索引号”的工作表,激活后“索引号”工作表将成为活动工作表。 WorkSheets集合包含所有的工作表,而Sheets集合不仅包含工作表集合WorkSheets,还包含图表集合Charts、宏表集合Excel4MacroSheets与MS Excel 5.0对话框集合DialogSheets等。 任何时刻工作簿中只有一个工作表是活动工作表。 2、使用工作表的索引号 工作表索引号是指工作表在工作簿中的位置,Excel根据工作表在工作表标签中的位置以1开始从左向右进行编号。下面的代码选中并激活当前工作簿中第1个工作表: 1.Sub ShIndex() 2. Worksheets(1).Select 3.End Sub 单个WorkSheet对象的Select方法与Activate方法的主要区别在于Select方法要求工作表可视。 注意当工作簿包括工作表、宏表、图表等时,使用索引号引用工作表如Sheets(1)与WorkSheets(1)引用的可能不是同一个表。 使用Worksheet对象的Index属性可以返回工作表的索引号,如下面的代码所示。 1.Sub ShInde() 2. MsgBox Worksheets("索引号").Index 3.End Sub 3、使用工作表的代码名称 使用Worksheet对象的CodeName属性可以返回工作表的代码名称,如下面的代码所示。

EXCEL宏编程简明教程(有实例),

Excel 宏编程简明教程 一)、宏学习 首先需要明确的是,本文不可能教会您关于宏的所有内容。您需要学会利用"录制宏"的方法来学习宏:点击Excel"工具"下拉菜单中"宏"下?quot;录制新宏",此后可象平时一样进行有关操作,待完成后停止录制。然后再点击"工具"下拉菜单中"宏"下"宏"的"编辑"选项即可打开刚才所录制的宏的Visual Basic源程序,并且可以在此时的"帮助"下拉菜单中获得有关的编程帮助。对录制宏进行修改不仅可以学习宏的使用,还能大大简化宏的编写。 二)、基本概念 为了学习Excel中的宏,我们需要先了解以下一些基本概念。 1、工作簿:Workbooks、Workbook、ActiveWorkbook、ThisWorkbook Workbooks集合包含Excel中所有当前打开的Excel工作簿,亦即所有打开的Excel文件;Workbook对应Workbooks中的成员,即其中的Excel文件;ActiveWorkbook代表当前处于活动状态的工作簿,即当前显示的Excel文件;ThisWorkbook代表其中有Visual Basic代码正在运行的工作簿。 在具体使用中可用Workbooks(index)来引用Workbook对象,其中index为工作簿名称或编号;如Workbooks(1)、Workbooks("年度报表.xls")。而编号按照创建或打开工作簿的顺序来确定,第一个打开的工作簿编号为1,第二个打开的工作簿为2……。 2、工作表:Worksheets、Worksheet、ActiveSheet Worksheets集合包含工作簿中所有的工作表,即一个Excel文件中的所有数据表页;而Worksheet则代表其中的一个工作表;ActiveSheet代表当前处于的活动状态工作表,即当前显示的一个工作表。 可用Worksheets(index)来引用Worksheet对象,其中index为工作表名称或索引号;如Worksheets(1)、Worksheets("第一季度数据")。工作表索引号表明该工作表在工作表标签中的位置:第一个(最左边的)工作表的索引号为1,最后一个(最右边的)为Worksheets.Count。需要注意的是:在使用过程中Excel 会自动重排工作表索引号,保持按照其在工作表标签中的从左至右排列,工作表的索引号递增。因此,由于可能进行的工作表添加或删除,工作表索引号不一定始终保持不变。 3、图表:Chart 、Charts、ChartObject、ChartObjects、ActiveChart Chart代表工作簿中的图表。该图表既可为嵌入式图表(包含在ChartObject 中),也可为一个分开的(单独的)图表工作表。 Charts代表指定工作簿或活动工作簿中所有图表工作表的集合,但不包括嵌入式在工作表或对话框编辑表中的图表。使用Charts(index) 可引用单个Chart图表,其中index是该图表工作表的索引号或名称;如Charts(1)、Charts("销售图表")。图表工作表的索引号表示图表工作表在工作簿的工作表标签栏上的位置。Charts(1)是工作簿中第一个(最左边的)图表工作表; Charts(Charts.Count)为最后一个(最右边的)图表工作表。 ChartObject代表工作表中的嵌入式图表,其作用是作为Chart对象的容器。

Excel VBA实例教程 #025:工作表的添加与删除

在工作簿中添加工作表使用Add方法,如下面的代码所示。 1.Sub Addsh() 2. Dim Sh As Worksheet 3. With Worksheets 4. Set Sh = .Add(after:=Worksheets(.Count)) 5. https://www.360docs.net/doc/831259868.html, = "数据" 6. End With 7.End Sub 代码解析: Addsh过程使用Add方法在工作簿中新建“数据”工作表。 第2行代码声明变量Sh为工作表对象。 第4行行代码使用Add方法在工作簿的最后新建“数据”工作表。 Add 方法应用于Sheets和Worksheets对象时新建工作表、图表或宏表,语法如下:expression.Add(Before, After, Count, Type) 参数Before是可选的,指定工作表对象,新建的工作表将置于此工作表之前。 参数After是可选的,指定工作表对象,新建的工作表将置于此工作表之后。 如果Before和After两者均省略,则新建的工作表将插入到活动工作表之前。 参数Count可选,要新建的工作表的数目。默认值为1。 参数Type可选,指定新建的工作表类型。 第5行代码将添加的工作表重命名为“数据”。 如果需要在工作簿中批量添加工作表,可以使用下面的代码。 1.Sub Addsh_2() 2. Dim i As Integer 3. Dim sh As Worksheet 4. For i = 1 To 10 5. Set sh = Sheets.Add(after:=Sheets(Sheets.Count)) 6. https://www.360docs.net/doc/831259868.html, = i 7. Next 8.End Sub 代码解析: Addsh_2过程使用For...Next 语句和Add方法在工作簿中添加10张工作表并将添加的工作表依次重命名。

Excel VBA实例教程指南

Excel VBA教程之一:写在前面 VBA功能如何强大,这已勿庸费言,但如何才能很快进阶,写出自己满意得程序,却取决于个人努力与悟性。我下了很大功夫却收效甚微,有时,高手一句点拨却胜读三天书。所以,我把个人学习所得作一点整理,希望有助于后学。 只所以会有瞧书没用之感,一来就是因为市面(我国)上大多数计算机类图书多为粗制滥造之作(这话稍有唐突),二来因为计算机这东西太呆板,不见得新出现得问题就能立即得到某本书籍上得解释,新问题总就是层出不穷得。7MuDj。 想把一门编程语言全部搞懂,再去写点程序,就是一个十分愚蠢得想法。您想盖房子,难道您想先学会制造砖头、玻璃等?我承认,把语言弄懂再做事情会很顺手,但就是,您知道吗,有多少人在弄懂一门晦涩难懂得语言之前就放弃了呢?比如,什么叫面向对象编程?OOP与以前得流线性编程有什么异同?我还就是大力提倡学以致用,别指望什么事您都能成专家,计算机世界得“罗氏定理”就就是:“毕其一生,不能穷其万一”,您记住了吗?GGIko。 那么,对于没有编程基础得人,怎样才能进步得快呢?我有几点思考: 1、您一定要带着明确得目得去做一件具体得事。这样,才会在做得过程中发现问题,并逐步去解决这些问题。比如,我想做一个《学生成绩分析系统》,我就会想到怎么才能把学生分数分成不同得班、怎么才能算出总分、平均分、标准差等、怎样比较各班得情况,怎样用图形显示更直观,怎么样才能把某个学生得历次成绩放在一起比较等。pVTNJ。 2、您动手去做一做,一点一点地完成您上面得设想,不必因为这个大工程没做出来而忽略您在局部得突破,这样,您会越来越有信心,这就够了,还有什么比有信心做事得感觉更好得了吗?UoyEz。 3、合理及时利用网络资源,这绝对就是个好东西,或许您瞧起来很了不起得问题,在别人瞧来简直不算什么,一定会有人为您解答。上网并不只就是QQ与game啊!同时要好好利用软件得帮助系统,这才就是最权威得解释,很多计算机书籍抄自帮助,您想,微软得专家写得,绝对原创,她还能去抄谁?NVsCr。 4、做了一些工作之后,再回过头来瞧书,就会感觉很亲切,觉得写书得人原来也不就是一无就是处,也就是很辛苦得(不要过分自我批评了)。不过,要瞧书,计算机类得,我百分之一万地推荐您瞧外国人写得,首先,软件就是人家编得,当然更了解。其次,外国人写得,又被介绍到中国来,也就是比较优秀得了。三来,我确实作过对比,瞧老外得书收益最大。语言不通得问题怎么办?金山词霸一下呗。LV7Cw。 我为什么要写这个东西?一就是因为我想帮助别人,二就是因为我想因此促进自己,三就是因为我反感某些号称程序员得家伙,似乎编程就是一件多么了不起得事,用一些极端人士得话来说:“编程有什么了不起?不就就是判断与循环吗”,说得很有道理,从本质上说,计算机就就是在做判断与循环,不信您就跟着我来吧。pBfsG。 好了,Let’s go Excel VBA教程之二:从一个界面设计开始 一个好得软件,除了运算速度快、体积小后,更重要得就是,它得用户界面就是不就是很友好、亲切,“友好、亲切”这样得词汇在开始接触计算机语言时,感觉很好笑,但现在不一样了,我感觉这两个词最贴切!界面友好,就就是引导用户能很快找到她需要得服务,最能想到她得心思,最体贴她,让她不时地心动,不时地赞叹!界面友好,就就是能让用户在不经意间学到好多知识,无形中丰富了她自己,让她有美得享受!界面友好,还在于一目了然得界面却能让她需要得功能呼之即来,挥之即去!如此等等。WQfVJ。 那么,我想做一个《学生成绩分析系统》,我该怎么做呢? 以下得界面您满意吗?

Excel VBA实例教程 #008:仅复制数值到另一区域

如果在复制单元格区域时,仅希望复制单元格区域的数值,有下面几种方法。 1、使用选择性粘贴 使用选择性粘贴功能并指定粘贴数值,如下面的代码所示。 1.Sub CopyPasteSpecial() 2. Sheet1.Range("A1").CurrentRegion.Copy 3. Sheet2.Range("A1").PasteSpecial Paste:=xlPasteValues 4. Application.CutCopyMode = False 5.End Sub 代码解析: CopyPasteSpecial过程复制工作表Sheet1中A1单元格的当前区域的数值到工作表Sheet2的A1单元格所在区域中。 第2行代码将如图1所示的Sheet1中A1单元格的当前区域进行复制。 图1 需复制的数据表 第3行代码使用选择性粘贴功能并指定粘贴数值,选择性粘贴数值仅复制了单元格区域的数值,单元格区域的格式(背景颜色、字体对齐格式和边框等)不会被复制,复制结果如图8 2所示。 图2 复制单元格区域数值 2、直接赋值的方法

除了使用Copy方法外,还可以使用直接赋值的方法,如下面的代码所示。 1.Sub GetValueResize() 2. With Sheet1.Range("A1").CurrentRegion 3. Sheet3.Range("A1").Resize(.Rows.Count, .Columns.Count).Value = .Value 4. End With 5.End Sub 代码解析: GetValueResize过程将工作表Sheet1中的A1单元格的当前区域的数值赋予工作表Sheet3的A1单元格所在的单元格区域。 在对单元格区域直接赋值时,应保证源区域大小与目标区域的大小一致,如果源区域为动态的单元格区域,可使用Resize方法确定目标区域。 运行GetValueResize过程,赋值结果如图2所示。

Excel VBA基础教程

Excel VBA基础教程 Excel VBA基础教程 Excel VBA教程是把VB编程应用在Excel平台的一套实用教程,Excel +VBA双剑合壁,他可以帮助我们实现Excel 原本实现不了的功能,可以让工作变得更高效,可以让操作变得变方便,可以把重复性的操作变得更有趣,随心所欲的定制自己的工作平台,还可以针对企业来开发各种系统如,人事管理系统、仓库系统、进存销系统等,对于经常要处理大量数据工作的朋友,学会了这套VBA教程你的工作将游刃有余。 标题 Excel VBA基础教程 Excel VBA基础教程 第一章:Excel VBA基础知识 1-1、Excel VBA教程简介 1-2、宏在工作中的运用

1-3、Excel VBA基础 1-4、Excel VBA窗口介绍 1-5、Excel VBA代码编写规则1-6、对象 1-7、属性 1-8、方法 1-9、常量与变量 1-10、数据类型 1-11、判断语句之IF 1-12、判断语句IF之多条件1-12B、If条件判断小结

1-13、判断语句之SELECT 1-14、循环语句之DO...LOOP 1-15、循环语句之DO...LOOP实例 1-16、循环语句之DO WHILE...LOOP 1-17、循环语句之DO UNTIL...LOOP 1-18、循环语句之WHILE与UNTIL位置变化1-18B、DO...LOOP 语法小结 1-19、.循环语句之FOR EACH...NEXT 1-20、循环语句之FOX...NEXT 1-20B、For...NEXT小结与实例 1-21、用语句FOR...NEXT制作九九乘法表

Excel VBA实例教程 #026:禁止删除指定工作表

在工作表事件中是没有工作表删除事件的,为了防止用户误删除重要的工作表,除了使用保护工作簿方法外,还可以使用下面的代码。 1.Public Ctl As CommandBarControl 2.Sub DelSht() 3.? ? Set Ctl = ? ? = "MyDelSht" 4.End Sub 5.Sub ResSht() 6.? ? Set Ctl = ? ? = "" 7.End Sub 8.Sub MyDelSht() 9.? ? If $ = "SHEET2" Then 10.? ?? ???MsgBox "禁止删除" & & "工作表!" 11.? ? Else 12.? ?? ??? 13.? ? End If 14.End Sub 代码解析: DelSht过程将工作表标签右键菜单中的“删除工作表”菜单的OnAction属性设置为“MyDelSht”。 第3行代码使用Set语句将工作表标签右键菜单中的“删除工作表”菜单赋给变量Ctl,并将其OnAction属性设置为MyDelSht过程,该菜单被单击时将运行“MyDelSht”过程而不是系统默认的设置。OnAction属性返回或设置一个VBA的过程名,该过程在用户单击或更改某命令栏控件的值时运行。 ResSht过程将工作表标签右键菜单中的“删除工作表”菜单的OnAction属性恢复为默认设置。 MyDelSht过程判断所要删除的工作表的代码名称是否是“SHEET2”,如果是则禁止删除该表而只显示一个提示消息框。 为了不影响其他工作簿的使用,在VBE中双击ThisWorkbook写入下面的代码。 1.Private Sub Workbook_Activate() 2.? ? Call DelSht 3.End Sub 4.Private Sub Workbook_Deactivate()

excelvba实例教程#054:导出工作表中的图片

有时需要将工作表中的图形对象保存为单独的图像文件,可以使用Export方法将工作表中的图片以文件形式导出,如下面的代码所示。 1.Sub ExportShp() 2. Dim Shp As Shape 3. Dim FileName As String 4. For Each Shp In 5.If = msoPicture Then 6.FileName = & "\" & & ".gif" 7. 8.With 0, + 28, + 30).Chart 9. .Paste 10. .Export FileName, "gif" 11. . 12.End With 13.End If 14. Next 15.End Sub 代码解析: ExportShp过程将Sheet1工作表的所有图片以文件形式导出到同一目录中。 第4行代码使用For Each...Next 语句遍历Sheet1工作表中的所有图形。 第5行代码判断图形的类型是否为图片,应用于Shape对象的Type属性返回或设置图形类型,可以为表格 1所示的

表格 1 MsoShapeType常量 第6行代码使用字符串变量FileName记录需导出图形的路径和名称。 第7行代码复制图形,应用于Shape对象的Copy方法将对象复制到剪贴板。 第8行代码使用Add方法在工作表中添加一个图表,应用于ChartObjects对象的Add 方法创建新的嵌入图表,语法如下:(Left, Top, Width, Height) 参数expression是必需的,返回一个ChartObjects对象。

参数Left、参数Top是必需的,以磅为单位给出新对象的初始坐标,该坐标是相对于工作表上单元格A1的左上角或图表的左上角的坐标。 参数Width、参数Height是必需的,以磅为单位给出新对象的初始大小。 第9行代码使用Paste方法将图形粘贴到新的嵌入图表中,应用于Chart对象的Paste方法将剪贴板中的图表数据粘贴到指定的图表中,语法如下: (Type) 参数expression是必需的,返回一个Chart对象。 参数Type是可选的的,如果剪贴板中有图表,本参数指定要粘贴的图表信息。可为以下XlPasteType常量之一:xlFormats、xlFormulas或xlAll。默认值为xlAll,如果剪贴板中是数据不是图表,则不能使用本参数。 第10行代码使用Export方法将图表导出到同一目录中,应用于Chart对象的Export方法以图形格式导出图表,语法如下:(Filename, FilterName, Interactive) 其中参数Filename是必需的,被导出的文件的名称。 第10行代码删除新建的图表。因为Chart对象是不能使用Delete方法直接删除的,应先使用Parent属性返回指定对象的父对象,然后使用Delete方法删除。

相关主题
相关文档
最新文档