我刚刚从VBA(Excel)切换到VB(Visual Studio Express 2013)。 现在我已将部分代码从VBA复制到VB。 现在我想知道为什么VB这么慢...... 我正在创建一个包含4列和大约4000行的数组(IFS_BV_Assy)。 其中有一些相同的内容,因此我将每个条目相互比较,并用空字符串覆盖副本。 守则看起来像这样:
For i = 1 To counter
For y = 1 To counter
If IFS_BV_Assy(1, y) = IFS_BV_Assy(1, i) And i <> y Then
If IFS_BV_Assy(2, i) < IFS_BV_Assy(2, y) Then
IFS_BV_Assy(1, i) = ""
Else
IFS_BV_Assy(1, y) = ""
End If
Exit For
End If
Next
Next
计数器是数组的长度。
在VBA中大约需要1秒。在VB中大约需要30秒。通过循环。有人知道为什么吗? (我在每一步之间创建一些时间戳,以确保速度慢。那个循环是坏人)
Array看起来像这样:
提前致谢
安迪
编辑:我创建了这样的数组:
strStartPath_BV_Assy = "\\xxx\xx\xx\"
myFile = Dir(strStartPath_BV_Assy & "*.*")
counter = 1
ReDim IFS_BV_Assy(0 To 2, 0 To 0)
IFS_BV_Assy(0, 0) = "Pfad"
IFS_BV_Assy(1, 0) = "Zg."
IFS_BV_Assy(2, 0) = "Rev"
Do While myFile <> ""
If UCase(Right(myFile, 3)) = "DWG" Or UCase(Right(myFile, 3)) = "PDF" Then
ReDim Preserve IFS_BV_Assy(0 To 2, 0 To counter)
IFS_BV_Assy(0, counter) = strStartPath_BV_Assy + myFile
IFS_BV_Assy(1, counter) = Left(Mid(myFile, 12), InStr(1, Mid(myFile, 12), "-") - 1)
IFS_BV_Assy(2, counter) = Mid(myFile, Len(myFile) - 8, 2)
counter = counter + 1
End If
myFile = Dir()
Loop
答案 0 :(得分:0)
Stokke建议创建数组as String
而不是Objekt Type。
Dim IFS_BV_Assy(,) as String
我使用Option Explicit Off
创建模块,因为我从未发现VBA在这一点上存在任何差异。现在我用Dim .. as ...
声明任何变量。
现在,它的速度和VBA一样快=)
学习=犯错误.. =)