Excel_VBA常用对象
VBA中常用的Excel对象和其属性方法解析

VBA中常用的Excel对象和其属性方法解析在VBA中,Excel对象是我们在编写Excel宏时经常使用的重要元素之一。
通过使用Excel对象,我们可以操作Excel工作簿、工作表、单元格等,实现对Excel数据的读取、写入、操作等功能。
本文将详细解析VBA中常用的Excel对象以及它们的属性和方法。
首先,我们先介绍Excel对象的层级结构。
在VBA中,Excel对象的层级结构分为四个层次:Excel应用程序对象、工作簿对象、工作表对象和单元格对象,由上至下,依次代表了Excel的整体、工作簿、工作表和单元格。
1. Excel应用程序对象(Application对象):Excel应用程序对象是最顶层的对象,它代表了整个Excel应用程序的实例。
在VBA中,我们可以通过创建Application对象来访问Excel应用程序的各项功能和操作。
我们可以通过下面的代码来创建一个Excel应用程序对象:```vbaDim app As Excel.ApplicationSet app = New Excel.Application```2. 工作簿对象(Workbook对象):工作簿对象是Excel文件的最高级别对象,一个Excel应用程序可以包含多个工作簿对象。
在VBA中,我们可以通过创建Workbook对象来打开、创建、保存和关闭Excel工作簿。
下面是创建一个Workbook对象的例子:```vbaDim wb As Excel.WorkbookSet wb = app.Workbooks.Add '创建一个新的工作簿对象```在工作簿对象中,我们可以访问以下一些常用的属性和方法:- Name:表示工作簿的名称。
- Worksheets:表示该工作簿中所有工作表的集合。
可以通过索引或名称来访问特定的工作表。
- Save:保存对工作簿的修改。
- Close:关闭工作簿。
3. 工作表对象(Worksheet对象):工作表对象是Excel文件中的一个表格,每一个Excel工作簿可以包含多个工作表对象。
excelvba常用操作对象汇总(办公室职场必备)

EXCEL VBA 常用操作对象汇总(办公室职场必备)导语:在VBA 中主要通过对EXCEL 表格对象的值以及属性进行修改,来达到我们想要的数据处理效果,今天着重介绍一下在日常工作中常用的几个EXCEl 对象。
熟练掌握这几个对象后,应对一些复杂的、庞大的数据处理工作时绰绰有余了。
常用的对象有这么几个:Workbooks 对象,简单的说,我们打开一个.xls 文件,就是一个Workbooks 对象。
主要又这几个用法:Workbooks.Open, 打开文件。
相当于“文件-> 打开”命令。
用法:Workbooks.Open FileName:="D: 今日头条?80502Excel 演示.xls"Workbooks.Open "D: 今日头条?80502Excel 演示.xls"Workbooks.Add 。
新建一个空白的工作簿,相当于“文件-> 新建”命令。
Workbooks.Save。
保存文件。
常用在关闭文件之前,功能和Ctrl+S 相同。
Workbooks.Close 。
关闭文件。
用法:Workbooks(1).CIose SaveChanges:=False关闭工作簿,并且不保存,改为True 则是保存并关闭。
下面是打开文件,然后修改文件,并保存。
Sub 打开修改文件并保存()Path = "D:今日头条Excel VBA 培训A计划.xls"Workbooks.OpenFileName:=PathSheets(1).ActivateCells(1, 1) = " 今日头条"Cells(1, 1) = " 宋体"ActiveWorkbook.SaveActiveWorkbook.CloseEnd Sub 小结,与Workbook 类似的两个对象还有ThisWorkbook 和ActiveWorkbook ,这两个用法基本和Workbooks 类似。
excel vba 50.range对象的consolidate方法【合并计算】

excel vba 50.range对象的consolidate方法【合并计算】在Excel VBA中,Range对象是最常用的对象之一,它允许我们对单元格范围进行操作和处理。
其中,Consolidate方法是一个非常有用的功能,它能够将多个单元格范围的数据合并计算,为我们提供了更加灵活和高效的数据处理方式。
Consolidate方法的语法如下:Range.Consolidate(Sources, Function, TopRow, LeftColumn, CreateLinks)其中,Sources是一个Range对象数组,表示要合并计算的单元格范围;Function是一个枚举值,表示合并计算的方式,例如求和、平均值等;TopRow和LeftColumn是布尔值,表示合并计算结果是否包含源范围的行标题和列标题;CreateLinks是布尔值,表示是否创建链接到源范围的公式。
下面我们来看一个实际的例子,假设我们有三个单元格范围A1:A3、B1:B3和C1:C3,我们想要将这三个范围的数据合并计算,并将结果显示在D1:D3范围内。
首先,我们需要定义一个Range对象数组,表示要合并计算的单元格范围,代码如下:vbaDim rngSources As RangeSet rngSources = Range("A1:A3,B1:B3,C1:C3")接下来,我们可以使用Consolidate方法对这些范围进行合并计算,例如求和,代码如下:vbarngSources.Consolidate Sources:=rngSources,Function:=xlSum, TopRow:=False, LeftColumn:=False在上述代码中,我们将Sources参数设置为rngSources,表示要合并计算的范围为rngSources;将Function参数设置为xlSum,表示合并计算的方式为求和;将TopRow和LeftColumn参数设置为False,表示合并计算结果不包含行标题和列标题。
《VBA编程及应用基础》教学课件—05Excel 的VBA对象

RANGE对象的常用属性
Columns
表示指定单元格区域中的所有列 可用 Columns(index) 表示单元格区域中的某列 例如,下面代码将 B2:D4 区域第一列中每一单元格的值置为0:
ThisWorkbook.ActiveSheet.Range("B2:D4").Columns(1).Value = 0
RANGE对象的常用属性
End
表示包含源区域的区域尾端的单元格,语法为:End(Direction), 其中 Direction 有4个取值:xlDown、xlToRight、xlToLeft、xlUp
例如,下面代码将选定区域从单元格 B4 延伸至第四行最后一个 包含数据的单元格
Worksheets("Sheet1").Activate Range("B4", Range("B4").End(xlToRight)).Select
RANGE对象的常用属性
Offset
表示相对于指定区域偏移若干行和列以后的区域,使用方法: Offset(row, column),其中 row 和 column 分别为行偏移量和列偏 移量
例: ActiveCell.Offset(3, 3).Value = 5
实践1
在 公务员考试成绩表 工作簿中,假定学生均已获得相应 学位,试编写一个宏,用 For Each…Next 循环遍历“学历” 列各学生的学历,然后在“学位”列填写其对应的学位。 学历学位对应关系如下表所示:
参考”主题
EXCEL 对象模型
在对象模型列表中,以复数形式陈列的表示的是一个集 合。集合是指一组相似的对象,例如 Workbooks 是一个 集合,而 Worksheets 是另一个集合
excel vba中对象常用的方法

