是否有更快的替代目标.value = me.textbox.value?

时间:2016-10-21 20:31:43

标签: vba performance excel-vba excel

我有一个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的速度更快,但没有任何明显的区别。

在此期间没有其他代码运行,我禁用了单元格中函数的自动更新。

1 个答案:

答案 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