【发布时间】:2023-01-07 12:50:35
【问题描述】:
我是 VBA 的新手,所以我的代码通常非常慢/未优化。
在我的一个程序中,当用户按下按钮时,工作表中有一些单元格必须填充,这些单元格会根据按钮而变化,但概念是相同的。
所以我做了这个怪物:
Cells((Range("namedrange").Row + 5), 1).Value = ThisWorkbook.Sheets(5).Cells(4, 7).Value
Cells((Range("namedrange").Row + 5), 3).Value = ThisWorkbook.Sheets(5).Cells(4, 8).Value
Cells((Range("namedrange").Row + 5), 5).Value = ThisWorkbook.Sheets(5).Cells(4, 9).Value
Cells((Range("namedrange").Row + 5), 8).Value = ThisWorkbook.Sheets(5).Cells(4, 10).Value
Cells((Range("namedrange").Row + 5) + 1, 1).Value = ThisWorkbook.Sheets(5).Cells(5, 7).Value
Cells((Range("namedrange").Row + 5) + 1, 3).Value = ThisWorkbook.Sheets(5).Cells(5, 8).Value
Cells((Range("namedrange").Row + 5) + 1, 5).Value = ThisWorkbook.Sheets(5).Cells(5, 9).Value
Cells((Range("namedrange").Row + 5) + 1, 8).Value = ThisWorkbook.Sheets(5).Cells(5, 10).Value
但后来改为:
With Range("namedrange")
.Offset(5).Columns(1).Value = ThisWorkbook.Sheets(3).Cells(4, 7).Value
.Offset(5).Columns(3).Value = ThisWorkbook.Sheets(3).Cells(4, 8).Value
.Offset(5).Columns(5).Value = ThisWorkbook.Sheets(3).Cells(4, 9).Value
.Offset(5).Columns(8).Value = ThisWorkbook.Sheets(3).Cells(4, 10).Value
.Offset(6).Columns(1).Value = ThisWorkbook.Sheets(3).Cells(5, 7).Value
.Offset(6).Columns(3).Value = ThisWorkbook.Sheets(3).Cells(5, 8).Value
.Offset(6).Columns(5).Value = ThisWorkbook.Sheets(3).Cells(5, 9).Value
.Offset(6).Columns(8).Value = ThisWorkbook.Sheets(3).Cells(5, 10).Value
End With
这有点快,但我觉得它仍然没有优化。我想知道是否有办法让它更清洁/更优雅。 请注意,列中存在不连续性,例如它从第一列开始,然后跳到第三列,然后跳到第五列,最后跳到第八列。
该代码有效但速度很慢,我只是想要一种使其更快/更清洁的方法。
【问题讨论】:
-
您可以停止屏幕刷新以获得更高速度的常用方法。而这个操作是不是要循环多次呢?
-
如果
ThisWorlbook.Sheets(3)在编译时存在,那么您可以使用它的代号,而不是从Sheets集合中重新提取它。Sheet3.Cells(...) -
还要注意隐式 ActiveSheet 和 ActiveWorkbook 引用,它们是错误的常见来源。 Rubberduck 可以提供帮助。
-
非常感谢,我对这个评论线程不太了解......但我会研究它们并尝试实施它。
标签: excel vba optimization return-value with-statement