excel vba中对象常用的方法Excel VBA中对象常用的方法一、Range对象:Range对象是Excel VBA中最常用的对象之一,它表示Excel表格中的一个区域。
Range对象有很多常用的方法,下面我就来介绍一些常见的方法。
1. Value方法:该方法用于获取或设置Range对象中的值。
例如,可以使用Range("A1").Value来获取A1单元格的值,也可以使用Range("A1").Value = 10来将A1单元格的值设置为10。
2. Copy方法:该方法用于复制Range对象。
例如,可以使用Range("A1:B2").Copy将A1:B2区域的内容复制到剪贴板上。
3. Paste方法:该方法用于粘贴剪贴板上的内容到Range对象中。
例如,可以使用Range("C1").Paste将剪贴板上的内容粘贴到C1单元格中。
4. Clear方法:该方法用于清除Range对象中的内容。
例如,可以使用Range("A1:B2").Clear将A1:B2区域的内容清除。
5. Select方法:该方法用于选中Range对象。
例如,可以使用Range("A1:B2").Select选中A1:B2区域。
二、Worksheet对象:Worksheet对象表示Excel工作簿中的一个工作表。
在VBA中,我们可以使用Worksheet对象来操作工作表。
1. Activate方法:该方法用于激活Worksheet对象,使其成为当前活动的工作表。
例如,可以使用Worksheets("Sheet1").Activate激活名为"Sheet1"的工作表。
2. Range方法:该方法用于获取指定工作表中的区域。
例如,可以使用Worksheets("Sheet1").Range("A1:B2")来获取"Sheet1"工作表中的A1:B2区域。
EXCEL VBA初步

