明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 11734|回复: 45

在64位cad中用VBA使用通用对话框(CommonDialog)的方法

[复制链接]
发表于 2016-1-10 18:47:14 | 显示全部楼层 |阅读模式
本帖最后由 zzyong00 于 2018-6-16 14:18 编辑

大家知道,在64位cad中用VBA使用系统自带通用对话框(CommonDialog)控件是用不了的,因为这个控件是32位的,64位cad不能使用32位的控件和dll,本人采用activex exe方法,实现了在64位的环境中用VBA对通用对话框进行调用!
首先下载我编写的这个activex exe:,解压,放在任意一个你愿意的文件夹下,
然后,在AutoCAD中打开vba编辑器,把下面的代码复制进编辑器:
  1. Private Sub ss1()
  2. Dim x As New ZZYCommonDialog
  3. Dim bC As Boolean, lFSC As Long, strF() As String, sLD As String
  4.     x.ShowOpen ThisDrawing.Application.HWND32, bC, lFSC, strF, sLD'ThisDrawing.Application.HWND32,如果出错,用0代替

  5.     Debug.Print bC
  6.     If Not bC Then
  7.         Debug.Print lFSC
  8.         Debug.Print strF(0)
  9.         Debug.Print sLD
  10.     End If
  11.     Set x = Nothing
  12. End Sub

  13. Private Sub ss2()
  14. Dim x As New ZZYCommonDialog
  15. Dim bC As Boolean, oC As OLE_COLOR
  16.     x.ShowColor ThisDrawing.Application.HWND32, bC, oC
  17.     Debug.Print bC
  18.     Debug.Print oC

  19.     Set x = Nothing
  20. End Sub
  21. Private Sub ss3()
  22. Dim x As New ZZYCommonDialog
  23. Dim Canceled As Boolean, SelectedFont As String, Bold As Boolean, Italic As Boolean, Size As Integer, Underline As Boolean, StrikeOut As Boolean, Color As Long, FaceName As String

  24.     x.ShowFont ThisDrawing.Application.HWND32, Canceled, SelectedFont, Bold, Italic, Size, Underline, StrikeOut, Color, FaceName

  25.     Debug.Print Canceled, SelectedFont, Bold, Italic, Size, Underline, StrikeOut, Color, FaceName
  26.     Set x = Nothing
  27. End Sub
  28. Private Sub ss4()
  29. Dim x As New ZZYCommonDialog
  30. Dim bC As Boolean, lFSC As Long, strF As String, sLD As String
  31.     x.ShowSave ThisDrawing.Application.HWND32, bC, lFSC, strF, sLD
  32.     Debug.Print bC
  33.     Debug.Print lFSC
  34.     Debug.Print strF
  35.     Debug.Print sLD
  36.     Set x = Nothing
  37. End Sub

再然后,点击VBA编辑器的菜单,“工具”-》“引用”,

出来以下对话框,再点“浏览”,然后出现如下对话框 ,找到刚才你解压的附件的文件夹,选择那个文件“ZZYCommonDialogForVBAx64.exe”(扩展名是exe,不要害怕,是activex exe,Word,excel也是这样的程序)

点“打开”,点“确定”。

如果没有任何提示,恭喜你,你引用成功了,接下来,按F5运行哪几个测试代码就行了,
其中ss1是测试“打开”对话框的,ss2是测试“选择颜色”对话框的,其它自己试吧!

有人试用了,说不支持过滤文件扩展名,所以增加一下这个功能,出个升级版,同时,原版免币!------------------
2018-06-16更新一下,支持选择多个文件,








本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2016-3-25 15:41:38 | 显示全部楼层
我试了,显示
运行时错误‘429’
Activex部件不能创建对象

点评

1.64位系统,64位cad 2.试着先运行一下 ZZYCommonDialogForVBAx64.exe,然后按步骤一步一步做  发表于 2016-3-25 23:16
回复 支持 1 反对 0

使用道具 举报

发表于 2017-12-8 14:58:55 | 显示全部楼层
craig_tao 发表于 2017-11-28 15:57
楼主,您好
我在运行您的程序时发生错误:
运行时错误“438” 对象不支持该属性和方法,请问这是怎么回事 ...

好像是代码里 "ThisDrawing.Application.HWND32"的问题,如果改成"0"的话可以运行成功,但是打开的颜色窗口在左上角,无法操作,不知道楼主这个该怎么解决?
 楼主| 发表于 2020-3-26 15:34:37 | 显示全部楼层
vbslope 发表于 2020-3-25 17:44
你好
“首先下载我编写的这个activex exe:,解压,放在任意一个你愿意的文件夹下”
如果自己编了一个引用 ...

https://blog.csdn.net/hmm1208/article/details/25836837
看一下这篇文章,了解一下activex组件的注册。
原则上,放在任何文件夹下都可以,但需要注册到注册表里
 楼主| 发表于 2016-1-10 19:12:49 | 显示全部楼层

来个gif演示

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2016-1-10 21:02:23 | 显示全部楼层
还在只有楼主活跃在vba版了

点评

是的,几乎没什么 人了  发表于 2016-1-10 21:29
发表于 2016-1-28 22:06:12 | 显示全部楼层
前几天才把这个问题搞定,VB在64位下,也无法添加这个部件,现在搞定了
 楼主| 发表于 2016-1-28 22:22:26 | 显示全部楼层
yucc 发表于 2016-1-28 22:06
前几天才把这个问题搞定,VB在64位下,也无法添加这个部件,现在搞定了

搞定什么 了
发表于 2016-1-28 22:22:54 | 显示全部楼层
zzyong00 发表于 2016-1-28 22:22
搞定什么 了

可以是这个部件了

点评

commondialog?  发表于 2016-1-28 22:25
发表于 2016-1-30 09:24:53 | 显示全部楼层
哇,这个厉害。我赶紧试试。

点评

结果如何啊?  发表于 2016-1-30 20:57
发表于 2016-6-12 17:42:20 | 显示全部楼层
谢谢。不过还没有完全替代commondialog的功能,比如文件对话框的扩展名过滤,怎么搞?

点评

有需要,我可以扩展,但用的人很少,懒得整  发表于 2016-6-12 21:38
 楼主| 发表于 2016-6-12 22:19:03 | 显示全部楼层
o_wild 发表于 2016-6-12 17:42
谢谢。不过还没有完全替代commondialog的功能,比如文件对话框的扩展名过滤,怎么搞?

已增加扩展名过滤,见一楼
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-6 07:35 , Processed in 0.201955 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表