GetObject 函数的使用

threejs查找场景的某个模型 Threejs和前端DOM一样,可以通过一个方法查找树结构父元素的某个后代对象,对于普通前端而言可以通过name或id等方式查找一个或多个DOM元素,Threejs同样可以通过一些方法查找一个模型树中的某个节点。更多的查找方法和方法的使用细节可以查看基类Object3D。看到Object3D的.getObjectByName()方法,如果已有前端基础,很容易联想到DOM的一些方法。 阅读详情
AI摘要

本文介绍如何利用VBA中的GetObject函数访问和操作ActiveX对象,包括如何指定路径和对象类型来启动特定应用程序和文件,以及如何通过示例代码展示在Excel中使用此函数的方法。

GetObject 函数ActiveX 对象的引用

返回文件中的 ActiveX 对象的引用。

语法

GetObject([pathname] [, class])

GetObject 函数的语法包含下面几个命名参数:

部分 描述
pathname 可选的;Variant (String)。包含待检索对象的文件的全路径和名称。如果省略 pathname,则 class 是必需的。
class 可选的;Variant (String)。代表该对象的类的字符串。


其中,class 参数的语法格式为 appname.objecttype,且语法的各个部分如下:

部分 描述
appname 必需的;Variant (String)。提供该对象的应用程序名称。
objecttype 必需的;Variant (String)。待创建对象的类型或类。


说明

使用 GetObject 函数可以访问文件中的 ActiveX 对象,而且可以将该对象赋给对象变量。可以使用 Set 语句将 GetObject 返回的对象赋给对象变量。例如:

Dim CADObject As Object
Set CADObject = GetObject("C:\CAD\SCHEMA.CAD")

当执行上述代码时,就会启动与指定的 pathname 相关联的应用程序,同时激活指定文件中的对象。

如果 pathname 是一个零长度的字符串 (""),则 GetObject 返回指定类型的新的对象实例。如果省略了 pathname 参数,则 GetObject 返回指定类型的当前活动的对象。如果当前没有指定类型的对象,就会出错。

有些应用程序允许只激活文件的一部分,其方法是在文件名后加上一个惊叹号 (!) 以及用于标识想要激活的文件部分的字符串。关于如何创建这种字符串的信息,请参阅有关应用程序创建对象的文档。

例如,在绘图应用程序中,一个存放在文件中的图可能有多层。可以使用下述代码来激活图中被称为 SCHEMA.CAD 的层:

Set LayerObject = GetObject("C:\CAD\SCHEMA.CAD!Layer3")

如果不指定对象的 class,则自动化会根据所提供的文件名,来确定被启动的应用程序以及被激活的对象。不过,有些文件可能不止支持一种对象类。例如,图片可能支持三种不同类型的对象:Application 对象,Drawing 对象,以及 Toolbar 对象,所有这些都是同一个文件中的一部分。为了说明要具体激活文件中的哪种对象,就应使用这个可选的 class 参数。例如:

Dim MyObject As Object
Set MyObject = GetObject("C:\DRAWINGS\SAMPLE.DRW", "FIGMENT.DRAWING")

在上述例子中,FIGMENT 是一个绘图应用程序的名称,而 DRAWING 则是它支持的一种对象类型。

对象被激活之后,就可以在代码中使用所定义的对象变量来引用它。在前面的例子中,可以使用对象变量 MyObject 来访问这个新对象的属性和方法。例如:

MyObject.Line 9, 90
MyObject.InsertText 9, 100, "Hello, world."
MyObject.SaveAs "C:\DRAWINGS\SAMPLE.DRW"

注意 当对象当前已有实例,或要创建已加载的文件的对象时,就使用 GetObject 函数。如果对象当前还没有实例,或不想启动已加载文件的对象,则应使用 CreateObject 函数。

如果对象已注册为单个实例的对象,则不管执行多少次 CreateObject,都只能创建该对象的一个实例。若使用单个实例对象,当使用零长度字符串 ("") 语法调用时,GetObject 总是返回同一个实例,而若省略 pathname 参数,就会出错。不能使用 GetObject 来获取 Visual Basic 创建的类的引用。

VBA里的GetObject 函数示例

该示例使用 GetObject 函数来获取对指定的 Microsoft Excel 的工作表 (MyXL) 的引用。它使用工作表的 Application 属性来显示或关闭 Microsoft Excel 等等。DetectExcel Sub 过程通过调用两个 API 函数,来查找 Microsoft Excel。如果 Microsoft Excel 正在运行,则将其放入运行对象表(Running Object Table)中。如果 Microsoft Excel 不在运行,则第一次调用 GetObject 将导致错误。在本例中,出现该错误则把 ExcelWasNotRunning 标志设为 True。第二次调用 GetObject 是指定要打开的一个文件。如果 Microsoft Excel 不在运行,则这个第二次的调用将启动该程序,并返回一个指定文件 (mytest.xls) 所对应的工作表的引用。该文件必须位于指定的位置;否则将产生 Visual Basic 错误及自动化错误。随后的示例代码将 Microsoft Excel 及包含指定工作表的窗口设为可见。最后,如果在此前没有 Microsoft Excel 的副本在运行,代码就使用 Application 对象的 Quit 方法来关闭 Microsoft Excel。如果该应用程序原来就在运行,则不要试图关闭它。引用本身在设为 Nothing 后被释放。

'声明必要的 API 例程:
Declare Function FindWindow Lib "user32" Alias _
"FindWindowA" (ByVal lpClassName as String, _
               ByVal lpWindowName As Long) As Long

Declare Function SendMessage Lib "user32" Alias _
"SendMessageA" (ByVal hWnd as Long,ByVal wMsg as Long _
               ByVal wParam as Long, _
               ByVal lParam As Long) As Long

Sub GetExcel()
   Dim MyXL As Object   '用于存放Microsoft Excel 引用的变量。
   Dim ExcelWasNotRunning As Boolean   '用于最后释放的标记。

'测试 Microsoft Excel 的副本是否在运行。
   On Error Resume Next   '延迟错误捕获。
'不带第一个参数调用 Getobject 函数将返回对该应用程序的实例的引用。如果该应用程序不在运行,则会产生错误。
   Set MyXL = Getobject(, "Excel.Application")
   If Err.Number <> 0 Then ExcelWasNotRunning = True
   Err.Clear   '如果发生错误则要清除 Err 对象。
   DetectExcel    '检测 Microsoft Excel。如果 Microsoft Excel 在运行,则将其加入运行对象表。
   Set MyXL = Getobject("c:\vb4\MYTEST.XLS")    '将对象变量设为对要看的文件的引用。

'设置其 Application 属性,显示 Microsoft Excel。然后使用 MyXL 对象引用的 Windows 集合显示包含该文件的实际窗口。
   MyXL.Application.Visible = True
   MyXL.Parent.Windows(1).Visible = True
   '在此处对文件进行操作。
   ' ...
'如果在启动时,Microsoft Excel 的这份副本不在运行中,则使用 Application 属性的 Quit 方法来关闭它。
'注意,当试图退出 Microsoft Excel 时,标题栏会闪烁,并显示一条消息询问是否保存所加载的文件。
   If ExcelWasNotRunning = True Then 
      MyXL.Application.Quit
   End IF
   Set MyXL = Nothing   '释放对该应用程序
                        '和电子数据表的引用。
End Sub

Sub DetectExcel()   '该过程检测并登记正在运行的 Excel。
   Const WM_USER = 1024
   Dim hWnd As Long
'如果 Excel 在运行,则该 API 调用将返回其句柄。
   hWnd = FindWindow("XLMAIN", 0)
   If hWnd = 0 Then   '0 表示没有 Excel 在运行。
      Exit Sub
   Else           
      SendMessage hWnd, WM_USER + 18, 0, 0    'Excel 在运行,因此可以使用 SendMessage API 函数将其放入运行对象表。
   End If
End Sub

解决用GetObject打开的工作表修改后保存,再次打开工作表不显示

通过getobject打开的Excel文件只要被修改(写)并保存后,就只能在VBE中看到,但用户界面却看不到。就算你重启Excel,再去手动打开此文件,也是什么都看不到。不保存就没有这个问题!如果要解决这个问题,必须在wb.close 前加一句Application.Windows(wb.name).Visible = True。

Private Sub CommandButton1_Click()
    On Error Resume Next
    文件目录 = ThisWorkbook.Path & "\Excel\"
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set fldr = fso.GetFolder(文件目录)
    For Each s In fldr.Files
        With GetObject(文件目录 & s.Name)
            .Sheets(1).Cells.Replace What:=" ", Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False    '随便做一点改动
            .SaveAs ThisWorkbook.Path & "\Excel_修改后\" & s.Name    '保存
            .Windows(1).Visible = True    '工作表可见
            .Close (True)    '保存改动
        End With
    Next
End Sub


