[英]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.