excel 2010 vbaVBA中为何 Workbooks.Add Range("C4").Select会出错?

我要文库申报
查看: 5637|回复: 1
如何理解在Workbooks.Add 加入xlwbatworksheet类型?
积分学习力
魅力值 影响力
消费券 Ti币好友
在线时间 小时
最后登录月度优秀 次管理次数 次
网站名称: Excel技巧网 | Excel专家栖息谷 | 微软中文技术社区合作伙伴
署名作者: wise
版权声明: 版权归本站与作者共有 除本站官方外非作者本人转载须经许可并注明出处
适用版本: 03以前版本&
语言环境: 简体中文
学习方法: 掌握Excel技巧的关键是动手操作
下载 ≠ 知识
免费注册成为本站会员,享用更多功能,结识更多Office办公高手!
才可以下载或查看,没有帐号?
Q:如何理解在Workbooks.Add 加入xlwbatworksheet类型?
A:如果在创建新工作簿时,在添加工作表时加入xlwbatworksheet类型,则在新工作簿将只能包含指定类型的单
张空白工作表。
Workbooks.Add 方法 :其是新建一个工作表。新工作表将成为活动工作表。
expression.Add(Template)
expression:必需。该表达式返回一个 Workbooks 对象。
Template:Variant 类型,可选。确定如何创建工作簿。如果本参数为指定一现有 Microsoft Excel 文件名的字
符串,那么创建新工作簿将以该指定的文件作为模板。如果本参数为常量,新工作簿将包含指定类型的单张工作
表。可为以下 XlWBATemplate 常量之一:xlWBATChart、xlWBATExcel4IntlMacroSheet、
xlWBATExcel4MacroSheet 或 xlWBATWorksheet。如果省略本参数,Microsoft Excel 将创建包含一定数目的空白
工作表的工作簿。
xlWBATChart:对应图表
xlWBATWorksheet:对应工作表
xlWBATExcel4IntlMacroSheet 和xlWBATExcel4MacroSheet都是对应宏表。
xlWBATExcel4IntlMacroSheet:国际通用宏表
xlWBATExcel4MacroSheet:4.0宏表
学office,哪能不关注全网最大的Office类微博(新浪)
积分学习力
魅力值 影响力
消费券 Ti币好友
在线时间 小时
最后登录月度优秀 次管理次数 次
过来学习一下
学office,哪能不关注全网最大的Office类微博(新浪)
Excel技巧网的会员探讨问题仅代表其个人意见,与网站的立场无关。任何违反国家和地方相关法律法规的言论,本站有义务协助政府相关部门追究发言者的责任!
本站中非注明转载文章与案例的版权为作者与Excel技巧网共有。若非原文作者,本站之外任何单位或个人未经允许,不得将其用于商业用途。
若非原文作者,任何形式的非商业性转载必须获得Excel技巧网或作者允许,并注明作者和出处。
会员发表的帖子如涉及版权纠纷,须自行负责。详情请参考注册时的网站服务条款。
本站特聘法律顾问:沈学律师
Powered byExcel VBA Range对象基本操作应用示例
[示例01] 赋值给某单元格[示例01-01] Sub test1()Worksheets("Sheet1").Range("A5").Value = 22MsgBox "工作表Sheet1内单元格A5中的值为" _& Worksheets("Sheet1").Range("A5").ValueEnd Sub[示例01-02]Sub test2()Worksheets("Sheet1").Range("A1").Value = _Worksheets("Sheet1").Range("A5").ValueMsgBox "现在A1单元格中的值也为" & _Worksheets("Sheet1").Range("A5").ValueEnd Sub[示例01-03]Sub test3()MsgBox "用公式填充单元格,本例为随机数公式"Range("A1:H8").Formula = "=Rand()"End Sub[示例01-04]Sub test4()Worksheets(1).Cells(1, 1).Value = 24MsgBox "现在单元格A1的值为24"End Sub[示例01-05]Sub test5()MsgBox "给单元格设置公式,求B2至B5单元格区域之和"ActiveSheet.Cells(2, 1).Formula = "=Sum(B1:B5)"End Sub[示例01-06]Sub test6()MsgBox "设置单元格C5中的公式."Worksheets(1).Range("C5:C10").Cells(1, 1).Formula = "=Rand()"End Sub- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例02] 引用单元格Sub Random()Dim myRange As Range'设置对单元格区域的引用Set myRange = Worksheets("Sheet1").Range("A1:D5")'对Range对象进行操作myRange.Formula = "=RAND()"myRange.Font.Bold = TrueEnd Sub示例说明:可以设置Range对象变量来引用单元格区域,然后对该变量所代表的单元格区域进行操作。- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例03] 清除单元格[示例03-01]清除单元格中的内容(ClearContents方法)Sub testClearContents()MsgBox "清除指定单元格区域中的内容"Worksheets(1).Range("A1:H8").ClearContentsEnd Sub[示例03-02]清除单元格中的格式(ClearFormats方法)Sub testClearFormats()MsgBox "清除指定单元格区域中的格式"Worksheets(1).Range("A1:H8").ClearFormatsEnd Sub[示例03-03]清除单元格中的批注(ClearComments方法)Sub testClearComments()MsgBox "清除指定单元格区域中的批注"Worksheets(1).Range("A1:H8").ClearCommentsEnd Sub[示例03-04]清除单元格中的全部,包括内容、格式和批注(Clear方法)Sub testClear()MsgBox "彻底清除指定单元格区域"Worksheets(1).Range("A1:H8").ClearEnd Sub- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例04] Range和CellsSub test()'设置单元格区域A1:J10的边框线条样式With Worksheets(1).Range(.Cells(1, 1), _.Cells(10, 10)).Borders.LineStyle = xlThickEnd WithEnd Sub示例说明:可用 Range(cell1, cell2) 返回一个 Range 对象,其中cell1和cell2为指定起始和终止位置的Range对象。- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例05] 选取单元格区域(Select方法)Sub testSelect()'选取单元格区域A1:D5Worksheets("Sheet1").Range("A1:D5").SelectEnd Sub- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例06] 基于所选区域偏离至另一区域(Offset属性)[示例06-01]Sub testOffset()Worksheets("Sheet1").ActivateSelection.Offset(3, 1).SelectEnd Sub示例说明:可用Offset(row, column)(其中row和column为行偏移量和列偏移量)返回相对于另一区域在指定偏移量处的区域。如上例选定位于当前选定区域左上角单元格的向下三行且向右一列处单元格区域。[示例06-02] 选取距当前单元格指定行数和列数的单元格Sub ActiveCellOffice()MsgBox "显示距当前单元格第3列、第2行的单元格中的值"MsgBox ActiveCell.Offset(3, 2).ValueEnd Sub- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例07] 调整区域的大小(Resize属性)Sub ResizeRange()Dim numRows As Integer, numcolumns As IntegerWorksheets("Sheet1").ActivatenumRows = Selection.Rows.Countnumcolumns = Selection.Columns.CountSelection.Resize(numRows + 1, numcolumns + 1).SelectEnd Sub示例说明:本示例调整所选区域的大小,使之增加一行一列。- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例08] 选取多个区域(Union方法)Sub testUnion()Dim rng1 As Range, rng2 As Range, myMultiAreaRange As RangeWorksheets("sheet1").ActivateSet rng1 = Range("A1:B2")Set rng2 = Range("C3:D4")Set myMultiAreaRange = Union(rng1, rng2)myMultiAreaRange.SelectEnd Sub示例说明:可用 Union(range1, range2, ...) 返回多块区域,即该区域由两个或多个连续的单元格区域所组成。如上例创建由单元格区域A1:B2和C3:D4组合定义的对象,然后选定该定义区域。- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例09] 激活已选区域中的单元格Sub ActivateRange()MsgBox "选取单元格区域B2:D6并将C4选中"ActiveSheet.Range("B3:D6").SelectRange("C5").ActivateEnd Sub- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例10] 选取指定条件的单元格(SpecialCells方法)Sub SelectSpecialCells()MsgBox "选择当前工作表中所有公式单元格"ActiveSheet.Cells.SpecialCells(xlCellTypeFormulas).SelectEnd Sub- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例11] 选取矩形区域(CurrentRegion属性)'选取包含当前单元格的矩形区域'该区域周边为空白行和空白列Sub SelectCurrentRegion()MsgBox "选取包含当前单元格的矩形区域"ActiveCell.CurrentRegion.SelectEnd Sub- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例12] 选取当前工作表中已用单元格(UsedRange属性)'选取当前工作表中已使用的单元格区域Sub SelectUsedRange()MsgBox "选取当前工作表中已使用的单元格区域" _& vbCrLf & "并显示其地址"ActiveSheet.UsedRange.SelectMsgBox ActiveSheet.UsedRange.AddressEnd Sub- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例13] 选取最边缘单元格(End属性)'选取最下方的单元格Sub SelectEndCell()MsgBox "选取当前单元格区域内最下方的单元格"ActiveCell.End(xlDown).SelectEnd Sub示例说明:可以改变参数xlDown以选取最左边、最右边、最上方的单元格。- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例14]设置当前单元格的前一个单元格和后一个单元格的值Sub SetCellValue()MsgBox "将当前单元格中前面的单元格值设为""我前面的单元格""" & vbCrLf _& "后面的单元格值设为""我后面的单元格"""ActiveCell.Previous.Value = "我前面的单元格"ActiveCell.Next.Value = "我后面的单元格"End Sub- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例15]确认所选单元格区域中是否有公式(HasFormula属性)Sub IfHasFormula()If Selection.HasFormula = True ThenMsgBox "所选单元格中都有公式"ElseMsgBox "所选单元格中,部分单元格没有公式"End IfEnd Sub- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例16] 公式单元格操作[示例16-01]获取与运算结果单元格有直接关系的单元格Sub CalRelationCell()MsgBox "选取与当前单元格的计算结果相关的单元格"ActiveCell.DirectPrecedents.SelectEnd Sub[示例16-02]追踪公式单元格Sub Cal1()MsgBox "选取计算结果单元格相关的所有单元格"ActiveCell.Precedents.SelectEnd SubSub TrackCell()MsgBox "追踪运算结果单元格"ActiveCell.ShowPrecedentsEnd SubSub DelTrack()MsgBox "删除追踪线"ActiveCell.ShowPrecedents Remove:=TrueEnd Sub- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例17] 复制单元格(Copy方法)Sub CopyRange()MsgBox "在单元格B7中写入公式后,将B7的內容复制到C7:D7內"Range("B7").Formula = "=Sum(B3:B6)"Range("B7").Copy Destination:=Range("C7:D7")End Sub- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例18]获取单元格行列值(Row属性和Column属性)Sub RangePosition()MsgBox "显示所选单元格区域的行列值"MsgBox "第 " & Selection.Row & "行 " & Selection.Column & "列"End Sub- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例19]获取单元格区域的单元格数及行列数(Rows属性、Columns属性和Count属性)Sub GetRowColumnNum()MsgBox "显示所选取单元格区域的单元格数、行数和列数"MsgBox "单元格区域中的单元格数为:" & Selection.CountMsgBox "单元格区域中的行数为:" & Selection.Rows.CountMsgBox "单元格区域中的列数为:" & Selection.Columns.CountEnd Sub- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例20]设置单元格中的文本格式[示例20-01] 对齐文本Sub HorizontalAlign()MsgBox "将所选单元格区域中的文本左右对齐方式设为居中"Selection.HorizontalAlignment = xlHAlignCenterEnd SubSub VerticalAlign()MsgBox "将所选单元格区域中的文本上下对齐方式设为居中"Selection.RowHeight = 36Selection.VerticalAlignment = xlVAlignCenterEnd Sub[示例20-02] 缩排文本(InsertIndent方法)Sub Indent()MsgBox "将所选单元格区域中的文本缩排值加1"Selection.InsertIndent 1MsgBox "将缩排值恢复"Selection.InsertIndent -1End Sub[示例20-03] 设置文本方向(Orientation属性)Sub ChangeOrientation()MsgBox "将所选单元格中的文本顺时针旋转45度"Selection.Orientation = 45MsgBox "将文本由横向改为纵向"Selection.Orientation = xlVerticalMsgBox "将文本方向恢复原值"Selection.Orientation = xlHorizontalEnd Sub[示例20-04]自动换行(WrapText属性)Sub ChangeRow()Dim iMsgBox "将所选单元格设置为自动换行"i = Selection.WrapTextSelection.WrapText = TrueMsgBox "恢复原状"Selection.WrapText = iEnd Sub[示例20-05]将比单元格列宽长的文本缩小到能容纳列宽大小(ShrinkToFit属性)Sub AutoFit()Dim iMsgBox "将长于列宽的文本缩到与列宽相同"i = Selection.ShrinkToFitSelection.ShrinkToFit = TrueMsgBox "恢复原状"Selection.ShrinkToFit = iEnd Sub- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例21]设置条件格式(FormatConditions属性)Sub FormatConditions()MsgBox "在所选单元格区域中将单元格值小于10的单元格中的文本变为红色"Selection.FormatConditions.Add Type:=xlCellValue, _Operator:=xlLessEqual, Formula1:="10"Selection.FormatConditions(1).Font.ColorIndex = 3MsgBox "恢复原状"Selection.FormatConditions(1).Font.ColorIndex = xlAutomaticEnd Sub- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例22]插入批注(AddComment方法)Sub EnterComment()MsgBox "在当前单元格中输入批注"ActiveCell.AddComment ("Hello")<ment.Visible = TrueEnd Sub- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例23]隐藏/显示单元格批注Sub CellComment()MsgBox "切换当前单元格批注的显示和隐藏状态"<ment.Visible = Not (ment.Visible)End Sub- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例24]改变所选单元格的颜色Sub ChangeColor()Dim iro As IntegerMsgBox "将所选单元格的颜色改为红色"iro = Selection.Interior.ColorIndexSelection.Interior.ColorIndex = 3MsgBox "将所选单元格的颜色改为蓝色"Selection.Interior.Color = RGB(0, 0, 255)MsgBox "恢复原状"Selection.Interior.ColorIndex = iroEnd Sub- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例25]改变单元格的图案Sub ChangePattern()Dim p, pc, iMsgBox "依Pattern常数值的顺序改变所选单元格的图案"p = Selection.Interior.Patternpc = Selection.Interior.PatternColorIndexFor i = 9 To 16With Selection.Interior.Pattern = i.PatternColor = RGB(255, 0, 0)End WithMsgBox "常数值 " & iNext iMsgBox "恢复原状"Selection.Interior.Pattern = pSelection.Interior.PatternColorIndex = pcEnd Sub- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例26]合并单元格Sub MergeCells()MsgBox "合并单元格A2:C2,并将文本设为居中对齐"Range("A2:C2").SelectWith Selection.MergeCells = True.HorizontalAlignment = xlCenterEnd WithEnd Sub- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例27]限制单元格移动的范围Sub ScrollArea1()MsgBox "将单元格的移动范围限制在单元格区域B2:D6中"ActiveSheet.ScrollArea = "B2:D6"End SubSub ScrollArea2()MsgBox "解除移动范围限制"ActiveSheet.ScrollArea = ""End Sub- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例28]获取单元格的位置(Address属性)Sub GetAddress()MsgBox "显示所选单元格区域的地址"MsgBox "绝对地址:" & Selection.AddressMsgBox "行的绝对地址:" & Selection.Address(RowAbsolute:=False)MsgBox "列的绝对地址:" & Selection.Address(ColumnAbsolute:=False)MsgBox "以R1C1形式显示:" & Selection.Address(ReferenceStyle:=xlR1C1)MsgBox "相对地址:" & Selection.Address(False, False)End Sub- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例29]删除单元格区域(Delete方法)Sub DeleteRange()MsgBox "删除单元格区域C2:D6后,右侧的单元格向左移动"ActiveSheet.Range("C2:D6").Delete (xlShiftToLeft)End Sub
小结下面对Range对象的一些常用属性和方法进行简单的小结。1、Activate与Select试验下面的过程:Sub SelectAndActivate()Range("B3:E10").SelectRange("C5").ActivateEnd Sub其结果如下图所示:图05-01:Select与ActivateSelection指单元格区域B3:E10,而ActiveCell则是单元格C5;ActiveCell代表单个的单元格,而Selection则可以代表单个单元格,也可以代表单元格区域。2、Range属性可以使用Application对象的Range属性引用Range对象,如Application.Range(&#21;) &#8216;代表当前工作表中的单元格B2若引用当前工作表中的单元格,也可以忽略前面的Application对象。Range(&#&#8221;) &#8216;代表当前工作表中的单元格区域A1:D10Range(&#,C1:C10,E1:E10&#8221;) &#8216;代表当前工作表中非连续的三个区域组成的单元格区域Range属性也接受指向单元格区域对角的两个参数,如:Range(&#21;,&#21;) &#8216;代表单元格区域A1:D10当然,Range属性也接受单元格区域名称,如:Range(&#8220;Data&#8221;) &#8216;代表名为Data的数据区域Range属性的参数可以是对象也可以是字符串,如:Range(&#21;,Range(&#8220;LastCell&#8221;))3、单元格引用的快捷方式可以在引用区域两侧加上方括号来快速引用单元格区域,如:[B2][A1:D10][A1:A10,C1:C10,E1:E10][Data]但其引用的是绝对区域。4、Cells属性可以使用Cells属性来引用Range对象。如:ActiveSheet.CellsApplication.Cells &#8216;引用当前工作表中的所有单元格Cell(2,2)Cell(2,&#8221;B&#8221;) &#8216;引用单元格B2Range(Cells(1,1),Cells(10,5)) &#8216;引用单元格区域A1:E10若想在一个单元格区域中循环时,使用Cells属性是很方便的。也可以使用Cells属性进行相对引用,如:Range(&#&#8221;).Cells(2,3) &#8216;表示引用单元格区域D10:G20中第2行第3列的单元格,即单元格F11也可使用语句:Range(&#21;).Cells(2,3)达到同样的引用效果。5、Offset属性Offset属性基于当前单元格按所给参数进行偏移,与Cells属性不同的是,它基于0即基准单元格为0,如:Range(&#21;).Cells(1,1)和Range(&#21;).Offset(0,0)都表示单元格A10当想引用于基准单元格区域同样大小的单元格区域时,则Offset属性是有用的。6、Resize属性可使用Resize属性获取相对于原单元格区域左上角单元格指定大小的区域。7、SpecialCells方法SpecialCells方法对应于&#8220;定位条件&#8221;对话框,如图05-02所示:图05-02:&#8220;定位条件&#8221;对话框8、CurrentRegion属性使用CurrentRegion属性可以选取当前单元格所在区域,即周围是空行和空列所围成的矩形区域,等价于&#8220;Ctrl+Shift+*&#8221;快捷键。9、End属性End属性所代表的操作等价于&#8220;Ctrl+方向箭&#8221;的操作,使用常量xlUp、xlDown、xlToLeft和xlToRight分别代表上、下、左、右箭。10、Columns属性和Rows属性Columns属性和Rows属性分别返回单元格区域中的所有列和所有行。11、Areas集合在多个非连续的单元格区域中使用Columns属性和Rows属性时,只是返回第一个区域的行或列,如:Range(&#,C6:D10,E11:F15&#8221;).Rows.Count将返回5。此时应使用Areas集合来返回区域中每个块的地址,如:For Each Rng In Range(&#,C6:D10,E11:F15&#8221;).AreasMsgBox Rng.AddressNext Rng12、Union方法和Intersect方法当想从两个或多个单元格区域中生成一个单元格区域时,使用Union方法;当找到两个或多个单元格区域共同拥有的单元格区域时,使用Intersect方法。
TA的最新馆藏[转]&[转]&[转]&[转]&[转]&}

我要回帖

更多关于 excel 2010 vba 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信