首页 文章

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

提问于
浏览
0

我想制作一个将公式复制到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函数 . 我不知道如何转换这个公式 .

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

问候

3 回答

  • 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
    
  • 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
    
  • 0

    对于任何搜索这个的人一般来说,有效地使用以下代码来粘贴值 .

    With Selection
    .Value = .Value
    End With
    

相关问题