本帖最后由 funfox 于 2015-1-29 20:31 编辑
小弟并非程序员,如解释有误,还请各位高手大力地加以指正!!! 献丑了@@
Step1:请按F2,弹出「浏览对象」 Step2:单击对象类别列表(中间列表框框的左侧框),找worksheets对象类别 Step3:单击所属对象列表(中间列表框框的右侧框),找Item Step4:最下方框框有个说明栏 PropertyItem(Index) As Object 只读 Excel.Worksheets的成员
Part1:说理
1.A:属性、对象、变量,数据型态 Property 对象属性(如:ActiveSheet) as 数据型态
数据型态Object:Object只是系统数据型态的关键词,但非明确对象型态,并没有相对应的链接库可供参照,故当键入属性引用字符『.』时,不会自动产生任何提示,此时按<Ctrl+J>或<Alt+ →>,有时弹出的不是你要的(<AllLibraries>.< globals>的子对象清单),有时却什么都弹不出。 你的问题1、2、4,属此范畴
说明如下:
※ Sheets(1) 返回一个Object,非明确对象型态。 Sheets(1) = Sheets.Item(1) Property Item as Object 则:Object. ‘不会自动产生提示 只是程序设计人员知道Sheets(1)的返回结果是张Worksheet,不是张Chart 但是计算机可能认为返回的对象,是个像Range之类的东西,因为Object就是不定态,什么对象都能引
就如同:asObject、asVariant Dim aVar as Object Set aVar = Sheets(1) aVar. ‘不会产生任何提示,道理Sheets(1)是与相同的
Dim aVar as Variant Set aVar = Sheets(1) aVar. ‘不会产生任何提示,道理是雷同的(但成因并不完全一样)
‘下列例子将产生自动提示 Dim aVar As Worksheet aVar. ‘将产生自动提示 因为计算机明确知道,变量aVar是Worksheet,不是Chart、Range之类的东西,而Worksheet对象类别有属性可引,就会产生自动提示 故此,不论SetaVar = Sheets(1) 有无,aVar.都会自动提示
1.A结语: 产生自动提示的原因:对象型态明确,且具有属性引用字符『.』 只有计算机知道,该 变量/对象/属性 明确的对象型态时,会有; 而与有无指定、引用、变量名称、程序设计人员知不知道,无关,此时则不弹出。
1.B worksheets() =worksheets.item() Property Item as Object 因为worksheets()可返回的对象,有好几种,只有Object、Variant能用来定义该项属性(Item)的对象型态,供Item返回多种不尽同类的物件给worksheets。 所以worksheets(n)一定是Object,详见下表XlSheetType 列举 详细请试试 Sheets.Add[Before],[After],[Count],[Type] 的功能 XlSheetType,则为[Type]所引入的常数 XlSheetType 列举
名称
|
值
|
描述
|
xlChart
|
-4109
|
图表
|
xlDialogSheet
|
-4116
|
对话框表
|
xlExcel4IntlMacroSheet
|
4
|
Excel 版本 4 国际宏表
|
xlExcel4MacroSheet
|
3
|
Excel 版本 4 宏表
|
xlWorksheet
|
-4167
|
工作表
|
1.B结语: worksheets()、Sheets() 在计算机的眼中,他们可能是:图表、对话框表、工作表等等,自然不知道要去链接库叫哪种对象型态的子对象列表来给你用,更别说自动弹出
PS:小弟很好奇,Excel版本 4 国际宏表、Excel 版本 4 宏表,这两项的对象型态在哪边?
1.C 自动弹出的列表 功能:自动引出目前对象的属性列表,编写程序比较快 清单来源:目前输入中的对象,其对象型态的属性列表 如: Range(“A1”).Cells. ‘自动弹出Range对象型态的属性列表 因为目前输入中的对象Range(“A1”)的属性,对象Cells,其型态是Range PropertyCells As Range 只读 Excel.Range 的成员
弹出的情况,与清单的内容: 自动弹出: 目前输入中的对象,其对象型态的属性列表
不自动弹出:采用<Ctrl+J>或<Alt+ →>弹出 如果是正在输入变量,且尚未输入完整,则弹出已宣告的变量、部分系统关键词或已知数据型态的列表。 必然弹出<All Libraries>.< globals>的子对象清单。因为此时,计算机智能侦测到的「目前输入中的对象」,其属性,是<AllLibraries>中的其中一个,当然<globals>子对象清单的内容,包山包海什么都有,因为是在<All Libraries>中啊啊啊啊啊! 此时,对象基本上已输入完整,且计算机侦测并无输入其属性的需求,就是没有『.』
无法弹出:采用<Ctrl+J>或<Alt+ →>,只会听到『咚咚』 该对象或其父对象,对象数据型态必为:Object、Variant或数字数据
1.C结语: 自动弹出的列表,只存在明确对象输入完后有引用其属性时会有 语句侦错应用: a)如在清单无法自动弹出时,或弹出的清单与预期的不相同。 请检查是否已输入 ”.” ?变量名称是否有输入完整或有误? b)如在清单无法弹出时,采用<Ctrl+J>或<Alt+ →>,只听到咚咚。 该对象或其父对象,对象数据型态必为:Object、Variant或数字数据? 所宣告的对象型态拼字是否正确?变量是否有宣告?
实例:曾经看过这种写法(做过这种事的人一定不少,我也做过) Dim i As Long, v As Long For i = 1 To Sheets.Count v = Sheet & i.Cells(1, 1).Value Next
那个『Sheet&i.』一定不会弹出清单来的…,因为根本就用错… 这种将字符串连接完后,直接当CodeName用,完全不管数据型态的例子实在是很多
Part1 End
1. Sheet(1).range("A1") 正确的应该是,Sheets(1).range("A1")
Sheets(1):返回非明确型态的对象,见1.A结语 range("A1"):虽然 PropertyRange AS Range,是个明确对象型态的数据 但是这段程序代码的父对象是一个非明确型态的对象,所以不会提示,只会听到咚咚(按<Alt+ →>)。见1.C无法弹出
2. ActiveSheet '此对象,系统不提示方法和属性。怎么破?(同样要命,放在第二位)
ActiveSheet:返回非明确型态的对象,见1.A结语 怎么破:见1.A结语上方三行 Dim aVar As Worksheet aVar. ‘将产生自动提示
3. workbooks(1). '系统提示方法和属性 workbooks(1) '按Ctr+j, 系统提示的方法和属性不一样(或不完全一样) 这是为什么?
workbooks(1)=Workbooks. Item(1) Property Item(Index) As Workbook 返回对象的对象型态:Workbook,对象型态明确
故workbooks(1).弹出Workbook的子对象清单。见1.A结语
workbooks(1):返回对象Workbook,本身为完整对象叙述,无属性符号『.』,不需要属性提示。硬要引入,则弹出<All Libraries>.< globals>的子对象清单。见1.A结语
4. worksheets(1). '系统不会提示方法和属性 worksheets(1) ’ Ctr+j, 系统提示方法和属性,这是为什么?
worksheets(1). 返回非明确型态的对象,见1.A结语 worksheets(1) 引入<AllLibraries>.< globals>的子对象清单。见1.A结语
5. Range("A1"). '系统提示方法和属性 Range("A1") '按Ctr+j, 系统提示的方法和属性不一样(或不完全一样) 这是为什么?
Range("A1"). :同3.
Range("A1") :引入<AllLibraries>.< globals>的子对象清单。见1.A结语
|