簡體   English   中英

excel vba 復制並粘貼以修復“#REF”單元格

[英]excel vba copy and paste to fix “#REF” cells

我正在嘗試在 excel 365 上進行支票簿注冊。我正在嘗試添加刪除行(事務)的功能,但是當我運行 vba 代碼時,它會出現以下錯誤:運行時錯誤“1004”:粘貼工作表 class 的方法失敗。

當我運行我的代碼來刪除一行時,余額列會填滿“#REF”。 我通過復制余額列並在刪除行后將其粘貼回來來解決此問題的努力不起作用。 余額欄仍然填滿“#REF”。 這是我用來復制和粘貼余額列的代碼:

Sub DeleteTransactionRectangle_Click()
    Dim deletedRow

    Dim rng As Range
    Set rng = Selection

    deletedRow = rng.Row

    MsgBox (deletedRow)
    Worksheets("Register").Range("I:I").Copy 
    rng.EntireRow.Delete

    ActiveSheet.Paste Destination:=Worksheets("Register").Range("I:I")

End Sub

任何人都有任何想法來完成這項工作。

你有 dim 'rngg' 但設置了 'rng' - 這些不應該是相同的嗎?

當您刪除該行時,復制的信息似乎從剪貼板中丟失了。 相反,您可以從前一行的 I 列中復制公式,然后將其粘貼回您刪除的行中:

rng.EntireRow.Delete
ActiveSheet.Range("I" & deletedRow - 1).Copy
ActiveSheet.Range("I" & deletedRow).Select
ActiveSheet.Paste

刪除包含公式的行

在此處輸入圖像描述

小費

在設計模式下,右鍵單擊命令按鈕和 select Properties TakeFocusOnClick更改為False ,因此當您單擊命令按鈕時,它不會被選中(焦點),但工作表上的選擇保持不變。

公式

刪除行時,您的公式結果很糟糕。 您可以將其更改為:

=SUM(H$1:H2)-SUM(F$1:F2)

這是“刪除列證明”。

改進代碼

學習

更改常量部分中的值以滿足您的需要。

Option Explicit

Sub DeleteTransactionRectangle_Click()

    Const rowFR As Long = 2       ' First Row of Data
    Const colFR As Long = 9       ' Formula Column

    Dim rowLR As Long             ' Last Row of Data
    Dim rng As Range              ' Current Area (For Each Control Variable)
    Dim rngTransAction As Range   ' Transaction (Column) Range
    Dim rngUnion As Range         ' Union Range
    Dim rngFinal As Range         ' Intersection (Final) Range

    ' Calculate Last Row of Data.
    rowLR = Columns(colFR).Find(What:="*", LookIn:=xlFormulas, _
      SearchDirection:=xlPrevious).Row

    ' From the selection, create Union Range which only contains cells
    ' of Formula Column, which will later be compared
    ' to Transaction (Column) Range.
    For Each rng In Selection.Areas
        If Not rngUnion Is Nothing Then
            Set rngUnion = Union(rngUnion, Cells(rng.Row, colFR) _
              .Resize(rng.Rows.Count))
        Else
            Set rngUnion = Cells(rng.Row, colFR).Resize(rng.Rows.Count)
        End If
    Next

    ' Define Transaction (Column) Range.
    Set rngTransAction = Cells(rowFR, colFR).Resize(rowLR - rowFR + 1)

    ' Create Intersection (Final) Range which will 'eliminate'
    ' all 'non-valid' areas of the Selection Range. 'Non-valid' areas are
    ' the ones before First Row of Data and after Last Row of Data.
    If Not rngUnion Is Nothing Then Set rngFinal _
      = Intersect(rngUnion, rngTransAction)

    ' Delete rows of Intersection (Final) Range.
    If Not rngFinal Is Nothing Then rngFinal.EntireRow.Delete

End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM