ExcelVBA类代码实例集锦
ExcelVBA类代码实例集锦
1,类动态数组控件‘2007VBA技巧‘快盘\Mytb\更新\类\类动态数组控件.xlsm‘2013-6-16类模块代码:erFormPublicWithEventsmyTextAsMSForms.TextBoxPublicIndexAsIntegerPrivateSubmyText_Change()Index=Mid(,8)Iffrm.Controls("Textbox"&Index)<>""Then="控件事件:Change"&vbCrLf&_"控件名称:"&frm.Controls("Textbox"&Index).Name&vbCrLf&_"Text属性:"&frm.Controls("Textbox"&Index).TextEndIfEndSubPrivateSubmyText_DblClick(ByValCancelAsMSForms.ReturnBoolean)Index=Mid(,8)Iffrm.Controls("Textbox"&Index)<>""Then="控件事件:DblClick"&vbCrLf&_"控件名称:"&frm.Controls("Textbox"&Index).Name&vbCrLf&_"Cancel属性:"&CancelEndIfEndSubKeyUp事件与Change事件重迭,二者取其一PrivateSubmyText_KeyUp(ByValKeyCodeAsMSForms.ReturnInteger,ByValShiftAsInteger)Index=Mid(,8)Iffrm.Controls("Textbox"&Index)<>""Then="控件事件:KeyUp"&vbCrLf&_"控件名称:"&frm.Controls("Textbox"&Index).Name&vbCrLf&_"按键值:&H"&Hex$(KeyCode)EndIfEndSubPrivateSubmyText_MouseMove(ByValButtonAsInteger,ByValShiftAsInteger,ByValXAsSingle,ByVal YAsSingle)SelectCaseIndexCase3="3"Case8="8"Case4="4"Case9="9"CaseElse=""EndSelectEndSub模块1代码:Publica(1To14)AsmyTextSubformshow()Userform2.ShowEndSub窗体代码:PrivateSubCommandButton1_Click()Dimi&,t$Fori=1To14Ifa(i).myText.Text<>""Thent=t&"控件名称:"&a(i)&vbTab&"Text属性:"&a(i).myText.Text&vbCrLfEndIfNextiMsgBoxtEndSubPrivateSubUserForm_Initialize()Dimi&Fori=1To14Seta(i)=NewmyTextSeta(i).myText=Me.Controls("Textbox"&i)Seta(i).frm=MeNextiEndSub工作表代码:PrivateSubCommandButton1_Click()Userform2.ShowEndSub2,复选框选择‘快盘\Mytb\更新\类\类0928..xls‘当复选框选择到7个时,其它的复选框不能再选择。
30个有用的ExcelVBA代码(16~20)
30个有用的ExcelVBA代码(16~20)16.突出显示所选内容中的可选行突出显示可选行可以极大地提高数据的可读性。
下面是一个代码,它将立即突出显示所选内容中的可选行。
Sub HighlightAlternateRows()Dim Myrange As Range Dim Myrow As Range Set Myrange = Selection For Each Myrow In Myrange.Rows If Myrow.Row Mod 2 = 1 Then Myrow.Interior.Color = vbCyan End If Next Myrow End Sub 注意,代码中指定了颜色为vbCyan(也可以修改成:vbRed, vbGreen, vbBlue)。
17.突出显示拼错单词的单元格Excel没有像在Word或PowerPoint中那样进行拼写检查。
虽然可以按F7键进行拼写检查,但当出现拼写错误时,没有视觉提示。
使用此代码可以立即突出显示其中有拼写错误的所有单元格。
Sub HighlightMisspelledCells() Dim cl As Range For Each cl I n edRange If Not Application.CheckSpelling(wor d:=cl.Text) Then cl.Interior.Color = vbRed End IfNext cl End Sub 请注意,突出显示的单元格包含Excel认为是拼写错误的文本。
当然在许多情况下,它也会其它各种错误。
18.刷新工作簿中的所有透视表如果工作簿中有多个透视表,则可以使用此代码一次刷新所有这些透视表。
Sub RefreshAllPivotTables() Dim PT As PivotTable For Each PT In ActiveSheet.PivotTables PT.RefreshTable Next PTEnd Sub 19.将所选单元格的字母大小写改为大写虽然Excel有更改文本字母大小写的公式,但它使您可以在另一组单元格中进行更改。
(完整word版)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工具栏上,按“ VisualBasic编辑器”按钮,如图00-02所示; ■按Alt+F11组合键。
图00-01 :选择菜单工具——宏——Visual Basic编辑器”命令来打开VBE编辑器图00-02 :选择Visual Basic工具栏上的“VisualBasic编辑器”命令按钮来打开VBE编辑器此外,您也可以使用下面三种方式打开VBE编辑器:■在任一工作表标签上单击鼠标右键,在弹出的菜单中选择查看代码”,则可进入VBE编辑器访问该工作表的代码模块,如图00-03所示;■在工作簿窗口左上角的Excel图标上单击鼠标右键,在弹出的菜单中选择查看代码”,则可进入VBE编辑器访问活动工作簿的ThisWorkbook代码模块,如图00-04所示;■选择菜单工具一一宏一一宏”命令打开宏对话框,若该工作簿中有宏程序,则单击该对话框中的编辑”按钮即可进行VBE编辑器代码模块,如图00-05所示。
Excel VBA 常用代码50例
Excel VBA 常用代码50例001。
用命令按扭打印一个sheet1中B2:M30区域中的内容?我想在Sheet2中制件一个命令按扭, 打印表Sheet1中的[B2:M30] 区域中的内容?解答:可以将打印区域设为b2:m30,然后打印,如:sheets("sheet1").printarea="b2:m30"sheets("sheet1").printout随手写的,你可以试试看。
最简单的方法是:你先录制宏,在录制宏过程中,跑到页面设置里面,把打印范围设置到你想要的范围。
然后退出,停止录制宏,你就可以得到一些代码!002。
能否对一列中的文字统一去掉最后一个字?这些文字不统一,有些字数多,有些字数少。
如何处理?我用{"&-}不行解答:=REPLACE(A1,LEN(A1),1," ")(在过渡列进行)003.能否根据单元格数值自动标记序号?各位大佬,一工作表有两列,“序号”及“金额”,能否将金额不等于0的行自动标上序号呢?如无现成的函数,应怎样设置?解答:Dim xuhao As Integerxuhao = 1Range("b2").SelectDo While Selection <> ""If Selection <> 0 ThenActiveCell.Previous.Value = xuhaoxuhao = xuhao + 1End IfActiveCell.Offset(1, 0).Range("a1").SelectLoop004.求教自定义函数查询了一些自定义函数的例子都是单变量的。
自定义函数能否建立“(As Range) As Interger”的函数,应该可以的,请各位大师赐教!请以“∑x2”为例,万分感谢!(该用"For Each ...Next",就是还不知道如何引用Range中的每个值,请高手指点。
vba常用代码大全
前言我们平时在工作表单元格的公式中常常使用函数,Excel自带的常用的函数多达300多个,功能强大,丰富多彩,但是在VBA中不能直接应用,必须在函数名前面加上对象,比如:Application.WorksheetFunction.Sum(arg1,arg2,arg3)。
而能在VBA中直接应用的函数也有几十个,下面将逐一详细介绍常用的40个VBA 函数,以供大家学习参考。
第1.1例 ASC函数一、题目:要求编写一段代码,运行后得到字符串”Excel”的首字母和”e”的ASCII 值。
二、代码:Sub 示例_1_01()Dim myNum1%, myNum2%myNum1 = Asc("Excel") '返回69myNum2 = Asc("e") '返回101[a1] = "myNum1= ": [b1] = myNum1[a2] = "myNum2= ": [b2] = myNum2End Sub三、代码详解1、Sub 示例_1_01():宏程序的开始语句。
2、Dim myNum1%, myNum2%:变量myNum1和myNum2声明为整型变量。
也可以写为 Dim myNum1 As 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。
Excel-vba宏代码-大全
Excel-vba宏代码-大全宏文件集▲打开全部隐藏工作表返回Sub 打开全部隐藏工作表()Dim i As IntegerFor i = 1 To Sheets.CountSheets(i).Visible = TrueNext iEnd Sub▲循环宏返回Sub 循环()AAA = Range("C2")Dim i As LongDim times As Longtimes = AAA'times代表循环次数,执行前把times赋值即可(不可小于1,不可大于2147483647)For i = 1 To timesCall 过滤一行If Range("完成标志") = "完成" Then Exit For '如果名为'完成标志'的命名单元的值等于'完成',则退出循环,如果一开始就等于'完成',则只执行一次循环就退出'If Sheets("传送参数").Range("A" & i).Text = "完成" Then Exit For '如果某列出现"完成"内容则退出循环Next iEnd Sub▲录制宏时调用“停止录制”工具栏返回Sub 录制宏时调用停止录制工具栏()/doc/4911298482.html,mandBars("Stop Recording").Visible = TrueEnd Sub▲高级筛选5列不重复数据至指定表返回Sub 高级筛选5列不重复数据至Sheet2()Sheets("Sheet2").Range("A1:E65536") = "" '清除Sheet2的A:D 列Range("A1:E65536").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Sheet2.Range( _"A1"), Unique:=TrueSheet2.Columns("A:E").Sort Key1:=Sheet2.Range("A2"), Order1:=xlAscending,Header:=xlGuess, _OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _:=xlPinYinEnd Sub▲双击单元执行宏(工作表代码)返回Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)If Range("$A$1") = "关闭" Then Exit SubSelect Case Target.AddressCase "$A$4"Call 宏1Cancel = TrueCase "$B$4"Call 宏2Cancel = TrueCase "$C$4"Call 宏3Cancel = TrueCase "$E$4"Call 宏4Cancel = TrueEnd SelectEnd Sub▲双击指定区域单元执行宏(工作表代码)返回Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)If Range("$A$1") = "关闭" Then Exit SubIf Not Application.Intersect(Target, Range("A4:A9", "C4:C9")) Is Nothing Then Call 打开隐藏表End Sub▲进入单元执行宏(工作表代码)返回Private Sub Worksheet_SelectionChange(ByVal Target As Range)'以单元格进入代替按钮对象调用宏If Range("$A$1") = "关闭" Then Exit SubSelect Case Target.AddressCase "$A$5" '单元地址(Target.Address),或命名单元名字(/doc/4911298482.html,)Call 宏1Case "$B$5"Call 宏2Case "$C$5"Call 宏3End SelectEnd Sub▲进入指定区域单元执行宏(工作表代码)返回Private Sub Worksheet_SelectionChange(ByVal Target As Range)If Range("$A$1") = "关闭" Then Exit SubIf Not Application.Intersect(Target, Range("A4:A9","C4:C9")) Is Nothing Then Call打开隐藏表▲在多个宏中依次循环执行一个(控件按钮代码)返回Private Sub CommandButton1_Click()Static RunMacro As IntegerSelect Case RunMacroCase 0宏1RunMacro = 1Case 1宏2RunMacro = 2Case 2宏3RunMacro = 0End SelectEnd Sub▲在两个宏中依次循环执行一个并相应修改按钮名称(控件按钮代码)返回Private Sub CommandButton1_Click()With CommandButton1If .Caption = "保护工作表" ThenCall 保护工作表.Caption = "取消工作表保护"Exit SubEnd IfIf .Caption = "取消工作表保护" ThenCall 取消工作表保护.Caption = "保护工作表"Exit SubEnd IfEnd With▲在三个宏中依次循环执行一个并相应修改按钮名称(控件按钮代码)返回Option ExplicitPrivate Sub CommandButton1_Click()With CommandButton1If .Caption = "宏1" ThenCall 宏1.Caption = "宏2"Exit SubEnd IfIf .Caption = "宏2" ThenCall 宏2.Caption = "宏3"Exit SubEnd IfIf .Caption = "宏3" ThenCall 宏3.Caption = "宏1"Exit SubEnd IfEnd WithEnd Sub▲根据A1单元文本隐藏/显示按钮(控件按钮代码)返回Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Range("A1") > 2 ThenCommandButton1.Visible = 1ElseCommandButton1.Visible = 0End IfEnd SubPrivate Sub CommandButton1_Click()重排窗口End Sub▲当前单元返回按钮名称(控件按钮代码)返回Private Sub CommandButton1_Click()ActiveCell = CommandButton1.CaptionEnd Sub▲当前单元内容返回到按钮名称(控件按钮代码)返回Private Sub CommandButton1_Click()CommandButton1.Caption = ActiveCellEnd Sub▲奇偶页分别打印返回Sub 奇偶页分别打印()Dim i%, Ps%Ps = ExecuteExcel4Macro("GET.DOCUMENT(50)") '总页数MsgBox "现在打印奇数页,按确定开始."For i = 1 To Ps Step 2ActiveSheet.PrintOut from:=i, To:=iNext iMsgBox "现在打印偶数页,按确定开始."For i = 2 To Ps Step 2ActiveSheet.PrintOut from:=i, To:=iNext iEnd Sub▲自动打印多工作表第一页返回Sub 自动打印多工作表第一页() Dim sh As IntegerDim xDim yDim syDim syzx = InputBox("请输入起始工作表名字:")sy = InputBox("请输入结束工作表名字:")y = Sheets(x).Indexsyz = Sheets(sy).IndexFor sh = y To syzSheets(sh).SelectSheets(sh).PrintOut from:=1, To:=1Next shEnd Sub▲查找A列文本循环插入分页符返回Sub 循环插入分页符()' Selection = Workbooks("临时表").Sheets("表2").Range("A1") 调用指定地址内容Dim i As LongDim times As Longtimes = Application.WorksheetFunction.CountIf(Sheet1.Range("a:a"), "分页")'times代表循环次数,执行前把times赋值即可(不可小于1,不可大于2147483647)For i = 1 To timesCall 插入分页符Next iEnd SubSub 插入分页符()Cells.Find(What:="分页", After:=ActiveCell, LookIn:=xlValues, LookAt:= _xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False) _.ActivateActiveWindow.SelectedSheets.HPageBreaks.AddBefore:=ActiveCellEnd SubSub 取消原分页()Cells.SelectActiveSheet.ResetAllPageBreaksEnd Sub▲将A列最后数据行以上的所有B列图片大小调整为所在单元大小返回Sub 将A列最后数据行以上的所有B列图片大小调整为所在单元大小()Dim Pic As Picture, i&i = [A65536].End(xlUp).RowFor Each Pic In Sheet1.PicturesIf Not Application.Intersect(Pic.TopLeftCell, Range("B1:B" & i)) Is Nothing ThenPic.Top = Pic.T opLeftCell.TopPic.Left = Pic.TopLeftCell.LeftPic.Height = Pic.TopLeftCell.HeightPic.Width = Pic.TopLeftCell.WidthEnd IfNextEnd Sub▲返回光标所在行数返回Sub 返回光标所在行数()x = ActiveCell.RowRange("A1") = xEnd Sub▲在A1返回当前选中单元格数量返回Sub 在A1返回当前选中单元格数量()[A1] = Selection.CountEnd Sub▲返回当前工作簿中工作表数量返回Sub 返回当前工作簿中工作表数量()t = Application.Sheets.CountMsgBox tEnd Sub▲返回光标选择区域的行数和列数返回Sub 返回光标选择区域的行数和列数()x = Selection.Rows.County = Selection.Columns.CountRange("A1") = xRange("A2") = yEnd Sub▲工作表中包含数据的最大行数返回Sub 包含数据的最大行数()n = Cells.Find("*", , , , 1, 2).RowMsgBox nEnd Sub▲返回A列数据的最大行数返回Sub 返回A列数据的最大行数() n = Range("a65536").End(xlUp).RowRange("B1") = nEnd Sub▲将所选区域文本插入新建文本框返回Sub 将所选区域文本插入新建文本框()For Each rag In Selectionn = n & rag.Value & Chr(10)NextActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizon tal, ActiveCell.Left +ActiveCell.Width, ActiveCell.T op + ActiveCell.Height, 250#, 100).SelectSelection.Characters.Text = "问题:" & nWith Selection.Characters(Start:=1, Length:=3).Font.Name = "黑体".FontStyle = "常规".Size = 12End WithEnd Sub▲批量插入地址批注返回Sub 批量插入地址批注()On Error Resume NextDim r As RangeIf Selection.Cells.Count > 0 ThenFor Each r In Selection/doc/4911298482.html,ment.Deleter.AddComment/doc/4911298482.html,ment.Visible = False /doc/4911298482.html,ment.Text Text:="本单元格:" & r.Address & " of " & Selection.AddressNextEnd IfEnd Sub▲批量插入统一批注返回Sub 批量插入统一批注()Dim r As Range, msg As Stringmsg = InputBox("请输入欲批量插入的批注", "提示", "随便输点什么吧")If Selection.Cells.Count > 0 ThenFor Each r In Selectionr.AddComment/doc/4911298482.html,ment.Visible = False /doc/4911298482.html,ment.TextText:=msgNextEnd IfEnd Sub▲以A1单元内容批量插入批注返回Sub 以A1单元内容批量插入批注()Dim r As RangeIf Selection.Cells.Count > 0 ThenFor Each r In Selectionr.AddComment/doc/4911298482.html,ment.Visible = False /doc/4911298482.html,ment.TextText:=[a1].T extNextEnd IfEnd Sub▲不连续区域插入当前文件名和表名及地址返回Sub 批量插入当前文件名和表名及地址()For Each mycell In Selectionmycell.FormulaR1C1 = "[" + /doc/4911298482.html, + "]" + /doc/4911298482.html, +"!" + mycell.AddressNextEnd Sub▲不连续区域录入当前单元地址返回Sub 区域录入当前单元地址() For Each mycell In Selectionmycell.FormulaR1C1 = mycell.AddressNextEnd Sub▲连续区域录入当前单元地址返回Sub 连续区域录入当前单元地址()Selection = "=ADDRESS(ROW(),COLUMN(),4,1)"Selection.CopySelection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _:=False, Transpose:=FalseEnd Sub▲返回当前单元地址返回Sub 返回当前单元地址()d = ActiveCell.Address[A1] = dEnd Sub▲不连续区域录入当前日期返回Sub 区域录入当前日期()Selection.FormulaR1C1 = Format(Now(), "yyyy-m-d")End Sub▲不连续区域录入当前数字日期返回Sub 区域录入当前数字日期() Selection.FormulaR1C1 = Format(Now(), "yyyymmdd")End Sub▲不连续区域录入当前日期和时间返回Sub 区域录入当前日期和时间()Selection.FormulaR1C1 = Format(Now(), "yyyy-m-d h:mm:ss")End Sub▲不连续区域录入对勾返回Sub 批量录入对勾()Selection.FormulaR1C1 = "√"End Sub▲不连续区域录入当前文件名返回Sub 批量录入当前文件名()Selection.FormulaR1C1 = /doc/4911298482.html,End Sub▲不连续区域添加文本返回Sub 批量添加文本()Dim s As RangeFor Each s In Selections = s & "文本内容"NextEnd Sub▲不连续区域插入文本返回Sub 批量插入文本()Dim s As RangeFor Each s In Selections = "文本内容" & sNextEnd Sub▲从指定位置向下同时录入多单元指定内容返回Sub 从指定位置向下同时录入多单元指定内容()Dim arrarr = Array("1", "2", "13", "25", "46", "12", "0", "20")[B2].Resize(8, 1) = Application.WorksheetFunction.Transpose(arr)End Sub▲按aa工作表A列的内容排列工作表标签顺序返回Sub 按aa工作表A列的内容排列工作表标签顺序()Dim I%, str1$I = 1Sheets("aa").SelectDo While Cells(I, 1).Value <> ""str1 = Trim(Cells(I, 1).Value)Sheets(str1).SelectSheets(str1).Move after:=Sheets(I)I = I + 1Sheets("aa").SelectLoopEnd Sub▲以A1单元文本作表名插入工作表返回Sub 以A1单元文本作表名插入工作表()Dim nm As Stringnm = [a1]Sheets.Add/doc/4911298482.html, = nmEnd Sub▲删除全部未选定工作表返回Sub 删除全部未选定工作表()Dim sht As Worksheet, n As Integer, iFlag As BooleanDim ShtName() As Stringn = ActiveWindow.SelectedSheets.CountReDim ShtName(1 To n)n = 1For Each sht In ActiveWindow.SelectedSheetsShtName(n) = /doc/4911298482.html,n = n + 1NextApplication.DisplayAlerts = FalseFor Each sht In SheetsiFlag = FalseFor i = 1 To n - 1If ShtName(i) = /doc/4911298482.html, TheniFlag = TrueExit ForEnd IfNextIf Not iFlag Then sht.DeleteNextApplication.DisplayAlerts = TrueEnd Sub▲工作表标签排序返回Sub 工作表标签排序()Dim i As Long, j As Long, nums As Long, msg As Longmsg = MsgBox("工作表按升序排列请选'是[Y]'. " & vbCrLf & vbCrLf & "工作表按降序排列请选 '否[N]'", vbYesNoCancel, "工作表排序")If msg = vbCancel Then Exit Subnums = Sheets.CountIf msg = vbYes Then 'Sort ascendingFor i = 1 To numsFor j = i To numsIf UCase(Sheets(j).Name) < UCase(Sheets(i).Name) ThenSheets(j).Move Before:=Sheets(i)End IfNext jNext iElse 'Sort descendingFor i = 1 To numsFor j = i To numsIf UCase(Sheets(j).Name) > UCase(Sheets(i).Name) ThenSheets(j).Move Before:=Sheets(i)End IfNext jNext iEnd IfEnd Sub▲定义指定工作表标签颜色返回Sub 定义指定工作表标签颜色() Sheets("Sheet1").T ab.ColorIndex = 46End Sub▲在目录表建立本工作簿中各表链接目录返回Sub 在目录表建立本工作簿中各表链接目录()Dim s%, Rng As RangeOn Error Resume NextSheets("目录").ActivateIf Err = 0 ThenSheets("目录").UsedRange.DeleteElseSheets.Add/doc/4911298482.html, = "目录" End If。
ExcelVBA编程实例(150例)
ExcelVBA编程实例(150例)主要内容和特点《ExcelVBA编程入门范例》主要是以一些基础而简短的VBA实例来对ExcelVBA 中的常用对象及其属性和方法进行讲解,包括应用程序对象、窗口、工作簿、工作表、单元格和单元格区域、图表、数据透视表、形状、控件、菜单和工具栏、帮助助手、格式化操作、文件操作、以及常用方法和函数及技巧等方面的应用示例。
这些例子都比较基础,很容易理解,因而,很容易调试并得以实现,让您通过具体的实例来熟悉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代码 亲测可用
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所示。
收藏41个Excelvba实例汇总(附赠VBA教程)
收藏41个Excelvba实例汇总(附赠VBA教程)用过Excel的朋友肯定会遇到各种繁琐的数据处理问题,其实很多时候可以借助VBA一键实现N多复杂、繁琐的操作,大大解放你的双手,提高效率。
永恒君陆陆续续一共分享了VBA的实例共41个,另外还有若干个小的技巧实例。
需要的可以点击这里付费获取!!这里把这些实例再分类整理一下,方便以后的查询和使用,大致分类如下:单元格操作实例(1)- 批量制作工资表头实例(5)- 快速合并n多个相同值的单元格实例(9)- 批量插入、删除表格中的空行实例(11)- 拆分单元格并自动填充实例(12)- 如何合并多个单元格而不丢失单元格的数据?实例(13)- 自动生成序号、一键排版(列宽、行高自适应等)实例(29)–快速实现合并单元格的填充工作表(簿)操作实例(2)- 批量将工作表拆分为单独文件实例(3)- 多个工作簿批量合并实例(4)- 根据已有名称,批量新建表格实例(7)- 一键批量打印工作簿实例(30)–为多个sheets创建目录和超链接数据汇总实例(6)- 一键汇总多个sheet数据到总表实例(19) –一键汇总不完全相同的sheet到总表数据提取实例(8)- 利用正则表达式进行定向提取实例(10)- 统计同一列中出现次数并标注实例(14)- 依据指定单元格的值,复制并插入相同数量的行实例(15)- 按指定字段一键筛选并取最低价记录实例 (16) –按指定字段分类批量提取内容实例 (17) –遍历多个工作簿并提取内容到总表实例(18) –一键将单列长数据平均拆成多列实例(20) –一键填充每月员工拜访地区实例(22)–一键筛选其他工作表或工作簿的数据实例(24)–新股(债)中签一键批量查询实例(27)–一键按列分类并保存单独文件实例(34)–快速匹配出名称不完全相同的数据,vlookup都做不到实例(36)–一键提取网页中的表格数据实例(37)–快速提取手机号及归属地word操作实例(23)–一键批量提取word表格内容实例(26)–一键批量提取word文字内容实例(28)–批量生成word报告实例(33)–一键提取word中加粗文字数据抓取实例(39)- 一键快速查询基金信息、基金净值实例(40)- 一键快速查询基金代码实例(41)- 一键批量查询汉字拼音、部首、笔画等信息其他实例(25)–班级随机点名并播放实例(21)–如何快速准确录入数据实例(31)- 为VBA代码自定义快捷键实例(35)- 一键批量ppt转pdf实例(38)- 批量插入图片并完美匹配单元格大小另外,为了帮助大家更好的理解,永恒君又重新整理了几套关于VBA的视频教程,一并分享给大家。
excel常用vba代码 和语法
excel常用vba代码和语法Excel VBA(Visual Basic for Applications)是一种为Excel编程的语言,可以使用VBA代码来自动化执行各种操作。
以下是一些常用的VBA代码和语法示例:1. 定义和使用变量:```vbaDim num As Integernum = 10```2. 循环结构:- For循环:```vbaFor i = 1 To 10' 循环体Next i```- While循环:```vbaWhile i < 10' 循环体i = i + 1Wend```3. 条件判断:- If语句:```vbaIf condition Then' 条件满足时执行的代码ElseIf condition Then' 第二个条件满足时执行的代码Else' 条件不满足时执行的代码End If```- Select Case语句:```vbaSelect Case gradeCase "A"' A级别操作Case "B", "C"' B或C级别操作Case Else' 其他情况的操作End Select```4. 定义和调用子过程(函数):```vbaSub MySubroutine()' 子过程的代码End SubFunction MyFunction()' 函数的代码MyFunction = resultValue ' 返回结果End Function```5. 控制Excel对象:- 打开和关闭工作簿:```vbaWorkbooks.Open ("C:\example.xlsx") ActiveWorkbook.Close```- 读取和写入单元格:```vbaRange("A1").Value = "Hello"value = Range("A1").Value```- 获取和设置工作表属性:```vbaSheets("Sheet1").Activate Worksheets.Add```这些示例演示了一些常用的VBA代码和语法。
vba常用代码大全
前言我们平时在工作表xx的公式xx常常使用函数,Excel自带的常用的函数多达300多个,功能强大,丰富多彩,但是在VBAxx不能直接应用,必须在函数名前面加上对象,比如:Application.WorksheetFunction.Sum(arg1,arg2,arg3)。
而能在VBAxx直接应用的函数也有几十个,下面将逐一详细介绍常用的40个VBA函数,以供大家学习参考。
第1.1例ASC函数一、题目:要求编写一段代码,运行后得到字符串”Excel”的首字母和”e”的ASCII值。
二、代码:Sub示例_1_01()Dim myNum1%, myNum2%myNum1 = Asc("Excel")'返回69myNum2 = Asc("e")'返回101[a1] = "myNum1= ": [b1] = myNum1[a2] = "myNum2= ": [b2] = myNum2End Sub三、代码详解1、Sub示例_1_01():宏程序的开始语句。
2、Dim myNum1%, myNum2%:变量myNum1和myNum2声明为整型变量。
也可以写为Dim myNum1 As 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。
Excel VBA 常用代码50例
Excel VBA 常用代码50例001。
用命令按扭打印一个sheet1中B2:M30区域中的内容?我想在Sheet2中制件一个命令按扭, 打印表Sheet1中的[B2:M30] 区域中的内容?解答:可以将打印区域设为b2:m30,然后打印,如:sheets("sheet1").printarea="b2:m30"sheets("sheet1").printout随手写的,你可以试试看。
最简单的方法是:你先录制宏,在录制宏过程中,跑到页面设置里面,把打印范围设置到你想要的范围。
然后退出,停止录制宏,你就可以得到一些代码!002。
能否对一列中的文字统一去掉最后一个字?这些文字不统一,有些字数多,有些字数少。
如何处理?我用{"&-}不行解答:=REPLACE(A1,LEN(A1),1," ")(在过渡列进行)003.能否根据单元格数值自动标记序号?各位大佬,一工作表有两列,“序号”及“金额”,能否将金额不等于0的行自动标上序号呢?如无现成的函数,应怎样设置?解答:Dim xuhao As Integerxuhao = 1Range("b2").SelectDo While Selection <> ""If Selection <> 0 ThenActiveCell.Previous.Value = xuhaoxuhao = xuhao + 1End IfActiveCell.Offset(1, 0).Range("a1").SelectLoop004.求教自定义函数查询了一些自定义函数的例子都是单变量的。
自定义函数能否建立“(As Range) As Interger”的函数,应该可以的,请各位大师赐教!请以“∑x2”为例,万分感谢!(该用"For Each ...Next",就是还不知道如何引用Range中的每个值,请高手指点。
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所示。
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语句输出到终端。
EXCELVBA20个有用的ExcelVBA代码
EXCELVBA20个有用的ExcelVBA代码1.显示多个隐藏的工作表如果你的工作簿里面有多个隐藏的工作表,你需要花很多时间一个一个的显示隐藏的工作表。
下面的代码,可以让你一次显示所有的工作表Sub UnhideAllWoksheets()Dim ws As WorksheetFor Each ws In ActiveWorkbook.Worksheetsws.Visible = xlSheetVisibleNext wsEnd Sub2.隐藏除了活动工作表外的所有工作表如果你做的报表,希望隐藏除了报表工作表以外的所有工作表,则可以用一下代码来实现:Sub HideAllExcetActiveSheet()Dim ws As WorksheetFor Each ws In ThisWorkbook.WorksheetsIf <> Thenws.Visible = xlSheetHiddenEnd ifNext wsEnd Sub3.用VBA代码按字母的顺序对工作表进行排序如果你有一个包含多个工作表的工作簿,并且希望按字母对工作表进行排序,那么下面的代码,可以派上用场。
Sub SortSheetsTabName()Application.ScreenUpdating = FalseDim ShCount As Integer, i As Integer, j As IntegerShCount = Sheets.CountFor i = 1 To ShCount - 1For j = i + 1 To ShCountIf Sheets(j).Name < Sheets(i).Name ThenSheets(j).Move before:=Sheets(i)End IfNext jNext iApplication.ScreenUpdating = TrueEnd Sub4.一次性保护所有的工作表如果工作薄里面有多个工作表,并且希望保护所有的工作表,那么下面的代码,可以派上用场。
43个典型ExcelVBA实例
43个典型ExcelVBA实例目录例1.九九乘法表(Print方法的应用) (3)例2 输入个人信息(Inputbox函数的应用) (3)例3 退出确认(Msgbox函数的应用) (5)例4 突出显示不及格学生 (7)例5 从身份证号码中提取性别 (8)例6 评定成绩等级 (10)例7 计算个人所得税 (12)例8 密码验证 (14)例9 求最小公倍数和最大公约数 (16)例10 输出ASCII码表 (17)例11 计算选中区域数值之和 (18)例12 换零钱法(多重循环) (19)例13 数据排序 (23)例14 彩票幸运号码 (24)例15 用数组填充单元格区域 (26)例16 判断单元格是否包含公式 (27)例17 自动填充公式 (28)例18 锁定和隐藏公式 (30)例19 将单元格公式转换为数值 (31)例20 删除所有公式 (32)例21 用VBA表示数组公式 (33)数据查询 (33)例22 查找指定的值 (34)例23 带格式查找 (36)例24 查找上一个/下一个数据 (37)例25 代码转换 (39)例26 模糊查询 (40)例27 网上查询快件信息 (41)例28 查询基金信息 (43)例29 查询手机所在地 (45)例30 使用字典查询 (46)数据排序 (48)例31 用VBA代码排序 (48)例32 乱序排序 (50)例33 自定义序列排序 (51)例34 多关键字排序 (53)例35 输入数据自动排序 (54)例36 数组排序 (54)例37 使用Small和Large函数排序 (56)例38 使用RANK函数排序 (59)例39 姓名按笔画排序 (60)例40 用VBA进行简单筛选 (65)例41 用VBA进行高级筛选 (66)例42 筛选非重复值 (68)例43 取消筛选 (69):例1.九九乘法表(Print方法的应用)1.案例说明在早期的Basic版本中,程序运行结果主要依靠Print语句输出到终端。
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语句输出到终端。
ExcelVBA编程150实例大全
ExcelVBA编程实例150例之杨若古兰创作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所示.图00-03:右击工作表标签弹出菜单并选择“检查代码”打开VBE编辑器图00-04:右击Excel图标弹出菜单并选择“检查代码”打开VBE编辑器图00-05:在宏对话框中单击“编辑”按钮打开VBE编辑器VBE编辑器窗口简介刚打开VBE 编辑器时,所显示的窗口如图00-06所示,其中没有代码模块窗口.图00-06:刚打开VBE编辑器时的窗口可以在“工程资本管理器”中双击任一对象打开代码窗口,或者选择菜单“拔出——模块”或“拔出——类模块”来打开代码窗口.普通VBE编辑器窗口及各构成部件名称如图00-07所示,可以通过“视图”菜单中的菜单项选择所出现的窗口.同时,可以在“工程属性”窗口中设置或点窜响应对象的属性.图00-07:VBE编辑器窗口上面是带有效户窗体的VBE编辑器窗口,如图00-08所示.选择VBE菜单“拔出——用户窗体”,即可拔出一个用户窗体.当拔出用户窗体后,在“工程资本管理器”窗口中会出现一个用户窗体对象,“工程属性”窗口显示当前用户窗体的属性,可对相干属性进行设置或点窜.同时,在用户窗体上用鼠标单击,会出现“控件工具箱”.在“工程资本管理器”窗口双击用户窗体图标,会出现响应的用户窗体;在用户窗体图标或者是在用户窗体上单击鼠标右键,然后在弹出的菜单当选择“检查代码”,则会出现用户窗体代码窗口.图00-08:VBE编辑器窗口(带有效户窗体)在VBE编辑器中输入VBA代码如前所述,您可以选择VBE菜单“拔出——用户窗体/模块/类模块”来拔出模块或用户窗体和响应的代码窗口.此外,您也能够在“工程资本管理器”中单击鼠标右键,从弹出的菜单当选择“拔出——用户窗体/模块/类模块”来实现上面的操纵.在获取响应的代码模块窗口后,就可以输入VBA代码了.在VBE编辑器的代码模块中输入VBA代码,通常有以下几种方法:■ 手工键盘输入;■ 使用宏录制器,即选择菜单“工具——宏——录制新宏”命令,将所进行的操纵主动录制成宏代码;■ 复制/粘贴代码,即将现有的代码复制后,粘贴到响应的代码模块中;■ 导入代码模块,即在VBE编辑器当选择菜单“文件——导入文件”或在“工程资本管理器”的任一对象上右击鼠标选择菜单“导入文件”,选择响应的代码文件导入.如果不想要某个模块了,可以选择菜单“文件——移除模块”,也能够在响应的模块上单击鼠标右键,从弹出的菜单当选择“移除模块”.此时,会弹出一个警告框,扣问在移除模块前是否将其导出,可以根据须要进行选择.也能够选择菜单“文件——导出文件”或在响应的模块上单击鼠标右键后,从弹出的菜单当选择“导出文件”,将移除的模块保管在响应的文件夹中.如许,当前可以对其进行导入,从而加以利用.调试VBA代码在VBE编辑器的菜单中,有两项与调试运转有关的菜单项,即“调试”菜单和“运转”菜单,它们提供了各种调试和运转的手段.在我现阶段进行代码调试时,经常使用到的有以下几个:■ 逐语句.可以按F8键对代码按顺序一条一条语句运转,从而找出语句或逻辑错误.■ 设置断点.在可能存在成绩的语句处设置断点(可通过在响应代码前的空白部位单击,将会出现一个深红色的椭圆即断点),当程序运转至断点处时,会中断运转.■ 在语句的适当部位设置Debug.Print语句,运转后其结果会显示在“立即窗口”中,可以此测试或跟踪变量的值.■ 在“立即窗口”中测试.对值的测试或跟踪,也能够以“?”开头,在“立即窗口”中输入须要测试值的语句,按Enter回车键后将立即出现结果;对履行语句的测试,可直接在“立即窗口”中输入,按Enter回车键后将履行.■ 可以按F5键直接运转光标所在地位的子程序.在履行程序后,必须在Excel工作表中检查所得到的结果.可以用鼠标单击VBE编辑器左上角的Excel图标或者是按Alt+F11组合键切换到Excel界面.(当然,对程序代码的调试有很多方法和技巧,留待当前对VBA进一步研讨和理解更透彻后一并讨论.)利用VBA帮忙零碎如果碰到疑问或错误,可以利用Excel自带的VBA帮忙零碎.■ 可以在如图00-09所示的部位输入须要帮忙的关键词,按Enter回车键后将会出现相干主题.用鼠标单击响应的主题即会出现具体的帮忙信息.图00-09:帮忙搜索窗口■ 可以按F2键,调出“对象浏览器”窗口(如图00-10所示),在搜索文本框中输入须要帮忙的关键词,将会在“搜索结果”中出现一系列相干的对象及方法、属性列表,单击响应的对象则会在“类”和“成员”列表框中显示响应的对象和方法、属性成员列表,在成员列表中响应的项目上按F1键即会出现具体的帮忙信息.(“对象浏览器”是一个很好的帮忙工具,值得好好研讨)图00-10:对象浏览器窗口参考材料《ExcelVBA编程入门范例》参考或援用了以下书籍和材料:(1)Excel 2003高级VBA编程宝典(2)Excel 2003与VBA编程从入门到精通(中文版)(3)巧学巧用Excel 2003 VBA与宏(中文版)(4)ExcelVBA利用程序专业设计实用指南(5)ExcelVBA利用开发与实例精讲(6)一些网上资本更多的信息关于ExcelVBA的更多参考和进修资本,可以在上查找,有疑问也能够在ExcelHome论坛中提问.您也能够登录我的博客,上面有很多Excel的进修材料.同时,欢迎与我联系交流,我的e-mail是:xhdsxfjy@.“进修Excel,使用VBA对Excel进行控制操纵是我很热衷的专业快乐爱好之一.”——fanjy第一章Excel利用程序对象(Application对象)及其经常使用方法基本操纵利用示例分类:ExcelVBA>>ExcelVBA编程入门范例Application对象代表全部Microsoft Excel利用程序,带有175个属性和52个方法,可以设置全部利用程序的环境或配置利用程序.示例01-01:体验开/关屏幕更新(ScreenUpdating属性)Sub 关闭屏幕更新() MsgBox "顺序切换工作表Sheet1→Sheet2→Sheet3→Sheet2,先开启屏幕更新,然后关闭屏幕更新" Worksheets(1).Select MsgBox "目前屏幕中显示工作表Sheet1" Application.ScreenUpdating = True Worksheets(2).Select MsgBox "显示Sheet2了吗?" Worksheets(3).Select MsgBox "显示Sheet3了吗?" Worksheets(2).Select MsgBox "上面与前面履行的程序代码不异,但关闭屏幕更新功能" Worksheets(1).Select MsgBox "目前屏幕中显示工作表Sheet1" & Chr(10) & "关屏屏幕更新功能" Application.ScreenUpdating = False Worksheets(2).Select MsgBox "显示Sheet2了吗?" Worksheets(3).Select MsgBox "显示Sheet3了吗?" Worksheets(2).Select Application.ScreenUpdating = TrueEnd Sub示例说明:ScreenUpdating属性用来控制屏幕更新.当运转一个宏程序处理涉及到多个工作表或单元格中的大量数据时,若没有关闭屏幕更新,则会占用CPU的处理时间,从而降低程序的运转速度,而关闭该属性则可明显提高程序运转速度.示例01-02:使用形态栏(StatusBar属性)Sub testStatusBar() Application.DisplayStatusBar = True '开启形态栏显示 '赋值形态栏显示的文本Application.StatusBar = ""End Sub示例说明:StatusBar属性用来指定显示在形态栏上的信息.若不想再显示形态栏文本,可使用Application.StatusBar = False语句关闭形态栏显示,也能够在程序开始将本来的形态栏设置存储,如使用语句oldStatusBar = Application.DisplayStatusBar将形态栏本来的信息存储在变量oldStatusBar,在程序运转完成或退出时,将变量从头赋值给形态栏,如使用语句Application.DisplayStatusBar = oldStatusBar,以恢复形态栏原状.示例01-03:处理光标(Cursor属性)Sub ViewCursors() Application.Cursor = xlNorthwestArrow MsgBox "您将使用箭头光标,切换到Excel界面检查光标外形" Application.Cursor = xlIBeam MsgBox "您将使用工形光标,切换到Excel界面检查光标外形" Application.Cursor = xlWait MsgBox "您将使用等待形光标,切换到Excel界面检查光标外形" Application.Cursor = xlDefault MsgBox "您已将光标恢复为缺省形态"End Sub示例01-04:获取零碎信息Sub GetSystemInfo() MsgBox "Excel版本信息为:" & Application.CalculationVersion MsgBox "Excel当前答应使用的内存为:" & Application.MemoryFree MsgBox "Excel当前已使用的内存为:" & Application.MemoryUsed MsgBox "Excel可以使用的内存为:" & Application.MemoryTotal MsgBox "本机操纵零碎的名称和版本为:" & Application.OperatingSystem MsgBox "本产品所登记的组织名为:" & anizationName MsgBox "当前用户名为:" & erName MsgBox "当前使用的Excel版本为:" & Application.VersionEnd Sub示例说明:可以使用给UserName属性赋值以设置用户名称.示例01-05:退出复制/剪切模式(CutCopyMode属性)Sub exitCutCopyMode() Application.CutCopyMode = FalseEnd Sub示例说明:退出复制/剪切模式后,在程序运转时所进行的复制或剪切操纵不会在原单元格区域留下贱动的虚框线.须要提醒的是,在程序运转完后,应使用Application.CutCopyMode = False语句恢复该属性的默认设置.示例01-06:禁止弹出警告信息(DisplayAlerts属性)Sub testAlertsDisplay() Application.DisplayAlerts = FalseEnd Sub示例说明:在程序运转过程中,有时因为Excel本人设置的缘由,会弹出对话框,从而间断程序的运转,您可以在程序之前加上Application.DisplayAlerts = False语句以禁止弹出这些对话框而不影响程序正常运转.须要留意的是,在程序运转结束前,应使DisplayAlerts 属性恢复为缺省形态,即使用语句Application.DisplayAlerts = True.该属性的默认设置为True,当将该属性设置为False时,Excel会使直接使用对话框中默认的选择,从而不会因为弹出对话框而影响程序运转.示例01-07:将Excel全屏幕显示Sub testFullScreen() MsgBox "运转后将Excel的显示模式设置为全屏幕" Application.DisplayFullScreen = True MsgBox "恢复为本来的形态" Application.DisplayFullScreen = FalseEnd Sub示例01-08:Excel启动的文件夹路径Sub ExcelStartfolder() MsgBox "Excel启动的文件夹路径为:" & Chr(10) & Application.StartupPathEnd Sub示例01-09:打开比来使用过的文档Sub OpenRecentFiles() MsgBox "显示比来使用过的第三个文件名,并打开该文件" MsgBox "比来使用的第三个文件的名称为:" & Application.RecentFiles(3).Name Application.RecentFiles(3).OpenEnd Sub 示例01-10:打开文件(FindFile方法)Sub FindFileOpen() On Error Resume Next MsgBox "请打开文件", vbOKOnly + vbInformation, "打开文件" If Not Application.FindFile Then MsgBox "文件未找到", vbOKOnly + vbInformation, "打开失败" End IfEnd Sub示例说明:本示例将显示“打开”文件对话框,若用户未打开文件(即点击“取消”按钮),则会显示“打开失败”信息框.示例中使用了FindFile方法,用来显示“打开”对话框并让用户打开一个文件.如果成功打开一个新文件,则该值为True.如果用户取消了操纵并退出该对话框,则该值为False.示例01-11:文件对话框操纵(FileDialog属性)Sub UseFileDialogOpen() Dim lngCount As Long '开启"打开文件"对话框 With Application.FileDialog(msoFileDialogOpen) .AllowMultiSelect = True .Show '显示所选的每个文件的路径For lngCount = 1 To .SelectedItems.Count MsgBox .SelectedItems(lngCount) Next lngCount End WithEnd Sub示例说明:本示例显示“打开文件”对话框,当用户在其当选择一个或多个文件后,将顺次显示每个文件的路径.其中,FileDialog属性返回打开和保管对话框中一系列对象的集合,您可以对该集合对象的属性进行进一步的设置,如上例中的AllowMultiSelect属性设置为True将答应用户选择多个文件.示例01-12:保管Excel的工作环境Sub 保管Excel的工作环境() MsgBox "将Excel的工作环境保管到D:\ExcelSample\中" Application.SaveWorkspace "D:\ExcelSample\Sample"End Sub示例说明:运转本程序后,将工作簿以带后缀名.xlw保管到D盘的ExcelSample文件夹中,生成的文件全名为Sample.xlw.当改变工作簿并保管时,Excel会扣问是覆盖原文件还是保管副本.示例01-13:改变Excel工作簿名字(Caption属性)Sub SetCaption() Application.Caption = "My ExcelBook"End Sub示例说明:运转本程序后,将工作簿左上角Excel图标右边的“Microsoft Excel”改为“My ExcelBook”.示例01-14:使用InputBox方法Sub SampleInputBox() Dim vInput vInput = InputBox("请输入用户名:", "获取用户名",erName) MsgBox "您好!" & vInput & ".很高兴能认识您.", vbOKOnly, "打号召"End Sub示例01-15:设置页边距(CentimetersToPoints方法)Sub SetLeftMargin() MsgBox "将工作表Sheet1的左页边距设为5厘米" Worksheets("Sheet1").PageSetup.LeftMargin = Application.CentimetersToPoints(5)End Sub示例01-16:使用Windows的计算器(ActivateMicrosoftApp方法)Sub CallCalculate() Application.ActivateMicrosoftApp Index:=0End Sub示例说明:运转本程序后,将调用Windows的计算器.示例01-17:在程序中运转另一个宏(Run方法)Sub runOtherMacro() MsgBox "本程序先选择A1至C6单元格区域后履行DrawLine宏" ActiveSheet.Range("A2:C6").Select Application.Run "DrawLine"End Sub示例01-18:在指定的时间履行宏(OnTime方法)Sub AfterTimetoRun() MsgBox "从此刻开始,10秒后履行程序「testFullScreen」" Application.OnTime Now + TimeValue("00:00:10"), "testFullScreen"End Sub示例说明:运转本程序后,在10秒后将履行程序testFullScreen.示例01-19:临时停止宏运转(Wait方法)Sub Stop5sMacroRun() Dim SetTime As Date MsgBox "按下「确定」,5秒后履行程序「testFullScreen」" SetTime = DateAdd("s", 5, Now()) Application.Wait SetTime Call testFullScreenEnd Sub示例说明:运转本程序后,按下弹出的提示框中的“确定”按钮,等待5秒后履行另一程序testFullScreen.示例01-20:按下指定的按键后履行程序(OnKey方法)[示例01-20-1]Sub PressKeytoRun() MsgBox "按下Ctrl+D后将履行程序「testFullScreen」" Application.OnKey "^{d}", "testFullScreen"End Sub[示例01-20-2]Sub ResetKey() MsgBox "恢复本来的按键形态" Application.OnKey "^{d}"End Sub示例说明:Onkey方法的感化主如果指定特定的键,当按下指定的键时运转响应的宏程序,或者按下指定的键时,使Excel屏蔽特定的功能.示例01-21:从头计算工作簿[示例01-21-1]Sub CalculateAllWorkbook() Application.CalculateEnd Sub示例说明:当工作簿的计算模式被设置为手动模式后,应用Calculate方法可以从头计算所有打开的工作簿、工作簿中特定的工作表或者工作表中指定的单元格区域.[示例01-21-2]Sub CalculateFullSample() If Application.CalculationVersion <> Workbooks(1).CalculationVersion Then Application.CalculateFull End IfEnd Sub示例说明:本示例先将当前Microsoft Excel的版本与上次计算该工作簿的Excel版本进行比较,如果两个版本分歧,则对所有打开工作簿中的数据进行一次完好计算.其中,CalculationVersion属性返回工作簿的版本信息.示例01-22:控制函数从头计算(Volatile方法)Function NonStaticRand() '当工作表中任意单元格从头计算时本函数更新 Application.Volatile True NonStaticRand = Rnd()End Function示例说明:本示例摸仿Excel中的Rand()函数,当工作表单元格发生变更时,都会从头计算该函数.在例子中,使用了Volatile方法,强制函数进行从头计算,即不管何时从头计算工作表,该函数都会从头计算.示例01-23:利用工作表函数(WorksheetFunction属性)Sub WorksheetFunctionSample() Dim myRange As Range, answer Set myRange = Worksheets("Sheet1").Range("A1:C10") answer = Application.WorksheetFunction.Min(myRange) MsgBox answerEnd Sub示例说明:本示例获取工作表Sheet1中单元格区域A1:C10中的最小值,使用了工作表函数Min().普通,使用WorksheetFunction属性援用工作表函数,但如果VBA自带有实现不异功能的函数,则直接使用该函数,否则会出现错误.示例01-24:获取堆叠区域(Intersect方法)Sub IntersectRange() Dim rSect As Range Worksheets("Sheet1").Activate Set rSect = Application.Intersect(Range("rg1"), Range("rg2")) If rSect Is Nothing Then MsgBox "没有交叉区域" Else rSect.Select End IfEnd Sub示例说明:本示例在工作表Sheet1当选定两个命名区域rg1和rg2的堆叠区域,如果所选区域不堆叠,则显示一条响应的信息.其中,Intersect 方法返回一个Range对象,代表两个或多个范围堆叠的矩形区域.示例01-25:获取路径分隔符(PathSeparator属性)Sub GetPathSeparator() MsgBox "路径分隔符为" & Application.PathSeparatorEnd Sub示例说明:本示例使用PathSeparator 属性返回路径分隔符(“\”).示例01-26:快速移至指定地位(Goto方法)Sub GotoSample() Application.Goto Reference:=Worksheets("Sheet1").Range("A154"), _ scroll:=TrueEnd Sub示例说明:本示例运转后,将当前单元格移至工作表Sheet1中的单元格A154.示例01-27:显示内置对话框(Dialogs属性)Sub DialogSample() Application.Dialogs(xlDialogOpen).ShowEnd Sub示例说明:本示例显示Excel的“打开”文件对话框.其中,Dialogs属性返回的集合代表所有的Excel内置对话框.示例01-28:退出Excel(SendKeys方法)Sub SendKeysSample() Application.SendKeys ("%fx")End Sub示例说明:本示例使用SendKeys方法退出Excel,若未保管,则会弹出提示对话框并让用户作出响应的选择.SendKeys方法的感化是摸拟键盘输入,如例中的“%fx”暗示在Excel中同时按下Alt、F和X三个键.示例01-29:关闭Excel Sub 关闭Excel() MsgBox "Excel将会关闭" Application.QuitEnd Sub示例说明:运转本程序后,若该工作簿未保管,则会弹出对话框扣问是否保管.=============================(by fanjy)第二章窗口(Window对象)基本操纵利用示例(一)分类:ExcelVBA>>ExcelVBA编程入门范例Window对象代表一个窗口,约有48个属性和14个方法,能对窗口特性进行设置和操纵.Window对象是Windows集合中的成员,对于Application对象来说,Windows集合包含该利用程序中的所有窗口;对于Workbook对象来说,Windows集合只包含指定工作簿中的窗口.上面介绍一些示例,以演示和说明Window对象及其属性和方法的应用.示例02-01:激活窗口(Activate方法)Sub SelectWindow() Dim iWin As Long, i As Long, bWin MsgBox "顺次切换已打开的窗口" iWin = Windows.Count MsgBox “您已打开的窗口数量为:” & iWin For i = 1 To iWin Windows(i).Activate bWin = MsgBox("您激活了第 " & i & "个窗口,还要继续吗?", vbYesNo) If bWin = vbNo Then Exit Sub Next iEnd Sub示例02-02:窗口形态(WindowState属性)[示例02-02-01]Sub WindowStateTest() MsgBox "当前活动工作簿窗口将最小化" Windows(1).WindowState = xlMinimized MsgBox "当前活动工作簿窗口将恢复正常" Windows(1).WindowState = xlNormal MsgBox "当前活动工作簿窗口将最大化" Windows(1).WindowState = xlMaximizedEnd Sub示例说明:使用WindowState属性可以返回或者设置窗口的形态.示例中,常量xlMinimized、xlNormal和xlMaximized分别代表窗口分歧形态值,Windows(1)暗示当前活动窗口.可以使用Windows(index)来返回单个的Window对象,其中的index为窗口的名称或编号,活动窗口老是Windows(1).[示例02-02-02]Sub testWindow() '测试Excel利用程序窗口形态MsgBox "利用程序窗口将最大化" Application.WindowState = xlMaximized Call testWindowState MsgBox "利用程序窗口将恢复正常" Application.WindowState = xlNormal MsgBox "利用程序窗口已恢复正常" '测试活动工作簿窗口形态MsgBox "当前活动工作簿窗口将最小化" ActiveWindow.WindowState = xlMinimized Call testWindowState MsgBox "当前活动工作簿窗口将最大化" ActiveWindow.WindowState = xlMaximized Call testWindowState MsgBox "当前活动工作簿窗口将恢复正常" ActiveWindow.WindowState = xlNormal Call testWindowState MsgBox "利用程序窗口将最小化" Application.WindowState = xlMinimized Call testWindowStateEnd Sub‘*********************************************************Sub testWindowState() Select Case Application.WindowState Case xlMaximized: MsgBox "利用程序窗口已最大化" Case xlMinimized: MsgBox "利用程序窗口已最小化" Case xlNormal: Select Case ActiveWindow.WindowState Case xlMaximized: MsgBox "当前活动工作簿窗口已最大化" Case xlMinimized: MsgBox "当前活动工作簿窗口已最小化" Case xlNormal: MsgBox "当前活动工作簿窗口已恢复正常" End Select End SelectEnd Sub示例说明:本示例有两个程序,其中testWindow()是主程序,调用子程序textWindowState(),演示了利用程序窗口和工作簿窗口的分歧形态.当前活动窗口普通代表当前活动工作簿窗口,读者可以在VBE编辑器中按F8键逐语句运转testWindow()程序,观察Excel利用程序及工作簿窗口的分歧形态.此外,在子程序中,还应用了嵌套的Select Case结构.[示例02-02-03]Sub SheetGradualGrow() Dim x As Integer With ActiveWindow .WindowState = xlNormal .Top = 1 .Left = 1 .Height= 50 .Width = 50 For x = 50 To ableHeight .Height = x Next x For x = 50 To ableWidth .Width = x Next x .WindowState = xlMaximized End WithEnd Sub示例说明:本示例将动态演示工作簿窗口由小到大直至最大化的变更过程.在运转程序时,您可以将VBE窗口缩小,从而在工作簿中检查动态后果,也能够在Excel当选择菜单中的宏命令履行以检查后果.示例02-03:切换显示工作表元素[示例02-03-01]Sub testDisplayHeading() MsgBox “切换显示/埋没行列标号”ActiveWindow.DisplayHeadings = Not ActiveWindow.DisplayHeadingsEnd Sub示例说明:本示例切换是否显示工作表中的行列标号.运转后,工作表中的行标号和列标号将消逝;再次运转后,行列标号从头出现,如此反复.您也能够将该属性设置为False,以取消行列标号的显示,如ActiveWindow.DisplayHeadings = False;而将该属性设置为True,则显示行列标号.[示例02-03-02]Sub testDisplayGridline() MsgBox “切换显示/埋没网格线”ActiveWindow.DisplayGridlines = Not ActiveWindow.DisplayGridlinesEnd Sub示例说明:本示例切换是否显示工作表中的网格线.运转后,工作表中的网格线消逝,再次运转后,网格线从头出现,如此反复.您也能够将该属性设置为False,以取消网格线显示,如ActiveWindow.DisplayGridlines = False;而将该属性设置为True,则显示网格线.[示例02-03-03]Sub DisplayHorizontalScrollBar() MsgBox “切换显示/埋没水平滚动条”ActiveWindow.DisplayHorizontalScrollBar = _ NotActiveWindow.DisplayHorizontalScrollBarEnd Sub示例说明:本示例切换是否显示工作表中的水平滚动条.运转后,工作表中的水平滚动条消逝,再次运转后,水平滚动条从头出现,如此反复.您也能够将该属性设置为False,以取消水平滚动条,如ActiveWindow.DisplayHorizontalScrollBar = False;而将该属性设置为True,则显示水平滚动条.同理,DisplayVerticalScrollBar属性将用来设置垂直滚动条.[示例02-03-04]Sub DisplayScrollBar() MsgBox "切换显示/埋没水平和垂直滚动条" Application.DisplayScrollBars = Not (Application.DisplayScrollBars)End Sub示例说明:本示例切换是否显示工作表中的水平和垂直滚动条.运转后,工作表中的水平和垂直滚动条同时消逝,再次运转后,水平和垂直滚动条从头出现,如此反复.您也能够将该属性设置为False,以取消水平和垂直滚动条显示,如Application.DisplayScrollBars= False;而将该属性设置为True,则显示水平和垂直滚动条.示例02-04:显示公式(DisplayFormulas属性)Sub DisplayFormula() MsgBox “显示工作表中包含公式的单元格中的公式” ActiveWindow.DisplayFormulas = TrueEnd Sub示例说明:本程序运转后,工作表中含有公式的单元格将显示公式而不是数值.若要显示数值,则将该属性设置为False,或者,如果工作表中的公式显示的是结果数值,则该属性为False.示例02-05:显示/埋没工作表标签(DisplayWorkbookTabs属性)Sub testDisplayWorkbookTab() MsgBox “埋没工作表标签”ActiveWindow.DisplayWorkbookTabs = FalseEnd Sub示例说明:本程序运转后,工作表标签消逝.将该属性设置为True,从头显示工作表标签.示例02-06:命名活动窗口(Caption属性)Sub testCaption() MsgBox "当前活动工作簿窗口的名字是:" & ActiveWindow.Caption ActiveWorkbook.Windows(1).Caption = "我的工作簿" MsgBox "当前活动工作簿窗口的名字是:" & ActiveWindow.CaptionEnd Sub示例说明:本程序运转后,显示当前活动工作簿窗口本来的名称(即工作簿窗口未处于最大化形态时,出此刻窗口顶部题目栏中的文字),然后设置当前活动工作簿窗口名称,即使用语句ActiveWorkbook.Windows(1).Caption = "我的工作簿",最初显示当前活动工作簿窗口的新名称.改变窗口的题目其实不会改变工作簿的名称.示例02-07:挪动窗口到指定地位(ScrollRow属性和ScrollColumn属性)Sub testScroll() MsgBox “将当前窗口工作表左上角单元格移至第10行第3列”ActiveWindow.ScrollRow = 10 ActiveWindow.ScrollColumn = 3End Sub示例说明:本程序运转后,当前活动窗口左上角单元格为第10行第3列.可以通过设置这两个属性来挪动窗口到指定的地位,也能够返回指定窗格或窗口最左上面的行号或列号.示例02-08:调整窗口(EnableResize属性)Sub testResize() MsgBox “设置窗口大小不成调整”ActiveWindow.EnableResize = FalseEnd Sub示例说明:测试本程序前,将当前工作簿窗口恢复为正常形态(即让工作簿题目可见),运转程序后,当前工作簿窗口将不克不及调整其大小,右上角的最小化最大化按钮将消逝(即埋没最大化和最小化按钮).该属性设置为True,则能调整窗口大小.示例02-09:拆分窗格[示例02-09-01]Sub SplitWindow1() Dim iRow As Long, iColumn As Long MsgBox "以活动单元格为基准拆分窗格" iRow = ActiveCell.Row iColumn = ActiveCell.Column With ActiveWindow .SplitColumn = iColumn .SplitRow = iRow End With MsgBox "恢复本来的窗口形态" ActiveWindow.Split = FalseEnd Sub[示例02-09-02]Sub SplitWindow() Dim iRow As Long, iColumn As Long MsgBox "以活动单元格为基准拆分窗格" iRow = ActiveCell.Row iColumn = ActiveCell.Column With ActiveWindow .SplitColumn = iColumn .SplitRow = iRow End With MsgBox "恢复本来的窗口形态" ActiveWindow.SplitColumn = 0 ActiveWindow.SplitRow = 0End Sub示例说明:本示例演示了以活动单元格为基准拆分窗格.如果指定窗口被拆分,则Split属性的值为True;设置该属性的值为False则取消窗格拆分.也能够设置SplitColumn属性和SplitRow属性的值来取消窗格拆分.示例02-10:冻结窗格(FreezePanes属性)Sub testFreezePane() MsgBox “冻结窗格” ActiveWindow.FreezePanes = TrueEnd Sub示例说明:运转本程序后,将会冻结活动单元格所在地位上方和左边的单元格区域.将该属性的值设置为False,将取消冻结窗格.示例02-11:设置网格线色彩(GridlineColor属性和GridlineColorIndex 属性)Sub setGridlineColor() Dim iColor As Long iColor=ActiveWindow.GridlineColor MsgBox "将活动窗口的网格。
30个有用的ExcelVBA代码(26~30)
30个有⽤的ExcelVBA代码(26~30)26.⼀次保存并关闭所有⼯作簿如果有许多⼯作簿打开,并且要保存和关闭这些⼯作簿,则需要⼿动转到并保存每个⼯作簿,然后关闭它。
这是⼀个VBA代码,它将关闭所有⼯作簿并在关闭时保存它。
Sub CloseAllWorkbooks() Dim wb As Workbook For Each wb In Workbooks wb.Close SaveChanges:=True Next wb End Sub请注意,代码只适⽤于那些先前已经保存过的⼯作簿。
如果有新⼯作簿,则必须指定要保存该⼯作簿的⽂件夹的名称和位置。
27.限制光标在特定区域的移动如果要限制⼯作表中的滚动区域,可以使⽤以下代码执⾏此操作:Private Sub Worksheet_Open() Sheets(“Sheet1”).ScrollArea = “A1:M17” End Sub请注意,您需要将此代码放⼊要限制滚动的⼯作表中。
28.将筛选后的数据复制到新⼯作簿中如果您使⽤的是⼀个巨⼤的数据区域,那么过滤器在分割数据时⾮常有⽤。
有时,您可能只需要数据区域的⼀部分。
在这种情况下,您可以使⽤下⾯的代码将筛选后的数据快速复制到新⼯作表中。
Sub CopyFilteredData() If ActiveSheet.AutoFilterMode = False Then Exit Sub End If ActiveSheet.AutoFilter.Range.Copy Workbooks.Add.Worksheets(1).Paste Cells.EntireColumn.AutoFit End Sub此代码⾸先检查是否有任何已筛选的数据否则,它会复制筛选后的数据,插⼊新⼯作簿,并将数据粘贴到其中。
29.将所有公式转换为选定数据集中的值如果要快速将所有具有公式的单元格转换为值,可以使⽤以下代码:Sub ConvertFormulastoValues() Dim MyRange As RangeDim MyCell As Range Set MyRange = Selection For Each MyCell In MyRange If MyCell.HasFormula Then MyCell.Formula = MyCell.Value End If Next MyCell End Sub 注意这个变化是不可逆的,公式将⽆法恢复。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1, 类动态数组控件‘2007VBA技巧‘快盘\Mytb\更新\类\类动态数组控件.xlsm‘2013-6-16类模块代码:Public WithEvents frm As erFormPublic WithEvents myText As MSForms.TextBoxPublic Index As IntegerPrivate Sub myText_Change()Index = Mid(, 8)If frm.Controls("Textbox" & Index) <> "" Thenbel1.Caption = "控件事件:Change" & vbCrLf & _"控件名称:" & frm.Controls("Textbox" & Index).Name & vbCrLf & _ "Text属性:" & frm.Controls("Textbox" & Index).TextEnd IfEnd SubPrivate Sub myText_DblClick(ByVal Cancel As MSForms.ReturnBoolean)Index = Mid(, 8)If frm.Controls("Textbox" & Index) <> "" Thenbel1.Caption = "控件事件:DblClick" & vbCrLf & _"控件名称:" & frm.Controls("Textbox" & Index).Name & vbCrLf & _"Cancel属性:" & CancelEnd IfEnd SubKeyUp事件与Change事件重迭,二者取其一Private Sub myText_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)Index = Mid(, 8)If frm.Controls("Textbox" & Index) <> "" Thenbel1.Caption = "控件事件:KeyUp" & vbCrLf & _"控件名称:" & frm.Controls("Textbox" & Index).Name & vbCrLf & _"按键值:&H" & Hex$(KeyCode)End IfEnd SubPrivate Sub myText_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)Select Case IndexCase 3bel2.Caption = "3"Case 8bel2.Caption = "8"Case 4bel2.Caption = "4"Case 9bel2.Caption = "9"Case Elsebel2.Caption = " "End SelectEnd Sub模块1代码:Public a(1 To 14) As myTextSub formshow()Userform2.ShowEnd Sub窗体代码:Private Sub CommandButton1_Click()Dim i&, t$For i = 1 To 14If a(i).myText.Text <> "" Thent = t & "控件名称:" & a(i) & vbTab & "Text属性:" & a(i).myText.Text & vbCrLfEnd IfNext iMsgBox tEnd SubPrivate Sub UserForm_Initialize()Dim i&For i = 1 To 14Set a(i) = New myTextSet a(i).myText = Me.Controls("Textbox" & i)Set a(i).frm = MeNext iEnd Sub工作表代码:Private Sub CommandButton1_Click()Userform2.ShowEnd Sub2, 复选框选择‘快盘\Mytb\更新\类\类0928..xls‘当复选框选择到7个时,其它的复选框不能再选择。
当复选框选择小于7个,其它的复选框还能继续选择。
类模块代码:Public WithEvents che As MSForms.CheckBoxPublic WithEvents frm As erFormPrivate Sub che_Change() '类的数据改变事件Dim index As Longindex = Mid(, 9) '取出checkboxN中的数字NIf frm.Controls("checkbox" & index) = True Thena = a & Format(index, "00") & ","n = n + 1If n = 7 ThenFor i = 1 To 18b = Format(i, "00")If InStr(a, b) = 0 Thenfrm.Controls("checkbox" & i).Enabled = False End IfNextElseEnd IfElsen = n - 1a = Replace(a, Format(index, "00"), "")For i = 1 To 18frm.Controls("checkbox" & i).Enabled = True NextEnd IfEnd Sub模块1代码:Public newclass(1 To 18) As che类, n&, a$Sub formshow()UserForm1.ShowEnd Sub窗体代码:Private Sub UserForm_Initialize()For i = 1 To 18Set newclass(i) = New che类 '创建一个新的che类对象Set newclass(i).che = Controls("checkbox" & i) '设置新类和checkbox(i)控件创建关键Set newclass(i).frm = Me '类窗体也和当前窗体建立关联NextEnd Sub3, 限制多个TEXTBOX的输入,使其只能输入数值‘快盘\Mytb\更新\类\如何限制多个TEXTBOX的输入_zhaogang1980.xls‘/thread-956447-1-1.html类模块代码:Public WithEvents Txtbox As MSForms.TextBoxPrivate Sub Txtbox_Change()With CreateObject("vbscript.regexp").Global = True.Pattern = "[^0-9.]+"If .test(Txtbox.Text) ThenTxtbox.Text = .Replace(Txtbox.Text, "") End IfEnd WithEnd Sub模块1代码:Sub Macro1()UserForm1.ShowEnd Sub窗体代码:Dim Txt() As New clsTxtPrivate Sub UserForm_Initialize()Dim ctl As Control, m&For Each ctl In Me.ControlsIf TypeName(ctl) = "TextBox" ThenIf <> "TextBox1" Thenm = m + 1ReDim Preserve Txt(1 To m)Set Txt(m).Txtbox = ctlEnd IfEnd IfNextEnd SubPrivate Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) '第一个不需要类模块If TextBox1.Text = "" Then Exit SubIf IsDate(TextBox1.Text) = False ThenCancel = TrueTextBox1.Text = ""End IfEnd Sub4,限制输入字母‘/thread-28095-1-1-14725.htmlPrivate WithEvents t As MSForms.TextBoxPrivate Sub t_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)'限制只可以输入数字,不可输入字母和其他符号Select Case KeyAsciiCase 48 To 57Case 46If InStr(1, t.Text, ".") ThenKeyAscii = 0End IfCase ElseKeyAscii = 0End SelectEnd SubPrivate Sub t_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)'限制中文输入With CreateObject("vbscript.regexp").Global = True.Pattern = "[^0-9.]+"If .test(t.Text) Thent.Text = .Replace(t.Text, "")End IfEnd WithEnd SubPublic Sub tk(i As OLEObject)'获取oleboject对象Set t = i.ObjectEnd SubDim Ar(1 To 100) As TT'定义数组类Sub justest()Dim j As OLEObject, K As ByteFor Each j In Sheet1.OLEObjectsIf TypeName(j.Object) = "TextBox" Then'如果为TEXTBOX控件j.Object.Text = ""'清空文本框K = K + 1: Set Ar(K) = New TT'同时创建类实体Ar(K).tk j'给类实体赋值,激活事件。