Excel VBA – 插入公式(范围),然后复制>仅粘贴值

我想制作一个将公式复制到Q6:Q2500的macros。 macros插入公式后,它应该只复制>粘贴值。

[...] Application.ScreenUpdating = True Application.Calculation = xlCalculationAutomatic Range("Q6").Formula = "=IF(INDIRECT(""A""&ROW())="""","""",CONCATENATE(INDIRECT(""A""&ROW()),""/"",INDIRECT(""B""&ROW()),""/"",INDIRECT(""E""&ROW()),""/"",INDIRECT(""P""&ROW())))" Range("Q6").Copy Range("Q6:Q2500").PasteSpecial (xlPasteAll) Range("Q6:Q2500").PasteSpecial xlPasteValues End Sub 

当我运行这个macros,它插入公式按照预期。 但是当我尝试粘贴值时,只有第一个值重复到Q2500。 我认为这是因为公式更新速度慢。

我在Stack上看到另一个线程,但答案是将公式转换成VBA函数。 我不知道如何转换这个公式。

有人可以帮我解决这个问题吗?

问候

计算完成之前,您正在转换导致问题。

但是,您首先将Formula放入Cell ,然后将该Value复制到Cell 。 这可以缩短为让VBA计算Value并将其放置到Cell 。 如果可以避免的话,build议不要使用.Copy.Copy

看例子:

 Sub JoinStrings() Dim cell As Range Dim strJoin As String With Worksheets("Sheet1") For Each cell In .Range("Q6:Q2500") If .Range(cell.Offset(0, -16).Value) <> "" Then strJoin = .Range(cell.Offset(0, -16).Value).Value & "/" strJoin = strJoin & .Range(cell.Offset(0, -15).Value).Value & "/" strJoin = strJoin & .Range(cell.Offset(0, -12).Value).Value & "/" strJoin = strJoin & .Range(cell.Offset(0, -1).Value).Value cell.Value = strJoin End If Next End With End Sub 

粘贴Q6的内容两次,而不是复制整列的值。

 Range("Q6").Formula = "=IF(INDIRECT(""A""&ROW())="""","""",CONCATENATE(INDIRECT(""A""&ROW()),""/"",INDIRECT(""B""&ROW()),""/"",INDIRECT(""E""&ROW()),""/"",INDIRECT(""P""&ROW())))" Range("Q6").Copy Range("Q6:Q2500").PasteSpecial (xlPasteAll) If Application.CalculationState = xlDone Then Range("Q6:Q2500").Copy Range("Q6:Q2500").PasteSpecial xlPasteValues End If