[英]How to optimize the time of a process in excel VBA MMult
I want to do a loop for multiply matrixes, but I keep getting interrupted by a long time of the process.我想为乘法矩阵做一个循环,但我一直被过程的很长时间打断。
I attach the code:我附上代码:
Call back_setup_OFF
n_col = 105
dia = 1
Do
dia = dia + 1
Hoja7.Cells(2, n_col) = dia
Hoja7.Cells(105, n_col) = dia
Do
n_row = 106
If Hoja7.Cells(n_row + 103, 5) >= dia Then
J_usar = Hoja7.Cells(n_row + 103, 3)
Else
J_usar = 0
End If
Hoja7.Cells(n_row, n_col) = -Hoja7.Cells(n_row + 103, 2) * Hoja7.Cells(n_row - 103, n_col - 1) - J_usar * Hoja7.Cells(n_row + 103, 4)
n_row = n_row + 1
Loop Until n_row = 206
Hoja7.Range(Hoja7.Cells(3, n_col), Hoja7.Cells(102, n_col)) = Hoja7.Application.WorksheetFunction.MMult(Hoja7.Range("B106:CW205"), Hoja7.Range(Hoja7.Cells(106, n_col), Hoja7.Cells(205, n_col)))
n_col = n_col + 1
Loop Until dia = 100
Call back_setup
And the back_setup and back_setup_OFF和 back_setup 和 back_setup_OFF
Sub back_setup()
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.StatusBar = False
End Sub
Sub back_setup_OFF()
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Application.EnableEvents = False
End Sub
The problem is that Excel closes itself for the long process, any idea?问题是 Excel 会在漫长的过程中自行关闭,知道吗?
You reset n_row each time through the loop so it will only ever get to 107...每次循环都会重置 n_row ,因此它只会达到 107 ...
Do
n_row = 106 '<<<<<< ???
If Hoja7.Cells(n_row + 103, 5) >= dia Then
J_usar = Hoja7.Cells(n_row + 103, 3)
Else
J_usar = 0
End If
Hoja7.Cells(n_row, n_col) = -Hoja7.Cells(n_row + 103, 2) * Hoja7.Cells(n_row - 103, n_col - 1) - J_usar * Hoja7.Cells(n_row + 103, 4)
n_row = n_row + 1
Loop Until n_row = 206
FYI you have fixed start/end points and a fixed increment, but you are using Do...Loop
- you should probably be using a For...Next
loop instead.仅供参考,您有固定的起点/终点和固定增量,但您使用的是
Do...Loop
- 您可能应该使用For...Next
循环。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.