SAP UI5 框架 Manifest.js 里 getObject 函数的实现解析 这段代码的主要作用是通过给定的路径(字符串形式)从一个对象中获取其子成员的值。路径可以是以斜线(“/”)开始,也可以直接是对象的属性名。如果是以斜线开始的路径,该函数会递归地在对象中查找对应的属性值;在寻找路径时,代码还进行了一些错误处理,防止访问到非对象类型的属性,以及防止访问对象的原生属性。这个函数在处理复杂的嵌套对象时非常有用,尤其是在处理如 JSON 或 XML 这样的数据结构时,可以方便地通过路径获取到深层次的数据。的 JavaScript 函数,主要用于通过给定的路径访问对象的子成员。 阅读详情

相关推荐

REST-meta-MDD Data总结

sMRI数据使用:nwc1、nwc2、nwc3(同样数据集相关论坛中有相关信息指向需要使用wc1、wc2、wc3)多方咨询与讨论后决定使用nwc数据,这里说明wc数据相对wc数据要大的多如wc1的大小为1.33GB,而nwc1的数据却有6.90GB。VBM文件:/REST-meta-MDD/Sharing/REST-meta-MDD-VBM- phase1 -Sharing.tar.gz。1、Excel中的表型信息:1-男,2-女;-9999或空白表示缺少数据。

2404_88295660的博客 1532

VB6 Getobject(,“excel.application“) 错误429 ActiveX 部件无法创建对象

VB6 IDE中调试的时候发现 Getobject(,“excel.application”) 的使用时总是无法获取打开着的EXCEL对象 报错情况: err.description ActiveX 部件无法创建对象 err.number 429 可疑惑是IDE生成的EXE文件是可以正常运行的 这时我头大了, 最害怕的是微软通过某些补丁把这个ActiveX部件创建对象功能去掉了. 那以后怎么搞生产力软件? 这个可是交通大道哦! 但又试了下Createobject(“excel.application”)

weixin_44462444的博客 7540

模仿学习(Imitation Learning)概述

什么是模仿学习呢?简单来说,模仿学习(Imitation Learning),就是要训练机器能够复制人类的连续动作,进而达到模仿的目的。其实,Imitation Learning的实用性很高,假设今天有一个训练场景,你不知道该怎么定奖励值(reward),但是你可以收集到专家的示范数据(expert demonstration data),你就可以考虑用Imitation Learning这个方法。因此,模仿学习也被寄予很高的期待,成为下一代强人工智能的关键技术。......

qq_22749225的博客 2万+

VBA基础语法:GetObject函数

GetObject 函数 返回文件中的 ActiveX 对象的引用。 语法 GetObject([pathname] [, class]) GetObject 函数的语法包含下面几个命名参数: 部分 描述 pathname 可选的;Variant (String)。包含待检索对象的文件的全路径和名称。如果省略 pathname,则 class 是必需的。 class ...

blog 1万+

通达信烽火起爆指标公式

STICKLINE(IF(起爆666,-120,0),+33,0,3.4,0),COLOR007777;STICKLINE(IF(起爆666,-120,0),+33,0,1.8,0),COLOR009999;STICKLINE(IF(起爆666,-120,0),+33,0,1.2,0),COLOR00BBBB;STICKLINE(IF(起爆666,-120,0),+33,0,0.6,0),COLOR00DDDD;STICKLINE(起爆666,0,100,9999,0)*起爆,COLOR000000;

zhibiaogong的博客 3876

基于紫光展锐平台的音频调用到hal层逻辑

基于紫光展锐平台的音频调用到hal层逻辑 1、数据流程图 AudioPolicyService和AudioFlinger的创建: 这两个服务都在audioserver中启动,文件路径: frameworks/av/media/audioserver/main_audioserver.cpp 从AudioFlinger和AudioPolicyService的创建,到output的打开,以及AudioFlinger开始往底层写入数据的具体流程如下图: #mermaid-svg-kjHL4XWwkQXN6NdA

weixin_55053963的博客 1355

GetObject函数用法详解

