欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

​VBS教程:VBScript 语句-Set 语句 有大用 有大大用

VBS教程:VBScript 语句-Set 语句


Set 语句

将对象引用赋给一个variable或property,或者将对象引用与事件关联。

Set objectvar = {objectexpression | New classname | Nothing}

-或者-

Set object.eventname = GetRef(procname)

参数

objectvar

必选项,变量或属性名称;符合标准变量命名约定。

objectexpression

可选项,与对象名称一致的Expression,另一个相同object type、函数或方法的已声明变量,它们返回相同对象类型的对象。

New

用于创建一个类的新实例的Keyword。如果 objectvar 包含一个对某个对象的引用,当一个新的引用被赋给这个对象之后,则这个引用将被释放。New 关键仅用于创建一个class的实例。

classname

可选项. 创建的类名称。使用 Class 语句定义类及其语句。

Nothing

可选项。断开 objectvar 与任何指定对象或类的关联。当没有其他变量引用前面的引用对象时,将 objectvar 赋值为 Nothing 以释放与前面的引用对象相关联的系统或内存资源。

object

必选项。与 event 相关联的对象名称。

event

必选项。函数作用域的事件名称。

procname

必选项。包含与event 相关联的 Sub 或 Function 名称的字符串。

说明

为了使其有效,objectvar 必须与赋值的对象类型相一致。

DimPrivatePublic, 或 ReDim 语句仅声明一个引用对象的变量。在使用. Set 语句为一个具体对象赋值之前,没有实际对象可以引用。

通常, 当您使用 Set 语句将一个对象引用赋给一个变量之前,不会创建那个变量的对象的副本。实际上,只创建了一个对象的引用。多个引用对象变量可以引用相同的对象。因为这些变量都是对象的引用,而不是对对象副本的引用,因此对象中所作的任何变化都可以在引用该对象的所有变量中反映出来。

Function ShowFreeSpace(drvPath)   Dim fso, d, s   Set fso = CreateObject("Scripting.FileSystemObject")   Set d = fso.GetDrive(fso.GetDriveName(drvPath))   s = "Drive " & UCase(drvPath) & " - "    s = s & d.VolumeName  & "<BR>"   s = s & "Free Space: " & FormatNumber(d.FreeSpace/1024, 0)    s = s & " Kbytes"   ShowFreeSpace = sEnd Function

利用 New 关键词,您可以随时创建一个类的实例,并将一个对象引用变量赋值给它。赋给类的实例的变量一定利用 Dim (或相似的语句)语句事先已经声明。

有关使用 Set 语句关联一个过程与对象的详细信息,请参考 GetRef 函数的文档。

Set 语句

将对象引用赋给一个variable或property,或者将对象引用与事件关联。

Set objectvar = {objectexpression | New classname | Nothing}

-或者-

Set object.eventname = GetRef(procname)

参数

objectvar

必选项,变量或属性名称;符合标准变量命名约定。

objectexpression

可选项,与对象名称一致的Expression,另一个相同object type、函数或方法的已声明变量,它们返回相同对象类型的对象。

New

用于创建一个类的新实例的Keyword。如果 objectvar 包含一个对某个对象的引用,当一个新的引用被赋给这个对象之后,则这个引用将被释放。New 关键仅用于创建一个class的实例。

classname

可选项. 创建的类名称。使用 Class 语句定义类及其语句。

Nothing

可选项。断开 objectvar 与任何指定对象或类的关联。当没有其他变量引用前面的引用对象时,将 objectvar 赋值为 Nothing 以释放与前面的引用对象相关联的系统或内存资源。

object

必选项。与 event 相关联的对象名称。

event

必选项。函数作用域的事件名称。

procname

必选项。包含与event 相关联的 Sub 或 Function 名称的字符串。

说明

为了使其有效,objectvar 必须与赋值的对象类型相一致。

DimPrivatePublic, 或 ReDim 语句仅声明一个引用对象的变量。在使用. Set 语句为一个具体对象赋值之前,没有实际对象可以引用。

通常, 当您使用 Set 语句将一个对象引用赋给一个变量之前,不会创建那个变量的对象的副本。实际上,只创建了一个对象的引用。多个引用对象变量可以引用相同的对象。因为这些变量都是对象的引用,而不是对对象副本的引用,因此对象中所作的任何变化都可以在引用该对象的所有变量中反映出来。

Function ShowFreeSpace(drvPath)   Dim fso, d, s   Set fso = CreateObject("Scripting.FileSystemObject")   Set d = fso.GetDrive(fso.GetDriveName(drvPath))   s = "Drive " & UCase(drvPath) & " - "    s = s & d.VolumeName  & "<BR>"   s = s & "Free Space: " & FormatNumber(d.FreeSpace/1024, 0)    s = s & " Kbytes"   ShowFreeSpace = sEnd Function

利用 New 关键词,您可以随时创建一个类的实例,并将一个对象引用变量赋值给它。赋给类的实例的变量一定利用 Dim (或相似的语句)语句事先已经声明。

有关使用 Set 语句关联一个过程与对象的详细信息,请参考 GetRef 函数的文档。


来自  https://www.xp.cn/b.php/149.html



VBS学习笔记(1): Set的取舍


这个系列从一个简单的问题开始吧—— "赋值语句中的是否要用set关键字?" 你有答案了吗?暂且不说要或者不要,哪一种更好。还没有走那么远。只是问你,你确信的问题的答案“正确”吗?不要急于辩解,看看下面的代码吧。

Dim WshShell, WshSysEnv, ProcArc

 

set WshShell = WScript.CreateObject("WScript.Shell")

 

set WshSysEnv = WshShell.Environment("System")

 

set ProcArc = WshSysEnv("PROCESSOR_ARCHITECTURE")

 

WScript.Echo ProcArc


 

你觉得这一下段代码会有错误吗?。。。它真有错误!!!

执行完以上代码,你会得到如下错误:“...Object Required:'[string:"X86"]'...”

我在微软官方网站上看到的是“set将对象引用赋给变量或属性”,那么如果将“非对象引用赋给变量或属性”而且用了set关键字,会咋样呢?你答对了,就是上面的错误。

我总结一下,可能不够专业,见笑:“对象要赋值给非对象的变量,此时必须用set;而非对象的要赋值给对象,此时一定不能用set;set后面跟的的变量则总是被解释器看作是非对象的变量”。

 

终于找到依据了:Set is a special VBScript statement that is used only when creating an object reference. If you use Set for other purposes, such as assigning a value to a variable, a run-time error will occur.(引自:http://technet.microsoft.com/en-us/library/ee198850.aspx


来自 https://blog.csdn.net/ceachy/article/details/6186666



普通分类: