【问题标题】:Saving values upon excel cell deletion删除excel单元格时保存值
【发布时间】:2023-03-26 00:44:01
【问题描述】:

所以,我回来了一个更具体的答案/问题。 另外,我很抱歉,我只在几周前拿起了 excel(实际上并没有使用该程序)并且使用量很少。因此,如果代码不好/解释不清楚,请发表评论,我会尽我所能。

我目前的情况是有两个单独的(尽管是链接的)excel 文件。 源(书 1) 目的地 (Book2) 他们每个人都有一个工作表。

这个想法是 Src 将被修改(包括删除和插入行),我需要将这些更改反映到 Dest。

到目前为止,我已经插入了一些代码,使用 Before_DoubleClick 收集了一些代码。

但是我在删除时遇到了一些问题。

到目前为止我所拥有的是:

Private Sub Worksheet_Change(ByVal Target As Range)
    Const destBook As String = "Book2"
    Const destSheet As String = "Sheet2"
    Dim wb1 As Workbook
    Set wb1 = Workbooks(destBook)
    ' Here is the main problem i have. I need a better way to detect  
    ' deletion of one or more rows. Otherwise the Application.Undo 
    ' re-enters the if and it just loops.
    If Target.Address = Target.EntireRow.Address Then
        ' Here i Undo the deletion to be able to copy the values.
        Application.Undo
        Target.Copy
        ' I also haven't found a way to delete again but google can help me on that
        ' Pasting line
        'wb1.Sheets(destSheet).Cells(Target.Row, 1).PasteSpecial   Paste:=xlPastValues
    End If
 End Sub

理想情况下,应该发生的情况是,在删除一行或多行后,我想撤消最后一个操作,复制数据,删除行,最后将数据传递到另一个工作表中。但是,截至目前,我无法撤消最后一个操作。它再次调用我的 VBA 宏并开始循环。

【问题讨论】:

  • 您能否提供示例数据以及到目前为止您尝试了什么?您可以使用 worksheetchange 事件,但这将在删除行后触发,因此您的第一个障碍是能够确定删除了哪些行/值。我的建议是对工作表进行更改,使用 undolist 控件来检测它是否被删除。我不确定您是否从撤消列表中获取目标地址,但您可以执行 1 次撤消来查找单元格和/或值,然后在 fileLinked 中搜索该单元格引用或值并从两个表中删除相应的行。干杯,
  • 或者,您可以在 fileSrc 中的工作表更改上触发,并使用 fileLinked 中的 .find 搜索任何 #REF 并删除相应的行。这假设任何 #REF 都与被删除的引用相关。
  • @nbayly 在编辑中添加,感谢撤消列表提示。我也会开始研究,但如果有更简单的方法,我会喜欢的。 (类似于 afterDoubleCLick 事件。但更像是 onDeletion 事件。)
  • 我相信一旦事情变得如此棘手,是时候考虑通过用户表单或 activex 对象来控制活动和处理事件了。您可以通过这种方式更轻松地捕获活动并以相应的方式进行操作。你能创造出这样的解决方案吗?
  • 如果我深入研究它并将其余的工作放在一边,我可能可以。问题是,我花时间尝试把它放在一起是否值得?可能不是。我将尝试混合使用工作表更改 + 撤消/停用自动计算。如果可行,我会发布答案。

标签: vba excel


【解决方案1】:

我不确定你想要什么,但你要么必须用新单元格中的值替换公式,要么这些单元格应该有一个你可能必须做的公式

application.Calculation=xlCalculationManual

然后进行删除或更改

application.Calculation=xlCalculationAutomatic

重新开启自动计算

手动操作很棘手,因为如果代码崩溃,您需要确保您没有将工作表留在未计算的状态

【讨论】:

  • 我正在努力使链接到其他人的单元格没有#REF!在它们中并实际上保留了它们最旧的值。所以实际上在删除源​​单元格时用它们的值替换链接
猜你喜欢
  • 2015-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多