应用VBA操作EXCELExcel对象模型中的常用对象Application,workbooks,workbook,worksheet,range, cell1.application对象application.Activesheet.cells(1,2)=timemsgbox activecell.valuewith activecell.font.bold=true.italic=trueEnd with2. workbook对象Application.activeworkbook.save3.worksheet对象Msgbox worksheets(“sheet1”).range(“a1”) Worksheets(“sheet1”).range(“a7”).value=20 Worksheets(“sheet1”).range(“b7”).formula= “=sum(a1:a5)”4.range对象的columns,rows属性Set rng=activesheet.range(“c1:h26”)Msgbox rng.columns.countMsgbox rng.rows.count6.woeksheet.range对象的cells属性Worksheets(1).cells(1,1).value=24Sub setuptable()Dim I as longWorksheets(“sheet1”).activateFor i=1 to 5Cells(1.I).value=iNext iEnd subWorksheet(1).range(“c5:c10”).cells(1,1).formula=”=rand()”应用实例1.使用VBA合并列Sub mergetest()Dim I as longFor I = 3 to 30Cells(I,3)=cells(I,1) & cells(I,2)NextEnd sub2.自动隐藏或者显示表格中无数据的行Sub hidecell()Dim I as longFor I = 1 to 300If cells(I,1).value=”” thenRows(i).hidden=trueEnd ifNext iEn d subSub shoecell()Dim I as longFor i=1 to 300I f cells(I,1).value<>”” thenRows(i).hidden=falseEnd ifNext iEnd sub3.使用VBA操作工作表单元格Public sub writescell()[a1]=100[a2:a4]=10Range(“b1”)=200Range(“c1:c3”)=300Cells(1,4)=400Range(cells(1,5),cells(5,5))=50En subPublic sub readcell()Msgbox [a1]Msgbox range(“b1”)Msgbox cells(1,4)End subSheets(4).[a1]Sheets(4).range(“b1”)Sub roundtozero()Dim I as longDim rcell as rangeFor i= 1 to 20Set rcell=worksheets(“sheet2”).cells(i,4) If isnumeric(rcell.value) thenIf abs(rcell.value)<0.1 thenRcell.value=0End ifEnd ifNext iEnd sub4.查找工作表的第一个空行Sub findempty()Dim x as longX=1Do until (isempty(cells(x,2).value)X=x+1LoopMsgbox “空行为” & xCells(x,2)=timeEn d sub5.改变EXCEL界面的标题Sub changecaption()Application.Caption = "我的EXCEL"End SubSub mytime()Application.Caption = Now()Application.OnTime Now + TimeValue("00:00:01"), "mytime"End SubApplication.ontime(开始运行时间,运行的过程名,运行的最晚时间,是否安排一个新的ontime过程)Application.ontime now +timevalue(“00:00:15”),”my_procedure”Application.ontime timevalue(“17:00:00”), ”my_procedure”Application.ontimeearliesttime:=timevalue(“17:00:00”),procedure:= , ”my_procedure”,schedule:=false6.隔行格式化工作表Sub colorsheet()Dim I as longFor i= 1 to application.selection.rows.countIf I mod 2=1 thenSelection.rows.interior.color=rgb(255,0,0)End ifNext iEnd sub7.批量修改数据Sub changevalue()Dim I as longFor i=1 to 10Range(“a11:a20”).cells(I,1).value=range(“a11:a20”).cells(I,1).value+5Next iEnd sub应用VBA自定义函数引用(切换的快捷键F4)绝对引用与相对引用以及混合引用自定义函数创建自定义函数类似EXCEL求平均值的VBA函数Function myaverage(rng As Range) As Double Dim i As LongDim num As LongDim sum As Doublenum = rng.Rows.countFor i = 1 To numsum = sum + rng.Cells(i, 1)Next imyaverage = sum / numEnd Function创建数组公式Public Function testrange(rng As Range) As VariantDim r() As VariantDim i As Long, j As LongReDim r(1 To rng.Rows.Count, 1 To rng.Columns.Count)For i = 1 To rng.Rows.CountFor j = 1 To rng.Columns.Countr(i, j) = rng.Cells(i, j).Value + 1Next jNext itestrange = rEnd Function应用实例成绩统计辅助函数加分功能Function scoreadd(score As Double, add As Double) As Doublescore = score + addIf score > 100 Thenscore = 100End Ifscoradd = scoreEnd Function分数到等级Public Function scoretoclass(score As Double) As StringIf score < 60 Thenscoretoclass = "不及格"ElseIf score >= 60 And score < 70 Thenscoretoclass = "及格"ElseIf score >= 70 And score < 80 Thenscoretoclass = "一般"ElseIf score >= 80 And score < 90 Thenscoretoclass = "良好"Elsescoretoclass = "优秀"End IfEnd Function统计成绩段Function scorecount(rng As Range, min As Double, max As Double) As Long Dim r As RangeDim c As Longc = 0For Each r In rngIf r >= min And r < max Thenc = c + 1End IfNextscorecount = cEnd Function从身份证提取性别Function getsex(strnum As String) As String Dim i As LongIf Len(strnum) = 18 Theni = Mid(strnum, 17, 1)ElseIf Len(strnum) = 15 Theni = Mid(strnum, 15, 1)Elsegetsex = "错误"Exit FunctionEnd IfIf i Mod 2 = 0 Thengetsex = "女"Elsegetsex = "男"End IfEnd Function从身份证提取生日Function getbrithday(strum As String) As Date Dim y As StringDim m As StringDim d As StringDim birthday As StringIf Len(strnum) = 18 Theny = Mid(strnum, 7, 4)m = Mid(strnum, 11, 2)d = Mid(strnum, 13, 2)ElseIf Len(strnum) = 15 Theny = Mid(strnum, 7, 2)m = Mid(strnum, 9, 2)d = Mid(strnum, 11, 2)Elsegetbirthday = ""Exit FunctionEnd Ifbirthday = y & "-" & m & "-" & dgetbirthday = CDdate(brithday)End FunctionVBA语言VBA程序的组成模块Dim I as longDim strname as stringPrivate I as longPublic strname as string过程{private|public|}{static} sub name [(arglist)] {statements}{exit sub}{statements}End sub函数{private|public|}{static} function name [(arglist)] {as type} {statements}{name=expressiuon}{statements}{name=expressiuon}End function过程和函数的调用过程单个参数的调用Sub main()Multibeep 56MessageEnd subSub multibeep(numbeeps)For counter=1 to numbeepsBeepNext counterEnd subSub message()Msgbox “time to take a break”End sub过程多个参数的调用Sub main()housecalc 99800, 43100Call housecall(380950, 49500)End SubSub housecalc(price As Single, wage As Single)If 2.5 * wage <= 0.8 * price ThenMsgBox "you cannot afford this house"ElseMsgBox "this house is affordable"End IfEnd Sub函数的调用分数到等级Public Function scoretoclass(score As Double) As String If score < 60 Thenscoretoclass = "不及格"ElseIf score >= 60 And score < 70 Thenscoretoclass = "及格"ElseIf score >= 70 And score < 80 Thenscoretoclass = "一般"ElseIf score >= 80 And score < 90 Thenscoretoclass = "良好"Elsescoretoclass = "优秀"End If控制程序流程条件语句If condition then{statements}{elseif condition-n then{ elseif statements}}{else{ else statements}}End ifEg.Dim number, digits, mystringnumber = 53If number < 10 Thendigits = 1ElseIf number < 100 Thendigits = 2Elsedifits = 2Elsedigits = 3End IfSELECT CASE语句Select case textexpression{Case expressionlist-n{statements-n}}{Case else{elsestatements}}End selctEg.case 1 to 4, 7 to 9,11,13,is>maxnumber Eg.Function bonus(performance, salary) Select Case performanceCase 1bonus = salary * 0.1Case 2, 3bonus = salary * 0.09Case 4 To 6bonus = salary * 0.07Case Is > 8bonus = 100Case Elsebonus = 0End SelectEnd Function循环语句Do…loopDo [{while|until} condition] [statements][exit do][statements]Loop或者Do[statements][exit sub][statements]Loop [{while|until} condition]For …nextFor counter=start to end [step step] [statements][exit for][statements]Next [counter]For each..nextFor each element in group[statements][exit for][statements]Next [element]WITH 语句With object[statements][statements]End withEg.With mylable.height=2000.width=2000.caption=”this is mylable”End withEXIT语句Exit doExit forExit functionExit propertyExit sub简单的用户交互Msgbox(prompt[,butons] [,title] [,helpfile,context]Inputbox(prompt [,title][,default][,xpos][,ypos] [,helpfile,context] EXCEL内置对话框Banswer=application.dialogs(xldialogopen).show窗体MODAL类如MSGBOX,INPUTBOX,DEBUG等MODELESS使用debugSub 挂起()Dim i As LongFor i = 1 To 10 Step 1Debug.Print iDebug.assert I<8Next iEnd SubEXCEL的对象模型Application.workbooks(1).worksheets(1).cells(1,1)=100控制EXCEL状态和显示Eg.Debug.Print ActiveWorkbook.PathDebug.Print ActiveWorkbook.FullNameDebug.Print Application.TemplatesPathDebug.Print Application.PathDebug.Print Application.DefaultFilePath返回对象Workbooks.addWorkbooks.closeWorkbooks.open “c\yourpath\yourworkbook.xls”Workbooks.opentext ”c\test.txt”,startrow:=3,datatype:=xldelimited,comma:=true Woekbooks(1)Workbooks(“book1”)Workbooks(“book1.xls”)执行操作Application.CalculateWorksheets(1).CalculateApplication.Range("a3:c23").CalculateDim strword As Stringstrword = applicatin.SelectionIf Not Application.CheckSpelling(strword) ThenApplication.Selection .Font.Color = vbRedEnd IfEvaluateexpression.Evaluate (Name)[a1].Value = 25Evaluate("a1").Value = 25Set firstcellinsheet = Workbooks("book1.xls").Sheets(4).[a1]Set firstcellinsheet = Workbooks("book1.xls").Sheets(4).Evaluate("a1")Worksheets("sheet1").Activateboldcell = "a1"Application.Evaluate(boldcell).Font.Bold = TruePublic Sub testmail()If IsNull(Application.MailSession) ThenApplication.MailLogonEnd IfActiveWorkbook.sendmsil "abc@", "subject"aplication.MailLogoffEnd SubApplication.QuitApplication.UndoSet myrange = Worksheets("sheet1").Range("a1:c10")answer = Application.WorksheetFunction.Min(myrange)MsgBox answerdbaverage = Application.WorksheetFunction.Average(12, 14, 13, 19, 21)Application.Dialogs(xlDialogOpen).Showdlganswer = Application.Dialogs(xlDialogOpen).Showexpression.ontime(earliesttime,procedure,latesttime,schedule)Application.OnTime Now + TimeValue("00:00:15"), "my_procedure" Application.OnTime TimeValue("17:00:00"), "my_procedure"Sub mytime()Application.Caption = NowApplication.OnTime Now + TimeValue("00:00:01"), "mytime"End SubWINDOW对象和WINDOWS集合Application.Windows.Arrange (xlArrangeStyleTiled)With ThisWorkbook.NewWindow.Caption = "new window".ActivateEnd WithWORKBOOK对象ActiveSheet.Range("a1").Value = ActiveSheet.Range("a2").Value = ThisWorkbook.Path ActiveSheet.Range("a3").Value = ThisWorkbook.FullNameSub usepassword()Dim wkbone As WorkbookSet wkb = Workbooks.Open("c\password.xls")wkbone.Password = InputBox("enter pasword")wkbone.CloseEnd SubPrivate Sub listsheets()Dim sh As WorksheetDim rng As RangeDim i As IntegerSet rng = ActiveSheet.Range("A5")For Each sh In thisworkbooks.Sheetsrng.Offset(i, 0).Value = i = i + 1Next shEnd SubSheets集合对象Workbooks(1).Sheets(1).Visible = xlsheethioddenDim sh As WorksheetSet sh = ThisWorkbook.Sheets.Add()ThisWorkbook.Sheets(1).PrintOut from:=1, to:=1, copies:=2, preview:=True ActiveWorkbook.Sheets(1).SelectWorkbook的方法thisapplication.Workbooks(1).ActivateWorkbooks(1).Close savechanges:=FalseActiveWorkbook.SaveAs"c\myworkbook.xml", fileformate:=Excel.XlFileFormat.xlXMLSpreadsheetWorkbook事件Sub workbook_addininstall()With mandBars("standard").Controls.Add.Caption = "the addin,s menu item".OnAction = "'thisaddin.xls'!amacro"End WithEnd SubWorksheet对象Worksheets(1).CalculateWorksheets("sheets(1)").CheckSpellingMsgBox Worksheets("sheet2").Comments.CountWorksheets("sheet1").DeleteWorksheets("sheet2").ProtectWorksheets("sheet2").Protect ("123")Worksheets("sheet2").Unprotect ("123")Worksheets("sheet2").SaveAs ("myfile")Worksheets("sheet2").selectWorksheets("sheet2").visible=falseRange对象Worksheets(“sheet1”).range(“a5”).value=worksheets(“sheet1”).range(“a1”).valueWorksheets(“sheet1”).activateRange(“a1:h8”).formula=”rand()”Worksheets(1).range(“criteria”).clearcontentsWorksheets(1).cells(1,1).value=24Activesheet.cells(2,1).formula=”=sum(b1:b5)”Worksheets(1).range(“c5:c10”).cells(1,1).formula=”=rand()”Dim r1 As Range, r2 As Range, mymultiarearange As RangeWorksheets("sheets1").ActivateSet r1 = Range("a1:b2")Set r2 = Range("c3:d4")Set mymultiarearange = Union(r1, r2)mymultiarearange.SelectSub nomultiareaselection()numberofselectedareas = Selection.Areas.CountIf numberofselectedareas > 1 ThenMsgBox "you cannot carry out this command on multi-area selections"End IfEnd SubWorksheets(1).range(“a1”).activateWorksheets(“sheet1”).range(“a1”).addcomment(“mycomment”)Msgbox activecell.addressWorksheets(“sheet1”).range(“a1:d13”).calculate Worksheets(“sheet1”).range(“a1:d13”).cells.count Worksheets(“sheet1”).range(“a1:d13”).cells.checkspelling Worksheets(“sheet1”).range(“a1:d13”).clear Worksheets(“sheet1”).range(“a1:d13”).clearcomments Worksheets(“sheet1”).range(“a1:d13”).clearcontents Msgbox worksheets(“sheet2”).range(“b3:d12”).column Msgbox worksheets(“sheet2”).range(“b3:d12”).rowDim i As Long, j As LongDim rng As rangSet rng = ActiveSheet.Range("c1:h26")With rngFor i = 1 To .Columns.CountFor j = 1 To .Rows.Count.Cells(j, i).Value j & " " & iNext jNext iEnd WithWorksheets(“sheets1”).activateActivecell.currentregion.selectRange(“b4”).end(xlup).selectRange(“b4”).end(xltoright).selectRange(“b4”).end(xlup).selectWorksheets("sheets1").ActivateRange("b4", Range("b4").End(xlToRight)).SelectWorksheets(“sheets1”). Range(“f19:g20”).copy Worksheets(“sheets1”). Range(“f19:g20”).pastespecialWorksheets(“sheets1”). Range(“f19:g20”).pastespecial type=xlpastevaluesWorksheets(“sheets1”).activateActivecell.offset(rowoffset:=3,columnoffset:=3).activateExpression.pastespecial(paste,operation,skipblanks,transpose)Worksheets(“sheets2”).range(“f19:g20”).selectVdate=activesheet.range(“a1:b10”).valueactivesheet.range(“a1:b10”).value =VdateEXCEL VBA 应用开发专题篇表格处理基于过程方法的数据处理基于面向对象方法的数据处理操作数据文件Workbooks.Open "anlysis.xls"ActiveWorkbook.RunAutoMacros xlAutoOpenWorkbooks.OpenText filenmae:="data.txt", datetype:=xlDelimited, Tab:=TrueSub useopenxml()Application.Workbooks.OpenXML Filename:="customers.xml", loadoption:=xlxmlloadimportolist End SubSub useopendatebase()Workbooks.OpenDatabase "c:\northwind.mdb"End SubWorkbook.saveActiveworkbook.saveFor each w in application.workbooksw.savenext wapplication .quitworkbooks(“book1.xls”).close savechanges:=false使用VBA语句操作文件Public Function getattrdescr()Dim result As String, attr As Longattr = GetAttr(Filename)If attr And vbDirectory Then result = result & "directory" If attr And vbredonly Then result = result & "redonly"If attr And vbHidden Then result = result & "hidden"If attr And vbSystem Then result = result & "system"If attr And vbArchive Then result = result & "archive" getattrdescr = Mid(result, 2)End FunctionDebug.Print FileLen("d:\vs98\temporary.dat") Debug.Print FileDateTime("d:\vs98\temporary.dat")Public Sub 测试()Debug.Print CurDirDebug.Print CurDir("c")End Sub处理文本文件Open filename for input 文件输入,读取Open filename for output文件输出,写入Open filename for appending 添加内容到文件末尾Public Sub 文件操作()Dim i, filenameFor i = 1 To 3filename = "test" & iOpen filename For Output As #iPrint #i, "this is a test."Next iCloseEnd SubLine input #filename,varnamePublic Sub 插入行()Dim textlineOpen "test2" For Input As #1Do While Not EOF(1)Line Input #1, textlineDebug.Print textlineLoopClose #1End SubInput #filenumber,varlistOpen "c\text2" For Output As 1Print #1, "this is a test"Print #1,Print #1, "zone1"; Tab; "zone2"Print #1, "hello"; " "; "word"Print #1, Spc(5); "5 leading spaces"Print #1, Tab(10); "hello"Dim mybool, mydate, mynull, myerrormybool = False: mydate = #2/12/1969#: mynull = Null myerror = CVErr(32767)Print #1, mybool; "is a boolean value"Print #1, mydate; "is a date"Print #1, mynull; "is a null value"Print #1, myerror; "is an error value"Close #1Open "c\text2" For Output As 1write #1, "this is a test"write #1,write #1, "zone1"; Tab; "zone2"write #1, "hello"; " "; "word"write #1, Spc(5); "5 leading spaces"write #1, Tab(10); "hello"Dim mybool, mydate, mynull, myerrormybool = False: mydate = #2/12/1969#: mynull = Null myerror = CVErr(32767)write #1, mybool; "is a boolean value"write #1, mydate; "is a date"write #1, mynull; "is a null value"write #1, myerror; "is an error value"Close #1Application.worksheetfunction.linest(y,x,,false)应用实例格式化数据RS234类型Public Function getnumber(cell As Range) Application.VolatileDim temp As VariantDim t As StringDim n As Longt = ""temp = cell.ValueFor n = 1 To Len(temp)If IsNumeric(Mid(temp, n, 1)) Thent = t & Mid(temp, n, 1)End IfNext ngetnumber = Val(t)End FunctionRS23.34情况Public Function getnumberplusa(cell As Range) Application.VolatileDim temp As VariantDim t As StringDim n As Longt = ""temp = cell.ValueFor n = 1 To Len(temp)If IsNumeric(Mid(temp, n, 1)) ThenExit ForEnd IfNext nt = Mid(temp, n)getnumberplusa = Val(t)End FunctionRS23.34AS类型Public Function getnumberplusB() Application.VolatileDim temp As VariantDim t As StringDim n As Long, s As Long, e As Longt = ""temp = cell.ValueFor n = 1 To Len(temp)If IsNumeric(Mid(temp, n, 1)) Thens = nExit ForEnd IfNext nFor n = Len(temp) To 1 Step -1If IsNumeric(Mid(temp, n, 1)) Thene = nExit ForEnd IfNext nt = Mid(temp, s, e - s + 1)getnumberplusB = Val(t)End Function在EXCEL中使用VBA来筛选数据求解重复行的EXCEL表格Vba程序Public Sub seelctdouble()Dim i As Long, j As LongFor i = 1 To 7 Step 1For j = 1 To 7 Step 1If i <> j ThenIf Range("a" & i).Value = Range("a" & j).Value Then Range("e" & i).Value = 1End IfEnd IfNext jNext iEnd Sub使用数组Public Sub selectdouble2()Dim i As Long, j As LongDim max As LongDim a() As xtring, b() As Stringmax = 10000ReDim a(max) As StringReDim b(max) As LongFor i = 1 To max Step 1a(i) = Range("A1:a" & max).ValueNext iFor i = 1 To max Step 1For j = 1 To max Step 1If i <> j ThenIf a(i) = a(j) Thenb(i) = 1End IfEnd IfNext jNext iFor i = 1 To max Step 1Range("f1:f" & max).Value = b(i)NextEnd Sub数组赋值a = Range("a1;a" & max).ValueRange("f1:f" & max).Value使用工作表函数Public Sub selectdouble3()Dim i As Long, j As Long, a, bFor i = 2 To 9999 Step 1a = Application.VLookup(Range("a" & i), Range("a1:b" & (i - 1)), 2, False)b = Application.VLookup(Range("a" & i), Range("a1" & (i + 1) & ":b1000"), 2, False) If IsError(a) And IsError(b) ThenRange("g" & i).ValueEnd IfNext iEnd Sub改进算法Public Sub selectdouble4()Dim i As Long, max As Longmax = 10000i = 1DoIf Range("a" & i).Value = Range("a" & (i + 1)).Value ThenRange("i" & i).Value = 1Range("i" & (i + 1)).Value = 1i = i + 2Elsei = i + 1创建EXCEL图表创建图表工作表Public Sub addchartsheet()Dim objchart As ChartSet objchart = Charts.AddWith objchart.ChartType = xlColumnClustered.SetSourceData Source:=Sheets("sheet1").Range("a4:d7"), PlotBy:=xlRows.HasTitle = TrueEnd WithEnd Sub创建嵌入式图表Public Sub addembeddedchart()Dim objchart As ChartSet objchart = Charts.AddSet objchart = objchart.Location(where:=xlLocationAsObject, Name:="sheet1")With objchart.ChartType = xlColumnClustered.SetSourceData Sheets("sheet1").Range("a4:d7"), PlotBy:=xlRows.HasTitle = True. charttitle.caption = "sheet1!r1c1"With .Parent.Top = Range("a9").Top.Left = Range("a9").Left.Name = "嵌入式图表"End WithEnd WithEnd Sub或者Public Sub addembeddebchart2()Dim objchart As ChartObjectSet objchart = Sheets("sheet1").ChartObjects.Add(0, 0, 200, 100)End Sub操作EXCEL图表ActiveSheet.ChartObjects("chart1").ActivateActiveChart.DeselectIf ActiveChart Is Nothing ThenMsgBox "选择了一个图表"End If修改图表的数据系列Charts(1).setsourcedate Source:=Sheets(1).Range("a1:a10"), PlotBy:=xlColumnsDim objseries As SeriesFor Each objseries In ActiveChart.SeriesCollectionMsgBox objseries.FormulaNextActiveChart.SeriesCollection .CountSeriesCollection (SeriesCollection.Count)Charts("chart1").SeriesCollection.AddSource:=ActiveWorkbook.Worksheets("sheet1").Range("b1:b10")Worksheets("sheet1").ChartObjects(1).ActivateActiveChart.SeriesCollection(1).Add Source:=Worksheets("sheet1").Range("b1:b10")ActiveChart.SeriesCollection(1).ChartType = xlXYScatterLinesNoMarkersWith Charts("charts1").SeriesCollection(1).hasdatalables = True.ApplyDataLabels Type:=xlValueEnd WithCharts("chart1").SeriesCollection(1).XValues = Worksheets("sheet1").Range("b1:b15") Charts("chart1").SeriesCollection(1).Values = Worksheets("sheet1").Range("c5:t15")Charts("chart1").SeriesCollection(1).Values = "1,3,5,7,11,13,17,19"Charts("chart1").SeriesCollection(1).Trendlines.Add Type:=xlLinear图表的输出Chart.export(filename,filtername,interactive)If not activechart is nothing thenActivechart.export filename:=”test.gif”,filtername:=”gif”En d ifEXCEL图表事件在使用嵌入式图表的CHART对象事件之前,必须新建一个类模块并声明一个带有事件的CHART类型的对象!类模块中;Private WithEvents eventchart As ChartPublic Function connectchart(objchart) As BooleanIf Not objchart Is Nothing ThenSet eventchart = objchartconnectchart = TrueElseconnectchart = FalseEnd IfEnd Function嵌入式图表APPLICATION,WORKBOOK,WORKSHEET,CHARTOBJECT,CHART图表工作表APPLICATION,workbook,chartCommandbars,commandbar,commandbarcontrols,commandbarcontrolCommandbars.add(name:="gcdploy"Set cmbnewbar = CommandBars.Add(Name:="GCDPLOT")Public Sub listcommandbars()Dim objcmdbar As CommandBarDim i As Longi = 1For Each objcmdbar In mandBarsi = i + 1With objcmdbarActiveSheet.Cells(i, 1) = .IndexActiveSheet.Cells(i, 2) = .EnabledActiveSheet.Cells(i, 3) = .VisibleActiveSheet.Cells(i, 4) = .TypeActiveSheet.Cells(i, 5) = .NameEnd WithNext objcmdbarEnd SubCommandbarbutton对象的CLICKED事件类模块Private WithEvents eventcmdbutton As CommandBarButtonPrivate Sub eventcmdbutton_Click(ByVal Ctrl As mandBarButton, CancelDefault As Boolean)MsgBox Ctrl.Caption & "clicked"End Sub模块Public Sub eventtest()Dim cmbnewbar As CommandBarDim objbutton As CommandBarButtonSet cmbnewbar = CommandBars.Add("tool")cmbnewbar.Visible = TrueSet objbutton = cmbnewbar.Controls.Add(msoControlButton)objbutton.Style = msoButtonCaptionobjbutton.Caption = "文字按钮"Set eventscmdbutton = objbuttonEnd Sub自定义工具栏Public Sub createtoolbar()Dim objcmdbar As CommandBarDim objbutton As CommandBarButtonSet objcmbar = CommandBars.Add("toolbar")objcmdbar.Visible = TrueSet objbutton = objcmbar.Controls.Add(msoControlButton, 2)objbutton .Style = msoButtonCaptionobjbutton.Caption = "文字按钮"objbutton.OnAction = "mymethod1"Set objbutton = objcmbar.Controls.Add(msoControlButton, 3)objbutton .Style = msoButtonIconobjbutton.Caption = "图标按钮"objbutton.OnAction = "mymethod2"Set objbutton = objcmbar.Controls.Add(msoControlButton, 4)objbutton .Style = msoButtonIconAndCaptionobjbutton.Caption = "文字和图标"objbutton.OnAction = "mymethod3"End SubPublic Sub mymethod1()MsgBox "调用过程1"End SubPublic Sub mymethod2()MsgBox "调用过程2"End SubPublic Sub mymethod3()MsgBox "调用过程3"End Sub组合框控件CommadbarcomboboxPublic Sub addcombobox()Dim objcmdbar As CommandBarDim objcmb As CommandBarComboBoxSet objcmdbar = CommandBars.Add("custom")Set objcmb = objcmdbar.Controls.Add(Type:=msoControlComboBox, ID:=1) With objcmb.AddItem "first item", 1.AddItem "second item", 2.DropDownLines = 3.DropDownWidth = 75.Style = msoComboNormalEnd Withobjcmdbar.Visible = TrueEnd Sub给现有菜单增加菜单项Public Sub addmenuitem()Dim objcmdbar As CommandBarDim objcmdbutton As CommandBarButtonDim objcmdpop As CommandBarPopupSet objcmdbar = CommandBars(“worksheet menu bar")If Not objcmdbar Is Nothing ThenSet objcmdpop = objcmdbar.Controls("工具(&t)")If Not objcmdpop Is Nothing ThenSet objcmdbutton = objcmdpop.Controls.Add(msoControlButton) objcmdbutton.Style = msoButtonCaptionobjcmdbutton.Caption = "我的工具"objcmdbutton.OnAction = "toolstest"End IfEnd IfEnd SubInserttoolbarDeletcommandbarbyerrortrapping用户窗体For each control in userform1.controlsControl.visible=falseNext control组合框列表框复选框EXCEL内置对话框Application,dialogs,dialogApplication.dialogs(xldialogalignment).showApplication.dialogs(xldialogsaveas).show”文件名”。
Excel宏编程进阶VBA常用对象与方法详解

Excel宏编程进阶VBA常用对象与方法详解Excel宏编程是一项强大的工具,通过使用VBA(Visual Basic for Applications)语言,可以实现自动化任务和高级数据处理。
本文将详细介绍Excel宏编程中常用的对象和方法,以帮助读者更好地掌握Excel VBA编程。
一、对象的介绍在Excel宏编程中,对象是一切的基础。
对象是指Excel中的各种元素,如工作表、单元格、图表等。
每个对象都有自己的属性和方法,用来控制和操作对象的行为。
1. Application对象:Application对象是Excel VBA编程的最顶层对象,它代表Excel应用程序本身。
通过Application对象,可以控制Excel的各种属性和行为。
例如,设置程序标题、显示警告信息等。
2. Workbook对象:Workbook对象代表一个Excel工作簿,可以通过它来操作工作簿的属性和方法。
例如,打开、保存、关闭工作簿,以及设置工作簿的属性等。
3. Worksheet对象:Worksheet对象代表一个工作表,可以通过它来操作工作表的属性和方法。
例如,插入行列、复制粘贴数据等。
Range对象代表一个单元格或多个单元格的集合,可以通过它来操作单元格的属性和方法。
例如,设置单元格的值、格式、合并单元格等。
5. Chart对象:Chart对象代表一个图表,可以通过它来操作图表的属性和方法。
例如,设置图表类型、添加数据系列等。
二、常用方法的介绍Excel VBA提供了许多常用方法,用于处理数据、控制对象的行为以及实现各种功能。
1. Cells方法:Cells方法用于操作单元格,在指定工作表上返回特定单元格的值。
例如,Cells(1, 1)代表第一个工作表的第一个单元格。
2. Select方法:Select方法用于选择对象,可以在程序中对选定的对象进行操作。
例如,使用Range对象的Select方法选中一个区域,然后对该区域进行操作。
Excel-VBA常用对象(Application、Workbook、Worksheet、。。。

Excel-VBA常⽤对象(Application、Workbook、Worksheet、。
⼀、对象模型在VBE中“帮助(H)”——“Microsoft Visual Basic 帮助(H) F1”——“Visual Basic 语⾔参考”——“函数” 或者在VBE下快捷键“F1”地址:https:///zh-cn/office/vba/api/overview/excel/object-model⼆、Application对象(Excel顶层对象)1、ScreenUpdating属性是否控制屏幕更新,False表⽰关闭屏幕更新,True表⽰打开屏幕更新设置ScreenUpdating=False 关闭屏幕更新,将看不到程序的执⾏过程,可以加快程序的执⾏速度,让程序显得更直观,专业。
⽰例(为关闭屏幕更新下,会弹出对话框):Sub InputTest()Cells.ClearContents '清除表中所有数据Range("A1:A10") = 100MsgBox"刚才在A1:A10输⼊数值100,你能看到结果吗?"Range("B1:B10") = 200MsgBox"刚才在B1:B10输⼊数值200,你能看到结果吗?"End Sub⽰例(关闭屏幕更新,看不到执⾏过程,程序最终执⾏完成才能看到最终结果)Sub InputTest()Cells.ClearContents '清除表中所有数据Application.ScreenUpdating = False'关闭屏幕更新Range("A1:A10") = 100MsgBox"刚才在A1:A10输⼊数值100,你能看到结果吗?"Range("B1:B10") = 200MsgBox"刚才在B1:B10输⼊数值200,你能看到结果吗?"Application.ScreenUpdating = True'恢复屏幕更新End Sub2、DisplayAlterts属性是否显⽰警告对话框,False为不显⽰,True为显⽰Sub delSht()Dim sht As WorksheetApplication.DisplayAlerts = False'不显⽰警告信息For Each sht In WorksheetsIf = Then'判断sht是不是活动⼯作表sht.Delete '删除sht代表的⼯作表End IfNextApplication.DisplayAlerts = True'恢复显⽰警告信息End Sub3、EnableEvents属性启⽤或禁⽤事件,False为禁⽤(不让事件发⽣),True为启⽤什么是事件?能被Excel认识的⼀个操作动作,例如“打开⼯作簿”、“关闭⼯作簿”等⽰例1:编写⼀个程序,当选中⼯作表的单元格时,⾃动在单元格中写⼊该单元格的地址End Sub⽰例2:选中活动单元格,记录对应单元格地址,并将活动单元格向下移动⼀个单元格Private Sub Worksheet_SelectionChange(ByVal Target As Range)Target.Value = Target.AddressApplication.EnableEvents = False'禁⽤事件Target.Offset(1, 0).Select '选中活动单元格下⾯的⼀个单元格Application.EnableEvents = True'启⽤事件End Sub4、WorksheetFunction属性使⽤WorksheetFunction调⽤Excel内置函数⽰例1:统计A1:A50单元格中数值⼤于1000的单元格有多少个?Sub CountTest()Dim mycount As Integer, rng As RangeFor Each rng In Range("A1:B50")If rng.Value > 1000Then mycount = mycount + 1NextMsgBox"A1:B50中⼤于1000的单元格个数为:" & mycountEnd Sub⽰例2:统计A1:A50单元格中数值⼤于1000的单元格有多少个?使⽤COUNTIF函数Sub CountTest()Dim mycount As Integermycount = Application.WorksheetFunction.CountIf(Range("A1:B50"), ">1000")MsgBox"A1:B50中⼤于1000的单元格个数为:" & mycountEnd Sub5、给Excel梳妆打扮Excel⼯作表界⾯相关命令Excel界⾯6、Application的常⽤属性三、Workbook对象Workbook⼯作簿Workbooks⼯作簿集合1、怎么引⽤⼯作簿引⽤⼯作簿,就是指明⼯作簿的位置及名称,共有两种⽅式⽅式⼀:利⽤索引号引⽤⼯作簿,Workbook.Item(3),这⾥的Item可以省略,即Workbook(3)⽅式⼆:利⽤⼯作簿名称引⽤,Workbook("Book1")或Workbook("Book1.xls"),如果本地⽂件显⽰拓展名(且⽂件已经保存),则⽂件名必须带拓展名,否则会报错。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Excel VBA
怎样引用区域
目录
●引用一个单元格 ●引用一个区域 ●引用整行 ●引用整列 ●引用所有单元格 ●引用相对位置单元格 ●引用特殊区域(一) ●引用特殊区域(二) ●引用特殊区域(三)
引用一个单元格
举例写地址,没有引号,无法循环
Range("B5")
地址为字符串,可行循环,但书写麻烦
Cells(5, "B")
先行后列,行地址为数字,列地址为字符串,无法引
用区域
Cells(5,2)
地址为数字,先行后列,行列都可循环,无法引用
区域
引用一个区域
举例:引用区域B5:D10
[B5:D10]
地址用冒号连接
Range("B5:D10") Range("B5", "D10")
Application.Caption="My Application" Application.Caption="Microsoft Excel” ?Application.Path
Excel Application.Quit
Application 对象
ActiveSheet 属性 返回活动工作表。如果没有活动的工作表,则返回 Nothing。 Sub 活动工作表() Debug.Print "当前活动工作表是:"; End Sub
Worksheets.Delete 方法:删除对象
Worksheets(工作表).Activate方法:激活工作表
Workbook对象和 Workbooks集合
例3 激活工作表(激活工作簿中的Sheet1工作表) Worksheets("Sheet1").Activate 或 Worksheets(1).Activate
引用交叉(公共)区域
Intersect(Range("B5:D10"),Range("A1:C9"))
可以有多个Range型参数
引用特殊区域(二)
引用当前区域
Range("B1").CurrentRegion
当前区域是以空行和空列围成的区域 任何一个区域都有自己所属的当前区域
引用已用区域
4
使用Application对象
VBA操作 获取当前应用程序名称 立即窗口输入 ?
将 Excel 应用 程 序 标 题 改 为“My Application” 将 Excel 应用 程 序 标 题 改 回为“Microsoft Excel” 获取Excel.exe保存的文件 夹路径 退出
Workbook对象和 Workbooks集合
Workbooks.Add 方法:新建工作簿,新建的工作簿 将成为活动工作簿。
Workbooks.Open 方法 :打开一个工作簿
Workbooks.Close 方法:关闭对象
Workbook对象和 Workbooks集合
例1 创建一个新的工作簿。
利用Rows(行)集合
举例:引用第一到第三行
[1:3] Range("1:3") Rows("1:3")
引用整列
举例:引用A列(第一列)
[A:A] Range("A:A") Columns(1)
利用Columns(列)集合
Columns("A")
举例:引用A到C列(第一到第三列)
Excel VBA
常用对象
Application 对象
Excel对象模型的层次结构。
2
使用Application对象
Application对象代表整个Microsoft Excel应用程序 本身,所有打开的工作簿都是属于一个Excel应用程 序,即一个Application对象。 通过Application对象提供的属性和方法,可控制 Excel应用程序的外观和状态。
只能用于活动工作表
引用当前选区
ActiveCell.CurrentRegion
引用偏移区域
Range("B5:D10").Offset(2,1)
引用C7:E12,偏移地址可正可负,默认为0,偏移地
址先行后列
引用命名区域
引用命名区域
将当前工作表中名为“AA”的单元格区域内容设置 为30。
Workbook对象和 Workbooks集合
例7:复制和删除工作表 Sub 复制和删除工作表() Sheets(1).Name = "原始表" Sheets("原始表").Copy before:=Sheets("原始表") Sheets(1).Name = "副本1" Sheets("原始表").Delete End Sub
单元格和区域的操作
求数据区末尾列号: c = Range("A1").End(xlToRight).Column '求A1单元格数据区末尾列号 c = Cells(1, 1).End(xlToRight).Column '求A1单元格数据区末尾列号 c = Cells(1, 256).End(xlToLeft).Column '求第1行数据区末尾列号 c = Rows(1).End(xlToRight).Column '求第1行数据区末尾列号
edRange
不仅包括有数据的区域,还包括曾经用过的区域 以所有用过区域的中最上行最左列和最下行最右列围成 一个工作表只有一个用过区域 如果没有用过任何单元格,则已用区域为A1单元格
引用特殊区域(三)
引用活动单元格
Range("B5").Activate
[AA].Value = 30
相对引用区域
相对引用
将位于活动工作表上活动单元格下1行和右3列 的单元格设置为双下划线格式。 ActiveCell.Offset(1, 3).Font.Underline = xlDouble
单元格和区域的操作
求数据区末尾行号: r = Range("A1").End(xlDown).Row '求A1单元格数据区末尾行号 r = Cells(1, 1).End(xlDown).Row '求A1单元格数据区末尾行号 r = Range("A65536").End(xlUp).Row '求A列数据区末尾行号 r = Cells(65536, 1).End(xlUp).Row '求A列数据区末尾行号 r = Columns(1).End(xlDown).Row ‘求A列数据区末尾行号
Workbook对象和 Workbooks集合
例5:保存工作表 Sub 保存工作表() ActiveWorkbook.SaveAs Filename:="D:\第一个 保存工作表.xlsx" End Sub
Workbook对象和 Workbooks集合
例6:重命名工作表 Sub 重命名工作表() Sheets(1).Select Sheets(1).Name = "hello" End Sub
实例
编程序,打印九九乘法表如下。
实例
编程序,打印九九乘法表如下。
起止地址分别用引号括起来,中间用逗号连接
Range(Range("B5"),Range( "D10"))
Range嵌套
Range(Cells(5, 2), Cells(10, 4))
Range与Cells混合
引用整行
举例:引用第一行
[1:1] Range("1:1") Rows(1)
Workbook对象和 Workbooks集合
Workbook 对象:代表一个 Microsoft Excel 工作簿
Workbooks 对象:Microsoft Excel 应用程序中当前 打开的所有 Workbook 对象的集合
属性:它代表对象的名称
Workbook.FullName 属性:返回对象的名称(以字 符串表示),包括其磁盘路径 Workbook.Sheets 属性:返回一个 Sheets 集合,它 代表指定工作簿中所有工作表
3
使用Application对象
Application对象的常用属性 获取对象的引用
ActiveWorkbook属性 ActiveSheet属性 ActiveCell属性 Workbooks属性 Sheets属性 Cells属性 Selection属性 WorksheetFunction属性
属性:返回或设置一个 String 值, 它代表对象的名称
Worksheet对象和 Worksheets集合
常用方法:
Worksheets.Add 方法:新建工作表。新建的工作表 将成为活动工作表
Worksheets.Copy 方法:将工作表复制到工作簿的另
一位置
Set <变量或属性名> = {[New] <对象表达式>|Nothing}
Workbook对象和 Workbooks集合