第一篇:word vba常用语句100句
word vba常用语句100句
很好的材料,从google搜索得到。
301)Application.ActivePrinter ‘获取当前打印机
(302)Application.Height '当前应用程序文档的高度
(303)Application.Width ‘当前应用程序文档的宽度
(304)Application.Build ‘获取Word版本号和编译序号
(305)Application.Caption ‘当前应用程序名
(306)Application.DefaultSaveFormat '返回空字符串,表示Word文档(307)Application.DisplayRecentFiles '返回是否显示最近使用的文档的状态(308)Application.Documents.Count '返回当前打开的文档数
(309)Application.FontNames.Count ‘返回当前可用的字体数
(310)Application.Left ‘返回当前文档的水平位置
(311)Application.MacroContainer.FullName '返回当前文档名,包括所在路径
Application.MacroContainer.pach'返回当前文档路径
Application.ActiveDocument.Path‘获得文件的相对路径
(312)Application.NormalTemplate.FullName '返回文档标准模板名称及所在位置(313)Application.RecentFiles.Count '返回最近打开的文档数目
(314)Application.System.CountryRegion '返回应用程序所在的地区代码(315)Application.System.FreeDiskSpace ‘返回应用程序所在磁盘可用空间(316)Application.System.HorizontalResolution '返回显示器的水平分辨率(317)Application.System.VerticalResolution '返回显示器的垂直分辨率(318)Application.System.LanguageDesignation '返回系统所使用的语言
(319)Application.System.MathCoprocessorInstalled ‘返回系统是否安装了数学协处理器(320)Application.System.OperatingSystem ‘返回当前操作系统名
(321)Application.System.ProcessorType '返回计算机处理器名
(322)Application.System.Version ‘返回操作系统的版本号
(323)Application.Templates.Count '返回应用程序所使用的模板数
(324)Application.UserName'返回应用程序用户名
(325)Application.Version ‘返回应用程序的版本号
Documents/Document对象
-------
(326)ActiveDocument.AttachedTemplate.FullName '返回当前文档采用的模板名及模板所在位置
(327)ActiveDocument.Bookmarks.Count '返回当前文档中的书签数
(328)ActiveDocument.Characters.Count '返回当前文档的字符数
(329)ActiveDocument.CodeName ‘返回当前文档的代码名称
(330)ActiveDocument.Comments.Count ‘返回当前文档中的评论数
(331)ActiveDocument.Endnotes.Count '返回当前文档中的尾注数
(332)ActiveDocument.Fields.Count '返回当前文档中的域数目
(333)ActiveDocument.Footnotes.Count ‘返回当前文档中的脚注数
(334)ActiveDocument.FullName '返回当前文档的全名及所在位置
(335)ActiveDocument.HasPassword '当前文档是否有密码保护
(336)ActiveDocument.Hyperlinks.Count '返回当前文档中的链接数
(337)ActiveDocument.Indexes.Count '返回当前文档中的索引数
(338)ActiveDocument.ListParagraphs.Count '返回当前文档中项目编号或项目符号数(339)ActiveDocument.ListTemplates.Count '返回当前文档中使用的列表模板数
(340)ActiveDocument.Paragraphs.Count '返回当前文档中的段落数
(341)ActiveDocument.Password=XXX '设置打开文件使用的密码
(342)ActiveDocument.ReadOnly '获取当前文档是否为只读属性
(343)ActiveDocument.Saved '当前文档是否被保存
(344)ActiveDocument.Sections.Count '当前文档中的节数
(345)ActiveDocument.Sentences.Count ‘当前文档中的语句数
(346)ActiveDocument.Shapes.Count'当前文档中的形状数
(347)ActiveDocument.Styles.Count '当前文档中的样式数
(348)ActiveDocument.Tables.Count ‘当前文档中的表格数
(349)ActiveDocument.TablesOfAuthorities.Count ‘返回当前文档中的引文目录数
(350)ActiveDocument.TablesOfAuthoritiesCategories.Count ‘返回当前文档中引文目录类别数(351)ActiveDocument.TablesOfContents.Count ‘返回当前文档中的目录数
(352)ActiveDocument.TablesOfFigures.Count '返回当前文档中的图表目录数
Paragraphs/Paragraph对象
-------
(353)Selection.Paragraphs.Count '返回所选区域的段落数
(354)Selection.Paragraphs.First '返回所选区域中的第一段
(355)ActiveDocument.Paragraphs(1).LeftIndent '返回当前文档中第一段的左缩进值(356)ActiveDocument.Paragraphs(1).LineSpacing '返回当前文档中第一段的行距
(357)ActiveDocument.Paragraphs(1).OutlineLevel‘返回或设置当前文档中第一段的大纲级别
(358)ActiveDocument.Paragraphs(1).RightIndent ‘返回当前文档中第一段的右缩进量(359)ActiveDocument.Paragraphs(1).SpaceBefore '返回当前文档中第一段的段前间距(360)ActiveDocument.Paragraphs(1).SpaceAfter ‘返回当前文档中第一段的段后间距(361)ActiveDocument.Paragraphs(1).Range.Text '返回当前文档中第一段的内容
(362)ActiveDocument.Paragraphs(1).Range.Style.NameLocal '返回当前文档中第一段应用的样式名
(363)ActiveDocument.Paragraphs(1).Range.Style.Description '返回当前文档中第一段所应用样
式的详细描述
(364)ActiveDocument.Paragraphs(1).Range.Style.Font.Name '返回当前文档中第一段所应用样式的字体名
(365)ActiveDocument.Paragraphs(1).Range.Style.Font.NameFarEast'返回或设置一种东亚字体名
(366)ActiveDocument.Paragraphs(1).Range.Style.Font.Size '返回或设置当前文档中第一段所应用样式的字体大小
(367)ActiveDocument.Paragraphs(1).Range.Style.Font.Spacing '返回或设置字符间距(368)Selection.Words.Count '所选区域的字数
Sentences对象
----
(369)Selection.Sentences.Item(1)'所选区域中的第一句的内容
----
Words对象
----
(371)ActiveDocument.Words(1).Select '选择当前文档中的第一个词
(372)ActiveDocument.Range.Words(1).InsertAfter “我爱你!” '在当前文档中的第一个词后插入“我爱你”
----
Characters对象
----
(373)Selection.Characters.Count '当前文档中所选区域的字符数
(374)ActiveDocument.Paragraphs(1).Range.InsertParagraphAfter'在当前文档的第一段之后插入一个新段落
------
Sections/Section对象
------
(375)ActiveDocument.Sections.First '当前文档的第一节
(376)ActiveDocument.Sections.First.PageSetup.BottomMargin '当前文档第一节所在页的底边距
(377)ActiveDocument.Sections.First.PageSetup.LeftMargin '当前文档第一节所在页的左边距(378)ActiveDocument.Sections.First.PageSetup.RightMargin '当前文档第一节所在页的右边距(379)ActiveDocument.Sections.First.PageSetup.TopMargin '当前文档第一节所在页的顶边距
(380)ActiveDocument.Sections.First.PageSetup.PaperSize '返回或设置当前文档第一节所在页的大小
(381)ActiveDocument.Sections.First.PageSetup.PageHeight '返回或设置当前文档第一节所在页的高度
(382)ActiveDocument.Sections.First.PageSetup.PageWidth '返回或设置当前文档第一节所在页的宽度
(383)ActiveDocument.Sections.Add Range:=myRange '在当前文档中添加新节
(384)ActiveDocument.Sections.Item(2)'当前文档中的第二节
(385)ActiveDocument.Sections.Last.Range.InsertAfter “文档结束!” '在当前文档中最后一节的结尾添加文字“文档结束!”
----
Range对象
----
(386)ActiveDocument.Range(Start:=0, End:=10)'表示当前文档前10个字符所组成的一个Range对象
(387)Set myRange = ActiveDocument.Range(_
Start:=ActiveDocument.Paragraphs(2).Range.Start, _
End:=ActiveDocument.Paragraphs(4).Range.End)'将当前文档第2段至第4段设置为一个Range对象
(388)ActiveDocument.Paragraphs(1).Range.Copy '复制当前文档中的第一段
(389)Selection.Copy
Documents.Add.Content.Paste '复制所选内容到新文档中
(390)ActiveDocument.Bookmarks(“Book1”).Copy Name:=“Book2” '将Book2书签复制Book1书签标记的位置
(391)Selection.GoTo What:=wdGoToLine, Which:=wdGoToAbsolute, Count:=4 '将所选内容移至文档中的第4行
(392)Selection.GoTo What:=wdGoToTable, Which:=wdGoToNext '将所选内容移至下一个表格的第1个单元格
(393)Selection.Range.AutoFormat '为所选内容套用格式
(394)ActiveDocument.Content.Font.Name = “Arial” '将当前文档的字体设置为斜体(395)ActiveDocument.Content.Select
Selection.Delete '将当前文档中的内容删除
--
其它
--
(396)Documents.Add '添加一个新文档
(397)Set myTable = ActiveDocument.Tables.Add(Selection.Range, 2, 2)'在当前文档所选区域添加一个2行2列的表格
(398)Open “C:my.txt” For Input As #1 '打开一个用于输入的文件并令其编号为1
(399)Line Input #1, TextLine'读取被打开用于输入且编号为1的文件
(400)Close #1 '关闭编号为1的文件
第二篇:Excel之VBA编程常用语句300句之二
ThisWorkbook.ActiveSheet.Rows(1).RowHeight = 10 ‘改变工作表的行1的高度值设置为10(121)ThisWorkbook.Worksheets(1).Activate ‘当前工作簿中的第一个工作表被激活
(122)ThisWorkbook.Worksheets(“Sheet1”).Rows(1).Font.Bold = True ‘设置工作表Sheet1中的行1数据为粗体
(123)ThisWorkbook.Worksheets(“Sheet1”).Rows(1).Hidden = True ‘将工作表Sheet1中的行1隐藏
ActiveCell.EntireRow.Hidden = True ‘将当前工作表中活动单元格所在的行隐藏
注:同样可用于列。
(124)ActiveSheet.Range(“A:A”).EntireColumn.AutoFit ‘自动调整当前工作表A列列宽
(125)ActiveSheet.Cells.SpecialCells(xlCellTypeConstants,xlTextValues)‘选中当前工作表中常量和文本单元格
ActiveSheet.Cells.SpecialCells(xlCellTypeConstants,xlErrors+xlTextValues)‘选中当前工作表中常量和文本及错误值单元格
*******************************************************
公式与函数
(126)Application.MacroOptions Macro:=”SumPro”,Category:=4 ‘将自定义的SumPro函数指定给Excel中的“统计函数”类别
(127)Application.MacroOptions Macro:=”SumPro”, _
Description:=”First Sum,then Product” ‘为自定义函数SumPro进行了功能说明
(128)Application.WorksheetFunction.CountA(Range(“A:A”))+1 ‘获取A列的下一个空单元格(129)WorksheetFunction.CountA(Cell.EntireColumn)‘返回该单元格所在列非空单元格的数量 WorksheetFunction.CountA(Cell.EntireRow)‘返回该单元格所在行非空单元格的数量(130)WorksheetFunction.CountA(Cells)‘返回工作表中非空单元格数量
(131)ActiveSheet.Range(“A20:D20”).Formula=“=Sum(R*-19]C:R[-1+C”’对A列至D列前19个数值求和
*******************************************************
图表
(132)ActiveWindow.Visible=False
或 ActiveChart.Deselect ‘使图表处于非活动状态
(133)TypeName(Selection)=”Chart” ‘若选中的为图表,则该语句为真,否则为假
(134)ActiveSheet.ChartObjects.Delete ‘删除工作表上所有的ChartObject对象
ActiveWorkbook.Charts.Delete ‘删除当前工作簿中所有的图表工作表
*******************************************************
窗体和控件
(135)UserForms.Add(MyForm).Show ‘添加用户窗体MyForm并显示
(136)TextName.SetFocus ‘设置文本框获取输入焦点
(137)SpinButton1.Value=0 ‘将数值调节钮控件的值改为0
(138)TextBox1.Text=SpinButton1.Value ‘将数值调节钮控件的值赋值给文本框控件
SpinButton1.value=“/Val(TextBox1.Text)” ‘将文本框控件值赋给数值调节钮控件
CStr(SpinButton1.Value)=TextBox1.Text ‘数值调节钮控件和文本框控件相比较
(139)UserForm1.Controls.Count ‘显示窗体UserForm1上的控件数目
(140)ListBox1.AddItem “Command1” ‘在列表框中添加Command1
(141)ListBox1.ListIndex ‘返回列表框中条目的值,若为-1,则表明未选中任何列表框中的条目(142)RefEdit1.Text ‘返回代表单元格区域地址的文本字符串
RefEdit1.Text=ActiveWindow.RangeSelection.Address ‘初始化RefEdit控件显示当前所选单元格区域
Set FirstCell=Range(RefEdit1.Text).Range(“A1”)‘设置某单元格区域左上角单元格
(143)Application.OnTime Now + TimeValue(“00:00:15”), “myProcedure” ‘等待15秒后运行myProcedure过程
(144)ActiveWindow.ScrollColumn=ScrollBarColumns.Value ‘将滚动条控件的值赋值给ActiveWindow对象的ScrollColumn属性
ActiveWindow.ScrollRow=ScrollBarRows.Value ‘将滚动条控件的值赋值给ActiveWindow对象的ScrollRow属性
(145)UserForm1.ListBox1.AddItem Sheets(“Sheet1”).Cells(1,1)‘将单元格A1中的数据添加到列表框中
ListBox1.List=Product ‘将一个名为Product数组的值添加到ListBox1中
ListBox1.RowSource=”Sheet2!SumP” ‘使用工作表Sheet2中的SumP区域的值填充列表框(146)ListBox1.Selected(0)‘选中列表框中的第一个条目(注:当列表框允许一次选中多个条目时,必须使用Selected属性)
(147)ListBox1.RemoveItem ListBox1.ListIndex ‘移除列表框中选中的条目
*******************************************************
对象
Application对象
(148)Application.UserName ‘返回应用程序的用户名
(149)Application.Caller ‘返回代表调用函数的单元格
(150)Application.Caller.Parent.Parent ‘返回调用函数的工作簿名称
(151)Application.StatusBar=”请等待……” ‘将文本写到状态栏
Application.StatusBar=”请等待……” & Percent & “% Completed” ‘更新状态栏文本,以变量Percent代表完成的百分比
Application.StatusBar=False ‘将状态栏重新设置成正常状态
(152)Application.Goto Reference:=Range(“A1:D4”)‘指定单元格区域A1至D4,等同于选择“编辑——定位”,指定单元格区域为A1至D4,不会出现“定位”对话框
(153)Application.Dialogs(xlDialogFormulaGoto).Show ‘显示“定位”对话框,但定位条件按钮无效
(154)Application.Dialogs(xlDialogSelectSpecial).Show ‘显示“定位条件”对话框
(155)Application.Dialogs(xlDialogFormatNumber).show ‘显示“单元格格式”中的“数字”选项卡 Application.Dialogs(xlDialogAlignment).show ‘显示“单元格格式”中的“对齐”选项卡
Application.Dialogs(xlDialogFontProperties).show ‘显示“单元格格式”中的“字体”选项卡 Application.Dialogs(xlDialogBorder).show ‘显示“单元格格式”中的“边框”选项卡
Application.Dialogs(xlDialogPatterns).show ‘显示“单元格格式”中的“图案”选项卡
Application.Dialogs(xlDialogCellProtection).show ‘显示“单元格格式”中的“保护”选项卡 注:无法一次显示带选项卡的“单元格格式”对话框,只能一次显示一个选项卡。
(156)Application.Dialogs(xlDialogFormulaGoto).show Range(“b2”), True ‘显示“引用位置”的默认单元格区域并显示引用使其出现在窗口左上角(注:内置对话框参数的使用)
(157)Application.CommandBars(1).Controls(2).Controls(16).Execute ‘执行“定位”话框,相当于选择菜单“编辑——定位”命令
(158)Application.Transpose(Array(“Sun”,”Mon”,”Tur”,”Wed”,”Thu”,”Fri”,”Sat”))‘返回一个垂直的数组
(159)Application.Version ‘返回使用的Excel版本号
(160)Application.Cursor = xlNorthwestArrow ‘设置光标形状为北西向箭头
Application.Cursor = xlIBeam ‘设置光标形状为Ⅰ字形
Application.Cursor = xlWait ‘设置光标形状为沙漏(等待)形
Application.Cursor = xlDefault ‘恢复光标的默认设置
(161)Application.WindowState ‘返回窗口当前的状态
Application.WindowState = xlMinimized ‘窗口最小化
Application.WindowState = xlMaximized ‘窗口最大化
Application.WindowState = xlNormal ‘窗口正常状态
(162)Application.UsableHeight ‘获取当前窗口的高度
Application.UsableWidth ‘获取当前窗口的宽度
(163)Application.ActiveCell.Address ‘返回活动单元格的地址(注:返回的是绝对地址)(164)Application.ActivePrinter ‘返回当前打印机的名称
(165)Application.ActiveSheet.Name ‘返回活动工作表的名称
(166)Application.ActiveWindow.Caption ‘返回活动窗口的标题
(167)Application.ActiveWorkbook.Name ‘返回活动工作簿的名称
(168)Application.Selection.Address ‘返回所选区域的地址
(169)Application.ThisWorkbook.Name ‘返回当前工作簿的名称
(170)Application.CalculationVersion ‘返回Excel计算引擎版本(右边四位数字)及Excel版本(左边两位数字)
(171)Application.MemoryFree ‘以字节为单位返回Excel允许使用的内存数(不包括已经使用的内存)
(172)Application.MemoryUsed ‘以字节为单位返回Excel当前使用的内存数
(173)Application.MemoryTotal ‘以字节为单位返回Excel可以使用的内存数(包括已使用的内存,是MemoryFree和MemoryUsed的总和)
(174)Application.OperatingSystem ‘返回所使用的操作系统的名称和版本
(175)Application.OrganizationName ‘返回Excel产品登记使用的组织机构的名称
(176)Application.FindFormat ‘查找的格式种类
Application.ReplaceFormat ‘替换查找到的内容的格式种类
ActiveSheet.Cells.Replace What:=” “, _
Replacement:=” “,SearchFormat:=True,ReplaceFormat:=True ‘替换查找到的格式
(177)Application.Interactive=False ‘忽略键盘或鼠标的输入
(178)Application.Evaluate(“Rate”)‘若在工作表中定义了常量0.06的名称为”Rate”,则本语句将返回值0.06
(179)Application.OnUndo “Undo Option”,“Undo Procedure” ‘选择UndoOption后,将执行Undo Procedure过程
*******************************************************
Range对象
(180)Range(A1:A10).value=“/Application.WorksheetFunction.Transpose(MyArray)” ‘将一个含有10个元素的数组转置成垂直方向的工作表单元格区域(A1至A10)
注:因为当把一维数组的内容传递给某个单元格区域时,该单元格区域中的单元格必须是水平方向的,即含有多列的一行。若必须使用垂直方向的单元格区域,则必须先将数组进行转置,成为垂直的。
(181)Range(“A65536”).End(xlUp).Row+1 ‘返回A列最后一行的下一行
(182)rng.Range(“A1”)‘返回区域左上角的单元格
(183)cell.Parent.Parent.Worksheets ‘访问当前单元格所在的工作簿
(184)Selection.Font.Bold=Not Selection.Font.Bold ‘切换所选单元格是否加粗
(185)ActiveSheet.Range(“A:B”).Sort Key1:=Columns(“B”), Key2:=Columns(“A”), _
Header:=xlYes ‘两个关键字排序,相邻两列,B列为主关键字,A列为次关键字,升序排列(186)cell.Range(“A1”).NumberFormat ‘显示单元格或单元格区域中的第一个单元格的数字格式
(187)cell.Range(“A1”).HasFormula ‘检查单元格或单元格区域中的第一个单元格是否含有公式 或cell.HasFormula ‘工作表中单元格是否含有公式
(188)Cell.EntireColumn ‘单元格所在的整列
Cell.EntireRow ‘单元格所在的整行
(189)rng.Name.Name ‘显示rng区域的名称
(190)rng.Address ‘返回rng区域的地址
(191)cell.Range(“A1”).Formula ‘返回包含在rng区域中左上角单元格中的公式。
注:若在一个由多个单元格组成的范围内使用Formula属性,会得到错误;若单元格中没有公式,会得到一个字符串,在公式栏中显示该单元格的值。
(192)Range(“D5:D10”).Cells(1,1)‘返回单元格区域D5:D10中左上角单元格
(193)ActiveCell.Row ‘活动单元格所在的行数
ActiveCell.Column ‘活动单元格所在的列数
(194)Range(“A1:B1”).HorizontalAlignment = xlLeft ‘当前工作表中的单元格区域数据设置为左对齐
(195)ActiveSheet.Range(“A2:A10”).NumberFormat=”#,##0” ‘设置单元格区域A2至A10中数值格式
(196)rng.Replace “ “,”0” ‘用0替换单元格区域中的空单元格
*******************************************************
Collection与object
(197)Dim colMySheets As New Collection
Public colMySheets As New Collection ‘声明新的集合变量
(198)Set MyRange=Range(“A1:A5”)‘创建一个名为MyRange的对象变量
(199)
第三篇:Excel VBA常用代码总结1
Excel VBA常用代码总结1
改变背景色
Range(“A1”).Interior.ColorIndex = xlNone ColorIndex一览
改变文字颜色 获取单元格 Range(“A1”).Font.ColorIndex = 1 Cells(1, 2)Range(“H7”) 获取范围
Range(Cells(2, 3), Cells(4, 5))Range(“a1:c3”)'用快捷记号引用单元格
Worksheets(“Sheet1”).[A1:B5] 选中某sheet SetNewSheet = Sheets(“sheet1”)NewSheet.Select 选中或激活某单元格
'“Range”对象的的Select方法可以选择一个或多个单元格,而Activate方法可以指定某一个单元格为活动单元格。
'下面的代码首先选择A1:E10区域,同时激活D4单元格: Range(“a1:e10”).Select Range(“d4:e5”).Activate '而对于下面的代码: Range(“a1:e10”).Select Range(“f11:g15”).Activate '由于区域A1:E10和F11:G15没有公共区域,将最终选择F11:G15,并激活F11单元格。
获得文档的路径和文件名
ActiveWorkbook.Path
'路徑 ActiveWorkbook.Name
'名稱
ActiveWorkbook.FullName '路徑+名稱 '或将ActiveWorkbook换成thisworkbook
隐藏文档 禁止屏幕更新
禁止显示提示和警告消息 文件夹做成 Application.Visible = False Application.ScreenUpdating = False Application.DisplayAlerts = False strPath = “C:temp” MkDirstrPath 状态栏文字表示 双击单元格内容变换 Application.StatusBar = “计算中”
PrivateSubWorksheet_BeforeDoubleClick(ByVal Target As Range, Cancel AsBoolean)If(Target.Cells.Row>= 5AndTarget.Cells.Row<= 8)Then IfTarget.Cells.Value = “●”Then Target.Cells.Value = “" Else
Target.Cells.Value = ”●“ EndIf
Cancel = True EndIf End Sub
文件夹选择框方法1
SetobjShell = CreateObject(”Shell.Application“)SetobjFolder = objShell.BrowseForFolder(0, ”文件“, 0, 0)IfNotobjFolderIsNothing
Then path= objFolder.self.Path&”“ endif SetobjFolder = Nothing SetobjShell = Nothing
文件夹选择框方法2(推荐)
PublicFunctionChooseFolder()AsString DimdlgOpenAsFileDialog SetdlgOpen = Application.FileDialog(msoFileDialogFolderPicker)WithdlgOpen.InitialFileName = ThisWorkbook.path&”“ If.Show =-1Then
ChooseFolder =.SelectedItems(1)EndIf EndWith
SetdlgOpen = Nothing End Function
'使用方法例:
Dim path AsString path = ChooseFolder()If path <>”“Then MsgBox”open folder“ EndIf
文件选择框方法
PublicFunctionChooseOneFile(OptionalTitleStrAsString = ”Please choose a file“, OptionalTypesDecAsString = ”*.*“, OptionalExtenAsString = ”*.*“)AsString
DimdlgOpenAsFileDialog SetdlgOpen = Application.FileDialog(msoFileDialogFilePicker)WithdlgOpen.Title = TitleStr.Filters.Clear.Filters.AddTypesDec, Exten.AllowMultiSelect = False
.InitialFileName = ThisWorkbook.Path If.Show =-1Then
'.AllowMultiSelect = True ' For Each vrtSelectedItemIn.SelectedItems ' MsgBox ”Path name: “ &vrtSelectedItem ' Next vrtSelectedItem
ChooseOneFile =.SelectedItems(1)EndIf EndWith
SetdlgOpen = Nothing End Function
某列到关键字为止循环方法1(假设关键字是end)SetCurrentCell = Range(”A1“)DoWhileCurrentCell.Value<>”end“ „„
SetCurrentCell = CurrentCell.Offset(1, 0)Loop
某列到关键字为止循环方法2(假设关键字是空字符串)i = StartRow DoWhileCells(i, 1)<>”“ „„
i = i + 1 Loop
”For Each...Next 循环(知道确切边界)ForEach c InWorksheets(“Sheet1”).Range(“A1:D10”).Cells
IfAbs(c.Value)<0.01Thenc.Value = 0 Next
“For Each...Next 循环(不知道确切边界),在活动单元格周围的区域内循环
ForEach c InActiveCell.CurrentRegion.Cells IfAbs(c.Value)<0.01Thenc.Value = 0 Next
某列有数据的最末行的行数的取得(中间不能有空行)lonRow=1
DoWhileTrim(Cells(lonRow, 2).Value)<>”“ lonRow = lonRow + 1 Loop
lonRow11 = lonRow1164)比如i=A的时候,Asc(it >= num * 1000 DoEvents Loop End Sub
'***************************************************************
使用方法: delay 3'3表示秒数
杀掉某程序执行的所有进程
SubKillWord()
Dim Process
ForEach Process InGetObject(”winmgmts:“).ExecQuery(”select * from Win32_Process where name='WINWORD.EXE'“)Process.Terminate(0)Next
End Sub
监视某单元格的变化
这里最需要注意的问题就是,如果在这个事件里对单元格进行改变,会继续出发此事件变成死循环。
所以要在对单元格进行变化之前加上Application.EnableEvents = False,变完之后再改为True。
PrivateSubWorksheet_Change(ByVal Target As Range)OnErrorGoTo Err Application.EnableEvents = False Dim c SetdicKtoW = SetDic(ThisWorkbook.Sheets(”reference“), 3, 1, 2)SetdicKtoX = SetDic(ThisWorkbook.Sheets(”reference“), 3, 1, 3)ForEach c In Target Ifc.Column = 11Then 'MsgBoxc.Value
Me.Range(”W“&c.Row).Value = GetDic(dicKtoW, c.Value)Me.Range(”X“&c.Row).Value = GetDic(dicKtoX, c.Value)EndIf Next SetdicKtoW = Nothing SetdicKtoX = Nothing
Application.EnableEvents = True Exit Sub Err: MsgBox(”Error!Please contact macro developer.“)Application.EnableEvents = True End Sub
On Error的用法
1.一般用法
OnErrorGoTo Label 各种代码 exit sub Label: msgboxErr.Description 其他错误处理
2.对于某段代码单独处理 OnErrorResumeNext 需要监视的代码
IfErr.Number<>0Then MsgBoxErr.Description EndIf
OnErrorGoTo0
3.上述两种的结合 OnErrorResumeNext 需要监视的代码
IfErr.Number<>0Then MsgBoxErr.Description Goto Label EndIf
OnErrorGoTo0 exit sub Label: 其他错误处理
EXCEL的分组功能和展开收缩功能
'将A列到C列进行分组
Range(”A:C“).Columns.Group
'默认情况下,分组后的A到C列会是展开状态,如果想让A到C列收缩 Range(”A:C").EntireColumn.Hidden=True
第四篇:实用的EXCEL VBA编程总结
实用的EXCEL VBA编程小结:
最近单位内部的项目里要用到些报表EXCEL的生成,虽说JAVA 的POI可以有这能力,但觉得还是可能比较麻烦,因此还是转用.net来搞,用Visual Studio2003配合office 2003,用到了一些VBA,因此小结并归纳之,选了些资料归纳在这里,以备今后查考
首先创建 Excel 对象,使用ComObj:
Dim ExcelID as Excel.Application
Set ExcelID as new Excel.Application
1)显示当前窗口:
ExcelID.Visible := True;
2)更改 Excel 标题栏:
ExcelID.Caption := '应用程序调用 Microsoft Excel';
3)添加新工作簿:
ExcelID.WorkBooks.Add;
4)打开已存在的工作簿:
ExcelID.WorkBooks.Open('C:¥Excel¥Demo.xls');
5)设置第2个工作表为活动工作表:
ExcelID.WorkSheets[2].Activate;
或 ExcelID.WorkSheets[ 'Sheet2' ].Activate;
6)给单元格赋值:
ExcelID.Cells[1,4].Value := '第一行第四列';
7)设置指定列的宽度(单位:字符个数),以第一列为例:
ExcelID.ActiveSheet.Columns[1].ColumnsWidth := 5;
8)设置指定行的高度(单位:磅)(1磅=0.035厘米),以第二行为例:
ExcelID.ActiveSheet.Rows[2].RowHeight := 1/0.035;// 1厘米
9)在第8行之前插入分页符:
ExcelID.WorkSheets[1].Rows[8].PageBreak := 1;
10)在第8列之前删除分页符:
ExcelID.ActiveSheet.Columns[4].PageBreak := 0;
11)指定边框线宽度:
ExcelID.ActiveSheet.Range[ 'B3:D4' ].Borders[2].Weight := 3;
1-左 2-右 3-顶 4-底 5-斜(¥)6-斜(/)
12)清除第一行第四列单元格公式:
ExcelID.ActiveSheet.Cells[1,4].ClearContents;
13)设置第一行字体属性:
ExcelID.ActiveSheet.Rows[1].Font.Name := '隶书';
ExcelID.ActiveSheet.Rows[1].Font.Color := clBlue;
ExcelID.ActiveSheet.Rows[1].Font.Bold := True;
ExcelID.ActiveSheet.Rows[1].Font.UnderLine := True;
14)进行页面设置:
a.页眉:
ExcelID.ActiveSheet.PageSetup.CenterHeader := '报表演示';b.页脚:
ExcelID.ActiveSheet.PageSetup.CenterFooter := '第&P页';
c.页眉到顶端边距2cm:
ExcelID.ActiveSheet.PageSetup.HeaderMargin := 2/0.035;
d.页脚到底端边距3cm:
ExcelID.ActiveSheet.PageSetup.HeaderMargin := 3/0.035;
e.顶边距2cm:
ExcelID.ActiveSheet.PageSetup.TopMargin := 2/0.035;
f.底边距2cm:
ExcelID.ActiveSheet.PageSetup.BottomMargin := 2/0.035;
g.左边距2cm:
ExcelID.ActiveSheet.PageSetup.LeftMargin := 2/0.035;
h.右边距2cm:
ExcelID.ActiveSheet.PageSetup.RightMargin := 2/0.035;
i.页面水平居中:
ExcelID.ActiveSheet.PageSetup.CenterHorizontally := 2/0.035;
j.页面垂直居中:
ExcelID.ActiveSheet.PageSetup.CenterVertically := 2/0.035;
k.打印单元格网线:
ExcelID.ActiveSheet.PageSetup.PrintGridLines := True;
15)拷贝操作:
a.拷贝整个工作表:
ExcelID.ActiveSheet.Used.Range.Copy;
b.拷贝指定区域:
ExcelID.ActiveSheet.Range[ 'A1:E2' ].Copy;
c.从A1位置开始粘贴:
ExcelID.ActiveSheet.Range.[ 'A1' ].PasteSpecial;
d.从文件尾部开始粘贴:
ExcelID.ActiveSheet.Range.PasteSpecial;
16)插入一行或一列:
a.ExcelID.ActiveSheet.Rows[2].Insert;
b.ExcelID.ActiveSheet.Columns[1].Insert;
17)删除一行或一列:
a.ExcelID.ActiveSheet.Rows[2].Delete;
b.ExcelID.ActiveSheet.Columns[1].Delete;
18)打印预览工作表:
ExcelID.ActiveSheet.PrintPreview;
19)打印输出工作表:
ExcelID.ActiveSheet.PrintOut;
20)工作表保存:
If not ExcelID.ActiveWorkBook.Saved then
ExcelID.ActiveSheet.PrintPreview End if
21)工作表另存为:
ExcelID.SaveAs('C:¥Excel¥Demo1.xls');
22)放弃存盘:
ExcelID.ActiveWorkBook.Saved := True;
23)关闭工作簿:
ExcelID.WorkBooks.Close;
24)退出 Excel:
ExcelID.Quit;
25)设置工作表密码:
ExcelID.ActiveSheet.Protect “123”, DrawingObjects:=True, Contents:=True, Scenarios:=True
26)EXCEL的显示方式为最大化
ExcelID.Application.WindowState = xlMaximized
27)工作薄显示方式为最大化
ExcelID.ActiveWindow.WindowState = xlMaximized
28)设置打开默认工作薄数量
ExcelID.SheetsInNewWorkbook = 3
29)'关闭时是否提示保存(true 保存;false 不保存)
ExcelID.DisplayAlerts = False
30)设置拆分窗口,及固定行位置
ExcelID.ActiveWindow.SplitRow = 1
ExcelID.ActiveWindow.FreezePanes = True
31)设置打印时固定打印内容
ExcelID.ActiveSheet.PageSetup.PrintTitleRows = “$1:$1”
32)设置打印标题
ExcelID.ActiveSheet.PageSetup.PrintTitleColumns = “"
33)设置显示方式(分页方式显示)
ExcelID.ActiveWindow.View = xlPageBreakPreview
34)设置显示比例
ExcelID.ActiveWindow.Zoom = 100
35)让Excel 响应 DDE 请求
Ex.Application.IgnoreRemoteRequests = False
用VB操作EXCEL
Private Sub Command3_Click()
On Error GoTo err1
Dim i As Long
Dim j As Long
Dim objExl As Excel.Application '声明对象变量
Me.MousePointer = 11 '改变鼠标样式
Set objExl = New Excel.Application '初始化对象变量
objExl.SheetsInNewWorkbook = 1 '将新建的工作薄数量设为1
objExl.Workbooks.Add '增加一个工作薄
objExl.Sheets(objExl.Sheets.Count).Name = ”book1“ '修改工作薄名称
objExl.Sheets.Add , objExl.Sheets(”book1“)‘增加第二个工作薄在第一个之后
objExl.Sheets(objExl.Sheets.Count).Name = ”book2“
objExl.Sheets.Add , objExl.Sheets(”book2“)‘增加第三个工作薄在第二个之后
objExl.Sheets(objExl.Sheets.Count).Name = ”book3“
objExl.Sheets(”book1“).Select '选中工作薄
For i = 1 To 50 '循环写入数据
For j = 1 To 5
If i = 1 Then
objExl.Selection.NumberFormatLocal = ”@“ '设置格式为文本
objExl.Cells(i, j)= ” E “ & i & j Else
objExl.Cells(i, j)= i & j End If Next Next
objExl.Rows(”1:1“).Select '选中第一行
objExl.Selection.Font.Bold = True '设为粗体
objExl.Selection.Font.Size = 24 '设置字体大小
objExl.Cells.EntireColumn.AutoFit '自动调整列宽
objExl.ActiveWindow.SplitRow = 1 '拆分第一行
objExl.ActiveWindow.SplitColumn = 0 '拆分列
objExl.ActiveWindow.FreezePanes = True '固定拆分 objExl.ActiveSheet.PageSetup.PrintTitleRows = ”$1:$1“ '设置打印固定行
objExl.ActiveSheet.PageSetup.PrintTitleColumns
=
”“
'objExl.ActiveSheet.PageSetup.RightFooter = ”打印时间: “ & _
Format(Now, ”yyyy年mm月dd日 hh:MM:ss“)
objExl.ActiveWindow.View = xlPageBreakPreview '设置显示方式
objExl.ActiveWindow.Zoom = 100 '设置显示大小
'给工作表加密码
objExl.ActiveSheet.Protect ”123", DrawingObjects:=True, _
Contents:=True, Scenarios:=True
objExl.Application.IgnoreRemoteRequests = False
objExl.Visible = True '使EXCEL可见
objExl.Application.WindowState = xlMaximized 'EXCEL的显示方式为最大化
objExl.ActiveWindow.WindowState = xlMaximized '工作薄显示方式为最大化
objExl.SheetsInNewWorkbook = 3 '将默认新工作薄数量改回3个
Set objExl = Nothing '清除对象
Me.MousePointer = 0 '修改鼠标
打
印
标
题 Exit Sub err1:
objExl.SheetsInNewWorkbook = 3
objExl.DisplayAlerts = False '关闭时不提示保存
objExl.Quit '关闭EXCEL
objExl.DisplayAlerts = True '关闭时提示保存
Set objExl = Nothing
Me.MousePointer = 0 End Sub
第五篇:vba自定义函数小结
小结:
函数参数前面标记byval,实现的是实参与形参之间的值传递,即形参具有了实参的值或者说建立了一个实参的副本给了形参,这样对形参的操作不会影响实参;
函数参数前面标记byref,实现的是实参与形参之间的引用传递,这样对形参的操作会影响实参,或者说对形参的操作等同于对实参的操作;
在函数内部使用“r=形参”,实现的是把形参的副本给r,在函数中对r操作不会影像形参,如果使用“set r=形参”,那么对r的操作会影响形参,这里实现的效果是r只是形参的一个别名而已,所以对r的操作等同于对形参的操作。
在函数中形参前面不标记byref和byval,默认是引用传递byref,但是这种情况下如果实参是excel中worksheet的range区域,则默认是值传递。
有时调试结果不符合预期,比如值传递,对””r=形参”中的r操作,居然影响形参了,这可能是由于excel一时程序错乱导致,关闭重启就好了。
Public Function tjbcf(rng)
r = rng
'Set r = rng'注意带着set是错误的 k = 0 If UBound(r, 1)> 1 And UBound(r, 2)= 1 Then For i = 1 To UBound(r, 1)f = 0 For j = 1 To i1 If r(1, i)= r(1, j)Then f = 1 Exit For End If Next j If f = 0 And r(1, i)<> “" Then k = k + 1 End If Next i End If
If UBound(r, 1)> 1 And UBound(r, 2)> 1 Then For i = 1 To UBound(r, 1)For j = 1 To UBound(r, 2)If r(i, j)= ”“ Then f = 1 GoTo kk End If f = 0 For m = 1 To i1 If r(i, j)= r(i, n)Then f = 1 GoTo kk End If Next n kk: If f = 0 Then k = k + 1 End If Next j Next i End If
tjbcf = k
End Function
Public Function getnum(str, m)ss = ”“ For i = m To Len(str)If InStr(”0123456789.“, Mid(str, i, 1))<> 0 Then ss = ss & Mid(str, i, 1)Else GoTo kk End If Next i kk: getnum = Val(ss)'注意是val不是value,在sheet中是value函数,在vb中则是val函数 End Function Public Function getnum2(str, m)ss = ”“ f = 0 For i = m To Len(str)If InStr(”0123456789.“, Mid(str, i, 1))<> 0 Then ss = ss & Mid(str, i, 1)Else If f = 1 And ss <> ”“ Then GoTo kk End If f = 1 End If Next i kk: getnum2 = Val(ss)End Function
Public Function NewMmult(a, b)
a1 = a
'把range a的值赋给a1,a是几行几列的range,a1就是 几行几列的数组。注意a1是一个variant数组,即a1中的不同元素可以属性不同,a1中某个元素是字符,另一个可以是整数。
b1 = b
'把range b的值赋给b1 For i = 1 To UBound(a1, 1)
' UBound(a1, 1)指的是数组a1第1维度的大小,即a1的行数 For j = 1 To UBound(a1, 2)
' UBound(a1, 2)指的是数组a1第2维度的大小,即a1的列数 If a1(i, j)= ”“ Then
'判断a1(i,j)是不是空白,如果是,那就赋0值。a1(i, j)= 0 End If Next j Next i
For i = 1 To UBound(b1, 1)For j = 1 To UBound(b1, 2)If b1(i, j)= ”“ Then b1(i, j)= 0 End If Next j Next i
NewMmult = Application.MMult(a1, b1)
End Function
Public Function sim(str1, str2)
If Len(str2)= 0 Then
sim = 0
GoTo kk
End If
sim = 0
For i = 1 To Len(str2)
If InStr(str1, Mid(str2, i, 1))<> 0 Then
sim = sim + 1
End If
Next i
sim = sim / Len(str2)kk: End Function Public Function sima(ByVal str1, ByVal str2)
If Len(str2)= 0 Then
sima = 0
GoTo kk
End If
sima = 0
l = Len(str2)
For i = 1 To Len(str2)
If InStr(str1, Mid(str2, i, 1))<> 0 Then
sima = sima + 1
str1 = Application.WorksheetFunction.Substitute(str1, Mid(str2, i, 1), ”“, 1)
End If
Next i
sima = sima / l kk: End Function
Public Function mcc(rng, rng1, str1, Optional rng2 = ”“, Optional str2, Optional rng3 = ”“, Optional str3, Optional rng4 = ”“, Optional str4, Optional rng5 = ”“, Optional str5)r = rng r1 = rng1 r2 = rng2 r3 = rng3 r4 = rng4 r5 = rng5 mcc = ”“
If Application.CountA(rng2)= 1 Then For i = 1 To UBound(r, 1)
' UBound(a1, 1)指的是数组a1第1维度的大小,即a1的行数 If Application.WorksheetFunction.And(r1(i, 1)= str1)Then mcc = r(i, 1)GoTo kk End If Next i End If
If Application.CountA(rng3)= 1 Then For i = 1 To UBound(r, 1)
' UBound(a1, 1)指的是数组a1第1维度的大小,即a1的行数 If Application.WorksheetFunction.And(r1(i, 1)= str1, r2(i, 1)= str2)Then mcc = r(i, 1)GoTo kk End If Next i End If
If Application.CountA(rng4)= 1 Then For i = 1 To UBound(r, 1)
' UBound(a1, 1)指的是数组a1第1维度的大小,即a1的行数 If Application.WorksheetFunction.And(r1(i, 1)= str1, r2(i, 1)= str2, r3(i, 1)= str3)Then mcc = r(i, 1)GoTo kk End If Next i End If
If Application.CountA(rng5)= 1 Then For i = 1 To UBound(r, 1)
' UBound(a1, 1)指的是数组a1第1维度的大小,即a1的行数 If Application.WorksheetFunction.And(r1(i, 1)= str1, r2(i, 1)= str2, r3(i, 1)= str3, r4(i, 1)= str4)Then mcc = r(i, 1)GoTo kk End If Next i End If
For i = 1 To UBound(r, 1)
' UBound(a1, 1)指的是数组a1第1维度的大小,即a1的行数 If Application.WorksheetFunction.And(r1(i, 1)= str1, r2(i, 1)= str2, r3(i, 1)= str3, r4(i, 1)= str4, r5(i, 1)= str5)Then mcc = r(i, 1)GoTo kk End If Next i
kk: End Function
Public Function mccd(rng, rng1, str1, Optional rng2 = ”“, Optional str2, Optional rng3 = ”“, Optional str3, Optional rng4 = ”“, Optional str4, Optional rng5 = ”“, Optional str5)
r = rng r1 = rng1 r2 = rng2 r3 = rng3 r4 = rng4 r5 = rng5 mccd = ”"
If Application.CountA(rng2)= 1 Then
For i = 1 To UBound(r, 2)
' UBound(a1, 1)指的是数组a1第1维度的大小,即a1的行数 If Application.WorksheetFunction.And(r1(1, i)= str1)Then
mccd = r(1, i)GoTo kk End If Next i End If
If Application.CountA(rng3)= 1 Then For i = 1 To UBound(r, 2)
' UBound(a1, 1)指的是数组a1第1维度的大小,即a1的行数 If Application.WorksheetFunction.And(r1(1, i)= str1, r2(1, i)= str2)Then mccd = r(1, i)GoTo kk End If Next i End If
If Application.CountA(rng4)= 1 Then For i = 1 To UBound(r, 2)
' UBound(a1, 1)指的是数组a1第1维度的大小,即a1的行数 If Application.WorksheetFunction.And(r1(1, i)= str1, r2(1, i)= str2, r3(1, i)= str3)Then mccd = r(1, i)GoTo kk End If Next i End If
If Application.CountA(rng5)= 1 Then For i = 1 To UBound(r, 2)
' UBound(a1, 1)指的是数组a1第1维度的大小,即a1的行数 If Application.WorksheetFunction.And(r1(1, i)= str1, r2(1, i)= str2, r3(1, i)= str3, r4(1, i)= str4)Then mccd = r(1, i)GoTo kk End If Next i End If
For i = 1 To UBound(r, 2)
' UBound(a1, 1)指的是数组a1第1维度的大小,即a1的行数 If Application.WorksheetFunction.And(r1(1, i)= str1, r2(1, i)= str2, r3(1, i)= str3, r4(1, i)= str4, r5(1, i)= str5)Then mccd = r(1, i)GoTo kk End If Next i
kk: End Function
Public Function nsim(str, rng)'r1 = rng 'r2 = rng 'str1 = str 'str2 = str
v = sima(str, r(1, 1))+ sima(r(1, 1), str2)'str1 = str
‘这里不再需要赋值,因为sima设置的是值传递byval,sima调用实参str和r(1,1)不影响实参。'str2 = str k = 1 For i = 2 To UBound(r, 1)m =(sima(str, r(i, 1))+ sima(r(i, 1), str))'str1 = str 'str2 = str If v < m Then k = i v = m End If Next i nsim = r(k, 1)End Function