乐筑天下

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

简单的BlockCounter不起作用。。

[复制链接]

46

主题

118

帖子

23

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
291
发表于 2008-4-17 09:02:16 | 显示全部楼层 |阅读模式
嗨,
在浏览了一些工作中的旧文件夹后,我发现了一个Block Count程序,我显然在几年前的某个时候正在使用它,并认为我应该测试它...
它做了它应该做的一切,除了实际显示用户选择的块数,它应该在表单的标签标题中显示...
有什么想法为什么SelectionSet计数可能为0?
我看不出我的生活/和我有限的VBA知识,哈哈,有什么问题...

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2008-4-17 10:07:59 | 显示全部楼层
我会看看的
回复

使用道具 举报

46

主题

118

帖子

23

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
291
发表于 2008-4-17 10:10:18 | 显示全部楼层
选择集部分。
FilterType和FilterData必须是有序对。
修复后,您会发现在此绘图中的For Each ssBlockZ中需要一个出口。选择设置部分
它将帮助您学习使用f8逐句通过代码,然后您可以在运行程序时测试值。当你发现有问题时,你会试着隔离问题,然后只解决那部分。就获得帮助而言,我宁愿看帖子中的一些代码,也不愿摆弄dvb。
回复

使用道具 举报

9

主题

59

帖子

38

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
58
发表于 2008-4-17 10:23:35 | 显示全部楼层
这是更正后的代码
  1. Option Explicit
  2. Dim blockZ As AcadBlock  'ThisDrawing.Blocks..
  3. Dim getBlock As AcadEntity  'Select a block to count..
  4. Dim no_of_blocksX As Integer  'Number of blocks (selected)..
  5. Dim allBlocks As Integer  'Number of block (in entire drawing)..
  6. Dim basex As Variant  'Pick point for block selection..
  7. Dim Lblockname As String, Lblockname2 As String  'Left character in the blockname (to filter out unwanted blocks from the list)..
  8. Dim checkname As Integer  'Compares actual block names with combobox block names..
  9. Dim SSet As AcadSelectionSet  'Selection set for blocks..
  10. Dim blockname As String  'Name of block picked..
  11. Dim response As Integer 'Yes / No..
  12. ' Update the block count each time the combobox text is changed..
  13. Private Sub BlockNameCMBO_Change()
  14. For Each SSet In ThisDrawing.SelectionSets
  15.     If SSet.Name = "GetBlocks" Then
  16.         SSet.Delete
  17.     End If
  18. Next SSet
  19. blockname = BlockNameCMBO.Text
  20. Dim FilterType(0 To 1) As Integer  'Selection Set - Filter type..
  21. Dim FilterData(0 To 1) As Variant  'Selection Set - Filter data..
  22. ' Create a selection set..
  23. Set SSet = ThisDrawing.SelectionSets.Add("GetBlocks")
  24. FilterType(0) = 0: FilterData(0) = "INSERT"
  25. FilterType(1) = 2: FilterData(1) = blockname
  26. SSet.Select acSelectionSetAll, , , FilterType, FilterData
  27. no_of_blocksX = SSet.Count
  28. lblTotal.Caption = no_of_blocksX
  29. End Sub
  30. ' Select a block..
  31. Private Sub PickBlockBTN_Click()
  32. blockcountform.Hide
  33. On Error Resume Next
  34. TryAgain:
  35. ThisDrawing.Utility.GetEntity getBlock, basex, vbCr & "Select a block to count.. "
  36. ErrHndlr:
  37.     If Err.Number  0 Then
  38.         Err.Clear
  39.         GoTo TryAgain
  40.     End If
  41.     On Error GoTo ErrHndlr
  42.    
  43. BlockNameCMBO.Text = getBlock.Name  'Show the selected block name in the combobox..
  44. blockcountform.Show
  45. End Sub
  46. '********************************************
  47. '*************** FORM LOAD ****************
  48. '********************************************
  49. Private Sub UserForm_Initialize()
  50. For Each blockZ In ThisDrawing.Blocks
  51.     Lblockname = Left(blockZ.Name, 1): Lblockname2 = Left(blockZ.Name, 2)
  52.         If Lblockname  "_" And Lblockname  "*" And Lblockname2  "A$" Then
  53.             With BlockNameCMBO
  54.             .AddItem (blockZ.Name)
  55.         End With
  56.     End If
  57. Next
  58. End Sub
  59. '********************************************
  60. '*************** FORM LOAD ****************
  61. '********************************************
  62. '********************************************
  63. '*************** FORM UNLOAD ****************
  64. '********************************************
  65. Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
  66. response = MsgBox("Are you sure you've finished with the 'Block Counter program?..", vbQuestion + vbYesNo, "End the Program..")
  67.     If response = vbNo Then
  68.     Cancel = 1
  69.     End If
  70.     If response = vbYes Then
  71.         Unload Me
  72.     End If
  73. End Sub
  74. '********************************************
  75. '************* END FORM UNLOAD **************
  76. '********************************************

就像Bryco说的,您的过滤器对有点不对劲,但我修复了它。我还更改了一些var的名称,因为使用具有同名sset的var太令人困惑了
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2008-4-17 10:27:12 | 显示全部楼层
谢谢伙计们,
这就是伙计们,我看不见它,但是当你指出它时,它很明显,但现在按照我想要的方式运行,谢谢.
哦,是的,这很酷,我只上传了整个dvb,因为它有一个用户表单,并认为ppl以这种方式测试会更快,但是是的,你是对的。
谢谢你们俩。
回复

使用道具 举报

9

主题

59

帖子

38

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
58
发表于 2008-4-18 16:07:30 | 显示全部楼层
有人能告诉我在哪里可以看到如何使用这篇文章所附的代码中的FilterCode和FilterData。我似乎明白了主要的想法,但是我如何使用这种方法来生成基于层或对象名称或其他的对象选择...谢谢。
回复

使用道具 举报

6

主题

103

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
127
发表于 2008-4-18 17:35:19 | 显示全部楼层

Vba允许使用FilterCodes和FilterData对这些代码进行有限的访问。
它们必须始终成对,一个代码和一个数据。
有更多时间的人可能会给你更好的解释。
我认为CmdrDuh在这个主题上写了一些很好的文章。
回复

使用道具 举报

9

主题

59

帖子

38

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
58
发表于 2008-4-19 02:39:08 | 显示全部楼层
谢谢Btyco,
我找到了一些示例代码。Byt有什么方法可以让选择项在过程结束后保持选中状态,以便我可以手动对其执行其他操作?
回复

使用道具 举报

6

主题

103

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
127
发表于 2008-4-19 08:27:13 | 显示全部楼层
你可以看一下这个页面(这是我朋友的一个站点):
http://www . CAD foryou . SPB . ru/index . PHP?current _ section = section _ programs _ page
搜索CountBlocks项目,向下滚动大约页面的一半
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-7-4 21:30 , Processed in 1.398914 second(s), 82 queries .

© 2020-2025 乐筑天下

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