GetObject函数用于从指定的图形对象中获取信息,原型如下: int GetObject( __in HGDIOBJ hgdiobj, //图形对象的句柄 __in int cbBuffer, //将写入到缓冲区中的图形对象信息的字节数 __out LPVOID lpvObject //指向接收图形对象信息的缓冲区的指针 ...

CherishPrecious的博客 1万+

面向网络攻击行为可视化分析系统实现【WebSocket + 可视化】

本系统主要应用于网站运维管理,它解决了网站运维人员排查网络攻击行为复杂且繁琐等问题,提高了运维人员网络安全分析的效率和准确性。

oNew_Lifeo的博客 1620

[转载]GetObject 函数

GetObject 函数 JScript 语言参考 GetObject 函数 从文件中返回对 Automation 对象 的一个引用。 GetObject([pathname] [, cla...

congji3817的博客 478

永磁同步电机无传感器控制:HFI与ESMO技术详解

高频注入(HFI)和增强型滑模观测器(ESMO)是现代永磁同步电机(PMSM)无传感器控制的核心技术。HFI通过注入高频信号利用电机凸极效应获取转子位置,而ESMO则通过改进传统滑模观测器,有效抑制抖振并提升动态响应。这两种技术的结合特别适用于零低速区域的位置估计,在工业伺服、电动汽车等领域有广泛应用。方波高频注入作为实现方案之一,具有计算量小、实现简单的特点,配合自适应滤波等信号处理技术,可以在保证精度的同时降低系统成本。

weixin_29183637的博客 352

GNSS接收机性能测试指标详解:TTFF、位置精度、灵敏度等关键参数如何评估

本文详细解析了GNSS接收机性能测试的关键指标,包括首次定位时间(TTFF)、位置精度、灵敏度等,帮助工程师系统评估接收机性能。通过多频段协同定位和载波相位测试等技术,提升定位精度至亚米级。同时,介绍了灵敏度测试的极限挑战和授时精度的专业测试方案,为GNSS接收机的性能优化提供实用指导。

cuda7parallel的博客 961

GetObject函数

GetObject函数用于从指定的图形对象中获取信息,原型如下: int GetObject(   HGDIOBJ hgdiobj,  // handle to graphics object   int cbBuffer,     // size of buffer for object information   LPVOID

baidu_28053127的博客 1030

【服务器电源架构与关键技术发展趋势】深度解析架构、方案、玩家与未来趋势

技术维度:台达 / 光宝在高功率密度(97%+ 效率)和垂直整合上领先,大陆厂商(麦格米特 / 欧陆通)在成本控制和快速响应上更优,国际厂商(英飞凌)聚焦核心器件突破。 客户维度:台达绑定英伟达核心供应链,麦格米特 / 欧陆通兼顾国内外客户,光宝 / 中恒电气侧重云端与互联网厂商。 趋势适配:所有厂商均加速布局 800V 高压架构、液冷技术和高功率 Power Shelf,以应对 AI 服务器单柜功率从 10kW→200kW 的升级需求。

昔时扬尘处 723

VBS函数应用--getobject的使用获得Automation对象

返回对文件中 Automation 对象的引用。 GetObject([pathname] [, class]) 参数 Pathname 可选项。字符串,包含待检索对象的文件的完整路径和名称。如果省略 pathname 则必须有 class。 Class 可选项。字符串,对象的类。 class 参数的语法格式为 appname.objectype,其中包括以下部分: 参数 appname 必选项。...

weixin_34288121的博客 538

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

GetObject函数的理解、说明

函数功能:该函数得到指定图形对象的信息,根据图形对象,函数把填满的或结构,或表项(用于逻辑调色板)数目放入一个指定的缓冲区。   函数原型: int GetObject(HGDIOBJ hgdiobj, int cbBuffer, LPVOID lpvObject);   参数:   hgdiobj:指向感兴趣的图形对象的句柄,它可以是这样的一个句柄:...

weixin_34007886的博客 579

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

《Windows API巡礼》のGetObject函数和GradientFill函数

<br />GetObject函数用于从指定的图形对象中获取信息,原型如下:<br />int GetObject( __in HGDIOBJ hgdiobj, __in int cbBuffer, __out LPVOID lpvObject );<br /><br />其中<br />(1)参数hgdiobj是图形对象的句柄,图形对象可以是如下几种:逻辑位图、刷子、字体、调色板、画笔或者由函数CreateDIBSection创建的设备无关位图;<br />(2)参数cbBu

ASCE1885 2016

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

GetObject

 GetObject 该函数得到指定图形对象的信息,根据图形对象,函数把填充的 BITMAP, DIBSECTION, LOGBRUSH,LOGFONT, 或 LOGPEN 结构体放入一个指定的缓冲区。 原型: int GetObject(HGDIOBJ hgdiobj, int cbBuffer, LPVOID lpvObject);  参数: hgdiobj:[in

u013624184的专栏 940
上一篇: EXCEL VBA 文件夹操作——批量添加指定文件夹的图片
下一篇: EXCEL判断字符串中是否包含某个特定子串的公式
foreverfall
博客等级 码龄18年 46粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值