乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 73|回复: 7

[编程交流] filedia设置为零。。。

[复制链接]

10

主题

29

帖子

21

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
68
发表于 2022-7-6 14:47:36 | 显示全部楼层 |阅读模式
大师您好,
 
我正在用VBA编写一个块管理器程序,似乎有一个错误,AutoCAD中的filedia变量被设置为0。
 
问题是代码中没有引用filedia变量,所以我不知道是什么改变了这个变量的值。
 
在程序的一部分中,我使用以下代码调用insert命令(这是项目中唯一使用sendcommand启动autocad命令的地方):
 
  1. ThisDrawing.SendCommand "-insert" & vbCr & thePath & vbCr & "S" & vbCr & theScale & vbCr

 
(我选择以这种方式插入块,而不是通过编程,因为我希望用户在选择插入点和旋转时能够在屏幕上看到图像的预览。)
 
这可能是filedia问题的原因吗?这个问题发生在其他人身上了吗?思想?
 
谢谢
 
回复

使用道具 举报

LCE

1

主题

29

帖子

28

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 14:56:45 | 显示全部楼层
你能把完整的代码贴出来吗。显然,它不在您发布的代码中,因此可能在其他地方。
你是在调用任何lisp例程,还是完全从你的应用程序中分离出来?
回复

使用道具 举报

10

主题

29

帖子

21

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
68
发表于 2022-7-6 15:10:30 | 显示全部楼层
有相当多的代码(大约1500行),所以我认为不会发布所有的代码。
 
我没有调用任何lisp例程。我唯一想做的是将控件从VBA中释放出来,这是我在上面发布的插入操作,其中控件会立即传递到autocad命令提示符。
 
下面是包含insert命令的sub的代码:
 
  1. Sub InsertBlock(Optional thePath As String)
  2. Dim theScale As Variant
  3.    'set the dimscale
  4.    If IsNumeric(UserForm1.TextBox1.Value) = False Or UserForm1.TextBox1.Value < 0 Then
  5.        MsgBox "Please entera valid numeric default scale value."
  6.        UserForm1.TextBox1.SetFocus
  7.        Exit Sub
  8.    End If
  9.    If UserForm1.TextBox1.Value = 0 Then
  10.        theScale = ThisDrawing.GetVariable("DIMSCALE")
  11.    Else
  12.        theScale = UserForm1.TextBox1.Value
  13.    End If
  14. Dim objLayer As AcadLayer
  15. Dim FoundLayer As Boolean
  16. Dim OldLayer As String
  17.    'determine whether or not default layer exists
  18.    'if it does exist, set it as current layer
  19.    'if it doesn't exist, prompt the user and return to the userform.
  20.    FoundLayer = False
  21.    For Each objLayer In ThisDrawing.Layers
  22.        If objLayer.Name = UserForm1.ComboBox1.Value Then
  23.            FoundLayer = True
  24.            Exit For
  25.        End If
  26.    Next
  27.    If FoundLayer = False Then
  28.        MsgBox "The default layer entered for this block does not exist on this drawing."
  29.        UserForm1.ComboBox1.SetFocus
  30.        Exit Sub
  31.    Else
  32.        OldLayer = ThisDrawing.ActiveLayer.Name
  33.        ThisDrawing.ActiveLayer = ThisDrawing.Layers(UserForm1.ComboBox1.Value)
  34.    End If
  35.    If thePath = "" Then
  36.        thePath = GetDefaultDirectory + UserForm1.ListBox1.Value + "" + UserForm1.ListBox2.Value + ".dwg"
  37.    End If
  38.    UserForm1.Hide
  39.    'insert with or without dynamic rotation
  40.    If UserForm1.CheckBox2 = True Then
  41.        ThisDrawing.SendCommand "-insert" & vbCr & thePath & vbCr & "S" & vbCr & theScale & vbCr
  42.    Else
  43.        ThisDrawing.SendCommand "-insert" & vbCr & thePath & vbCr & "S" & vbCr & theScale & vbCr & "R" & vbCr & "0" & vbCr
  44.    End If
  45.    'expload last block entered
  46.    If UserForm1.CheckBox3.Value = True Then
  47.        ThisDrawing.SendCommand "Explode" & vbCr & "L" & vbCr & vbCr
  48.    End If
  49.    'reset the original layer
  50.    ThisDrawing.ActiveLayer = ThisDrawing.Layers(OldLayer)
  51. End Sub

 
我不能确定问题是否来自其他地方,但我确实知道,当这种情况发生时,没有其他VBA程序正在运行,而且在编写该程序之前,这个问题似乎从未发生过。
 
我还有一些其他的sub是从文本文件中读写信息的,尽管我怀疑这就是问题所在。
回复

使用道具 举报

NBC

4

主题

182

帖子

178

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 15:15:12 | 显示全部楼层
 
嗨,乔,
 
您的对话框被抑制的原因是您正在使用命令行版本的insert;例如,您正在使用-insert,而不是insert。
注意命令开头的减号。在命令开头使用减号时,告诉命令仅使用命令行。
回复

使用道具 举报

10

主题

29

帖子

21

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
68
发表于 2022-7-6 15:23:00 | 显示全部楼层
这就是我所怀疑的。
 
使用命令行版本是有意的,因为这是我所知道的唯一一种通过编程与insert命令的部分交互的方式,同时允许命令的其他部分保持用户控制。
 
例如,我想通过编程设置x、y和z比例,但我希望用户能够在屏幕上动态选择旋转。
 
你知道没有使用sendcommand“-insert”…,有什么方法可以做到这一点吗。。。?
回复

使用道具 举报

0

主题

2

帖子

2

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-6 15:36:52 | 显示全部楼层
当FILEDIA设置为1时,下拉列表仍然无法工作,我遇到了一个问题。当我点击文件然后打开时,工具栏消失了,什么也没有发生。在命令行中,它说“打开”,但什么也不做。当我单击“打开”按钮时,也会发生同样的情况。我将FILEDIA和CMDDIA都更改为0,并从0更改为1,关闭AutoCAD并完全重新启动,但仍然没有任何更改。当FILEDIA设置为0时,我可以键入文件名,但设置为1不会启动对话框。
回复

使用道具 举报

0

主题

252

帖子

290

银币

限制会员

铜币
-8
发表于 2022-7-6 15:44:25 | 显示全部楼层
这听起来像是你的对话框在屏幕上浮动,只是不可见。试着点击alt enter或alt space并选择move,点击箭头键一次或两次,然后将鼠标移动到屏幕中央,查看对话框是否在移动
回复

使用道具 举报

0

主题

2

帖子

2

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-6 15:52:46 | 显示全部楼层
成功了!非常感谢你。我使用两个监视器,当其中一个出现故障时,问题就开始了。
 
再次感谢。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-4 22:31 , Processed in 0.326919 second(s), 68 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表