Visual Basic Customization
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic to the Top
- Bookmark
- Subscribe
- Printer Friendly Page
For next slow why?
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
Why is the for next so slow?
I have a form with combobox filled up with 40 layers. The layers are from the layermanager.
The form has a command button too.
When I run this code. It's very slow to lock all layers.
Is there a solution for that?
Private Sub CommandButton1_Click()
On Error Resume Next 'handle exceptions inline
Dim objlayer As AcadLayer
'make the layer selected in the combobox current
ThisDrawing.ActiveLayer = ThisDrawing.Layers.Item(ComboBox1.Text)
For Each objlayer In ThisDrawing.Layers
objlayer.LayerOn = False 'turn off all the layers
Next objlayer
Set objlayer = ThisDrawing.Layers.Item(ComboBox1.Text)
If objlayer Is Nothing Then
MsgBox "layer does not exist"
Exit Sub 'exit if layer not found
End If
objlayer.LayerOn = True 'turn on the desired layer
End Sub
Private Sub UserForm_Initialize()
Dim layerColl As AcadLayers
Dim objlayer As AcadLayer
'fill combobox
Set layerColl = ThisDrawing.Layers
For Each objlayer In layerColl
ComboBox1.AddItem objlayer.Name
Next
End Subgr. Laszlo
Solved! Go to Solution.
Re: For next slow why?
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
C6309D9E0751D165D0934D0621DFF27919
Re: For next slow why?
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
Thank you Hallex for patient.
Its still slow but maybe an other way than you mean.
The problem is the for...next:
For Each objlayer In objlayers
objlayer.Lock = True 'lock all the layers
Next objlayer.
I have 40 layers.
Maybe I have to use the sendcommand method for that?
ps. I changed "turn off" in "lock = true" too![]()
Have a nice christmas!
Option Explicit Private Sub CommandButton1_Click() On Error Resume Next 'handle exceptions inline Dim objlayers As AcadLayers Dim objlayer As AcadLayer Set objlayers = ThisDrawing.Layers 'make the layer selected in the combobox current ThisDrawing.ActiveLayer = objlayers.Item(ComboBox1.Text) For Each objlayer In objlayers objlayer.Lock = True 'lock all the layers Next objlayer Set objlayer = objlayers.Item(ComboBox1.Text) If objlayer Is Nothing Then MsgBox "layer does not exist" Exit Sub 'exit if layer not found End If objlayer.Lock = False 'unlock the desired layer MsgBox "Done" End Sub Private Sub UserForm_Initialize() Dim layerColl As AcadLayers Dim objlayer As AcadLayer 'fill combobox Set layerColl = ThisDrawing.Layers For Each objlayer In layerColl ComboBox1.AddItem objlayer.Name Next End Sub
Re: For next slow why?
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
C6309D9E0751D165D0934D0621DFF27919
Re: For next slow why?
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
Are you using AutoCAD x64?
64 Bit VBA Performance Issue
Re: For next slow why?
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
Yes I do.....
???
Re: For next slow why?
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
lanieuwe wrote:
Yes I do.....
???
Then read: http://adndevblog.typepad.com/autocad/2012/05/64-b



