技术分享(求指教): 针对office开发中判断对象成员是否可用的一个函数

bcrun 2013-02-27 01:06:26
加精
其实可能是一个多余的东西,估计已经有现成的更好的办法.不过因为是有个OFFICE插件程序急着要改,先急着写个用着再说.谁有好的,请指点,马上给分:)

Sub Macro1()
If (Not TestObjAvail(Selection.Range, "ShapeRange")) Then
Debug.Print "not avail"
Exit Sub
Else
Debug.Print Selection.Range.ShapeRange.Count
End If

End Sub
'---------------------------------------------------------------------------------------
' 过程名 : TestObjAvail
' 时间 : 2013/2/27
' 作者 : 杨过.网狐.cn(csdn bcrun)
' 功能 : 测试对象变量是否可用,如可用则下一步可访问他的对象成员
' 说明 :
' 备注 : 星辰设计室VB一群:283362041,星辰学园BASIC辅导群:289219875
'---------------------------------------------------------------------------------------

Function TestObjAvail(obj1 As Object, vProp As String) As Boolean
Dim o1 As Object
TestObjAvail = False
On Error GoTo TestObjAvail_Error

Set o1 = CallByName(obj1, vProp, VbGet)
If Not (o1 Is Nothing) Then
TestObjAvail = True

End If
On Error GoTo 0
Exit Function

TestObjAvail_Error:

'MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure TestObjAvail of Module mdlMain"
End Function




...全文
4537 48 打赏 收藏 转发到动态 举报
写回复
用AI写文章
48 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
不会,这个真的不会
liuliupopo 2013-03-06
  • 打赏
  • 举报
回复
学习了!!!!
zhyzhsh 2013-03-06
  • 打赏
  • 举报
回复
引用 11 楼 bcrun 的回复:
补充说明一下,写这代码的直接原因,是因为Selection.Range在2007中能访问,但在WORD2003中时,如果文档中只有简单的文本,则会报这类错误: Error 5852 (应用程序定义或对象定义错误) 其实发帖时还想到了是否能通过tlbinfo之类的办法来做判断,但毕竟不熟那方面的,还需等待高人指点:)
首先要判断当前程序吧,不同Office程序的对象差别很大。接着再判断程序版本,这样写的代码就会比较安全,也比较容易维护。
nettman 2013-03-06
  • 打赏
  • 举报
回复
ljt1235 2013-03-06
  • 打赏
  • 举报
回复
不懂
xslg1314 2013-03-06
  • 打赏
  • 举报
回复
谢谢分享 不错
lrover 2013-03-05
  • 打赏
  • 举报
回复
学习这个方法。
ggxiaomeisk 2013-03-05
  • 打赏
  • 举报
回复
好!!!!!!!
oppo11 2013-03-04
  • 打赏
  • 举报
回复
谢谢分享,我要
TiiiiiiiME 2013-03-03
  • 打赏
  • 举报
回复
飘过,感谢楼主
mimixi666 2013-03-03
  • 打赏
  • 举报
回复
谢谢分享。。。
milaoshu1020 2013-03-02
  • 打赏
  • 举报
回复
也可以利用Debug.Assert来判断是否是调试状态:
Public Function InDebugMode() As Boolean
    Debug.Assert SetTrue(InDebugMode)
End Function

Public Function SetTrue(byref val) As Boolean
    val = True
    SetTrue = True
End Sub
mzxf512 2013-03-02
  • 打赏
  • 举报
回复
好好学习,天天向上
h437134717 2013-03-01
  • 打赏
  • 举报
回复
但是 现在 还要使用这样的么 TestObjAvail = False On Error GoTo TestObjAvail_Error
vansoft 2013-03-01
  • 打赏
  • 举报
回复
从上往下看完了,才明白楼主想干什么。 大概是office不同版本下,某些对象的某些属性时有时无, 所以需要判断一下,CallByName+错误处理是可以做到。 版主提到的tlbinfo是可以的,也就是枚举对象的属性和方法, 就跟VB的IDE中按了F2一样,网站有VB6的代码,你可以做成一个组件, 供你的程序调用就可以了。
leolee82 2013-03-01
  • 打赏
  • 举报
回复
也可以用typename或typevalue判断selection的类型,excel中就这个selection问题多
stevenyou7 2013-03-01
  • 打赏
  • 举报
回复
谢谢楼主分享。。。!
MuTiBingDu 2013-03-01
  • 打赏
  • 举报
回复
说实话 看不懂。。。
bcrun 2013-03-01
  • 打赏
  • 举报
回复
引用 29 楼 h437134717 的回复:
但是 现在 还要使用这样的么 TestObjAvail = False On Error GoTo TestObjAvail_Error
你是和15楼一个意思吗,见19楼
柠檬土豆泥 2013-03-01
  • 打赏
  • 举报
回复
真心说没看懂啊,亲
加载更多回复(19)

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