[AccessD] With / End With or not?

Susan Harkins ssharkins at gmail.com
Wed Sep 15 18:40:20 CDT 2021


That's really interesting -- thank you!

Susan H. 


Arthur in some cases it is better in others  I don’t think so.

The ild school was that using With allowed the interpreter to not have to look things up so much.

Take Excel sort

The parent is the sheet, you want most of your code to act on the sort itself (and some on sort.sortfields

If I write

Wks.Sort.SortFields.Clear
Wks.Sort.SortFields.add ….
…
Wks.Sort.Apply

Once upon a time all those references to Wks and to wks.sort would cost some performance. So using

With wks.sort improved performance.

Just lately this code took all night to run and still didn’t finish, trying to delete most of over 52,000 styles that contaminated my macro workbook by copying client sheets and ranges:

Dim iStyle as long
Dim myStyles as Styles
Set myStyles = ThisWorkbook.Styles
With myStyles
   For iStyle = .Count to 1 Step - 1
    With .Item(IStyle)
      If. ….. then
           .Delete
      End If
    End With
   Next
End With

Writing instead
For each myStyle in ThisWorkbook.Styles
      With myStyle
           If. ….. then
           .Delete
           End If
       End With
Next


Orders of magnitude faster. I suspect (only) that by setting an object equal to a collection INSTEAD OF just referencing the collection in the For Next loop, that VBA wasn’t  “appreciating” the fact that with each deletion the myStyles object was shrinking. As opposed to using Thisworkbook.Styles which VBA has to evaluate after every Next statement, giving it a chance to hold less in memory with every loop.







More information about the AccessD mailing list