When your program asks Inventor to perform a compute intensive task, i.e.
create a complex feature, it’s going to take a certain amount of time for Inventor to compute and create the feature. For timing in VBA I used to use some built-in VBA functions but I noticed some problems with the results and later read about some accuracy issues. To use this, copy and paste the code below into a new class module. Private Declare Ptr Safe Function Query Performance Frequency _ Lib "kernel32" (lp Frequency As Currency) As Long Ptr Private Declare Ptr Safe Function Query Performance Counter _ Lib "kernel32" (lp Performance Count As Currency) As Long Ptr Private Conversion Factor As Currency Private Current Start Time As Currency Public Sub Start() Dim i Return As Long Ptr i Return = Query Performance Counter(Current Start Time) End Sub Public Function Get Time() As Double Dim New Time As Currency Dim i Return As Long Ptr i Return = Query Performance Counter(New Time) Dim Total Time As Currency Total Time = New Time - Current Start Time Get Time = Total Time / Conversion Factor End Function Private Sub Class_Initialize() Dim i Return As Long Ptr i Return = Query Performance Frequency(Conversion Factor) End Sub One thing that significantly impacts performance is if your program is running inside Inventor or not.
The ways discussed above were tested in the template[d] code below.
Xl Yes No No, _ Sort Method:=Xl Sort Pin Yin) End With If I remember, it's possible to pull a range directly in an array instead of reading each cells at a time using sheet.get_Range and range. Excel interoperability is inherently slow - you have the .
Xl Sort Ascending, _ Key2:=.range("L2"), Order2:=Excel. Xl Sort Ascending, _ Key2:=.range("C2"), Order2:=Excel. Xl Sort Ascending, _ Key2:=.range("J2"), Order2:=Excel. Xl Sort Ascending, _ Orientation:=Xl Sort Sort Columns, _ Header:=Excel. This might be faster since it'll do less call to the interopt. Value ' Do all the calculations on the data using the array. To show it using com, here is an example using python, the set each 'cell' method takes about 27 seconds on my machine, the set a 'range' method takes about 5.3 seconds, ignoring the 5 second wait so you can see the sheet, the 'range' method is many times faster: import time import win32com.client as win32 def excel(method): """ Open Excel using COM """ starttime = time.time() # Calculation Manual = -4135 xl Calculation Automatic = -4105 xl = win32.gencache.
Excel VBA macros) all run in a process outside of Inventor.
When running out-of-process Windows has to package the API calls for inter-process communication which adds additional overhead to every API call.