【问题标题】:VBA copy formula to other sheet, do not move "view"VBA将公式复制到其他工作表,不要移动“视图”
【发布时间】:2017-06-22 15:58:25
【问题描述】:

我正在使用 VBA 例程进行复制

源表:命名范围(多个“选择”)

目标工作表:从命名范围内的单元格复制粘贴公式,到与目标工作表上的单元格有一定偏移量的单元格(此偏移量取决于特定选择)。

我在源表上有两种类型的命名范围;一个我只想复制值(=rng_operationeel_input_data),一个我想复制到公式(=rng_operationeel_formules)。应“相对”复制公式,以便在目标工作表上有引用(这是从其他范围复制的值的一部分)。出于这个原因,我不能使用“targetCell.Formula = sourceCell.Formula”,因为它会从字面上复制绝对公式。不是相对的。 这就是我使用 sourceCell 的原因。

我在源范围内所有单元格的 for each 循环中执行此操作,因为命名范围不是一个单一范围(范围集)。

注意。 'datasetReferenceCell' 是目标工作表上用于粘贴的偏移量的单元格。

问题是,即使我使用 VBA 进行复制粘贴,但没有在某处使用“选择”,最终用户仍然会遇到目标工作表。 (Excel 将移动到目标工作表) 这只发生在复制粘贴部分。

我怎样才能防止这种情况发生?

编辑:请注意,我已经在使用“Application.ScreenUpdating”(开始为假,结束为真)。我在例程结束时还有一个 MsgBox(有关例程成功的信息)。关闭 MsgBox 后,Excel 正在移动到目标工作表。

在 VBA 代码部分下方。

            ' dataset for weeknr found: save data to dataset
        Dim dataRange As Range, dataField As Range

        ' for each cell in input data range: save value in dataset
        Set dataRange = Range("rng_operationeel_input_data")
        For Each dataField In dataRange
            datasetReferenceCell.Offset(dataField.Row, dataField.Column).Value = dataField.Value
        Next dataField

        ' !!! Following are only saved, not loaded, as it are formula based fields

        ' for each cell in formula range: paste formula
        Set dataRange = Range("rng_operationeel_formules")

        For Each dataField In dataRange
            dataField.Copy
            datasetReferenceCell.Offset(dataField.Row, dataField.Column).PasteSpecial (xlPasteFormulas)
            'datasetReferenceCell.Offset(dataField.Row, dataField.Column).Formula = dataField.Formula 'not working, as relative formulas are required
        Next dataField

【问题讨论】:

  • 不知道是不是看懂了,不过可以直接复制不用selectRange("rng_operationeel_input_data").Copy Destination:=Range("rng_operationeel_formules")msdn.microsoft.com/VBA/Excel-VBA/articles/…
  • 我只想复制公式(因此是'xlPasteSpecial'),但要以相对复制单元格的方式。如果我使用你的方法,我也会得到所有其他的东西(比如标记、安全等)。如果我使用“targetCell.Formula = sourceCell.Formula”,我会得到带有绝对单元格引用的公式。

标签: excel vba


【解决方案1】:

我能够解决它的唯一方法是重置活动工作表:

Public Sub routine()
    Dim activeWs As Worksheet
    Set activeWs = ThisWorkbook.ActiveSheet

    .. code including copy & PasteSpecial ...

    activeWs.Activate
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-22
    • 1970-01-01
    • 2018-09-14
    • 2019-12-04
    相关资源
    最近更新 更多