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