首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >插入公式(范围),然后仅插入copy>paste值

插入公式(范围),然后仅插入copy>paste值
EN

Stack Overflow用户
提问于 2016-08-11 16:44:03
回答 3查看 11.1K关注 0票数 0

我想创建一个宏,将公式复制到范围Q6:Q2500中。在宏插入公式后,它应该只copy>paste值。

代码语言:javascript
复制
[...]
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函数。我不知道如何转换这个公式。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-08-11 19:11:14

您在计算完成之前进行转换,这是导致问题的原因。

但是,您首先将Formula放到Cell中,然后将Value复制到Cell中。这可以简化为让VBA计算Value并将其放入Cell中。如果可以避免,建议不要使用.Copy.Paste

请参见示例:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2016-08-11 16:50:15

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

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2018-08-07 23:05:08

对任何搜索这个的人来说。一般而言,要有效地粘贴数值,请使用以下代码。

代码语言:javascript
复制
With Selection
.Value = .Value
End With
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38891453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档