我有一个Excel UserForm,它有大约15个字段(文本框和下拉列表),并在按下按钮时将数据复制到工作表。它有大约15分钟的运行时间,并且经过了花费了大量时间的唯一线路后
arrayUnique(array1.concat(array2));
function arrayUnique(array) {
var a = array.concat();
for(var i=0; i<a.length; ++i) {
for(var j=i+1; j<a.length; ++j) {
if(a[i] === a[j]) a.splice(j--, 1); }
}
return a;
}
每条复制线大约需要1分钟才能运行。我读到使用Value2的速度更快,但没有任何明显的区别。
在此期间没有其他代码运行,我禁用了单元格中函数的自动更新。
答案 0 :(得分:2)
任何时候只要对工作表进行一次写操作而不是多次写入,你应该会看到性能提升,因此使用数组而不是逐个单元格可能会改进:
With ws
.Unprotect Password:="password"
.Cells(iRow, 1).Resize(1,10).Value = _
Array(Me.mem1.Value, Me.mem2.Value, _
Me.mem3.Value, Me.mem4.Value, _
Me.mem5.Value, Me.mem6.Value, _
Me.mem7.Value, Me.mem8.Value, _
Me.mem9.Value, Me.mem10.Value)
.Protect Password:="password"
End With