【问题标题】:Excel Transpose Remove Duplicate EntriesExcel转置删除重复条目
【发布时间】:2015-01-15 00:35:18
【问题描述】:

我有两个电子表格。第一个电子表格在同一列但连续的行中具有部件号和描述。我需要从第一个电子表格中获取零件编号和说明,然后将它们(仅值,无格式)转置到第二个电子表格中,以便现在零件编号和说明位于连续列中,而不是行中。为了解决这个问题,我在 Worksheet_Change() 函数中添加了以下 VBA 代码。

If Not Application.Intersect(Target, MatNumDesc) Is Nothing Then

   If Application.CutCopyMode = xlCopy Then

        Application.Undo
        Target.PasteSpecial Paste:=xlPasteValues, Transpose:=True

   End If

End If

MatNumDesc 是一系列单元格,我将在其中粘贴部件号。如果我有 2 种以上的材料和描述一切正常,我的问题是只有一种材料和描述。在这些情况下,我会得到一个我不想要的重复条目。

为了清楚起见,我在两个单独文件的电子表格之间手动复制和粘贴值(使用 Ctrl-C 和 Ctrl-V)。我没有使用任何 VBA 代码来尝试从一张纸复制到另一张纸,因为不值得一提,它不适用于我的设置。

此外,据我观察,我面临的实际问题与 Excel 的默认行为有关。我复制的是 2 行 1 列数据。转置后变为 2 列和 1 行,但是在运行 .Application.Undo 操作后,选择了 2 行和 2 列,Excel 然后在其上运行 .PasteSpecial 操作。至少从我能够观察到的情况来看。

【问题讨论】:

  • 一时兴起,我尝试将Target.PasteSpecial 替换为.Range("G" & Target.Row).PasteSpecial(以及使该工作所需的代码位,我将省略),到目前为止它似乎工作正常。

标签: vba excel


【解决方案1】:

这有点难以用您提供的有限代码部分进行调试,但在更改值的 Worksheet_Change 事件宏中的标准做法是暂时关闭 .EnableEvents 以便子的操作不会触发另一个尝试在自身之上运行的事件。

If Not Application.Intersect(Target, MatNumDesc) Is Nothing Then
   If Application.CutCopyMode = xlCopy Then
        on error goto Fìn
        application.enableevents = false   ' turn off event handling
        Application.Undo
        Target.PasteSpecial Paste:=xlPasteValues, Transpose:=True
   End If
End If
Fìn:
application.enableevents = true  'remember to turn it back on before exiting the sub

【讨论】:

  • 我已经关闭了.EnableEvents.ScreenUpdating。如果 .EnableEvents 没有设置为 false,Excel 不会崩溃或类似的情况,当我只有一个部件号和描述对时,我只会得到一个不需要的重复值。
【解决方案2】:

经过一些测试,我相信我至少找到了一个解决方案。不能使用 Excel 定义的Target,而是必须命名一个明确的范围。所以初始代码的更正版本将如下所示。

If Not Application.Intersect(Target, MatNumDesc) Is Nothing Then

    If Application.CutCopyMode = xlCopy Then

        Application.Undo
        ThisWorkbook.Sheets("Sheet1").Range("G" & Target.Row).PasteSpecial Paste:=xlPasteValues, Transpose:=True

    End If

End If

在此示例中使用列“G”,但它可以替换为任何其他列。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-05
    • 1970-01-01
    • 2021-01-22
    • 2018-10-16
    • 2010-12-17
    • 2014-12-28
    相关资源
    最近更新 更多