我想制作一个将公式复制到Q6:Q2500范围内的宏。在宏插入公式后,它应该复制>仅粘贴值。
[...]
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
当我运行此宏时,它会按预期插入公式。但是当我尝试粘贴值时,我会重复第一个值,直到Q2500。我认为这是因为公式更新会变慢。
我在Stack上看到了另一个线程,但答案是将公式转换为VBA函数。我不知道如何转换这个公式。
有人可以帮我解决这个问题吗?
问候
答案 0 :(得分:1)
您将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
答案 1 :(得分:1)
您正在计算完成之前进行转换,这会导致问题。
但是,您首先将Formula
置于Cell
,然后将Value
复制到Cell
。这可以缩短为让VBA计算Value
并将其放入Cell
。如果可以避免,建议不要使用.Copy
和.Paste
。
参见示例:
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
答案 2 :(得分:0)
对于任何搜索此内容的人。通常,要有效地粘贴值,请使用以下代码。
With Selection
.Value = .Value
End With