【发布时间】:2016-11-10 22:38:37
【问题描述】:
跟进之前回答的问题:Excel VBA - Run a macro based on a range of dropdown lists。
当前:这是个人费用电子表格,我正在使用我的 Master 工作表上的 G 列对从我的信用合作社提供的 .csv 导入的行项目费用进行分类。 G 列中的每个单元格都有一个下拉列表,它是我的工作簿中其他工作表的名称:Power、Gas、Groceries 等。目前,当您从 G 列下拉列表中进行选择时,它复制当前行的A1:F1 并将其粘贴到所选工作表的下一个空行,例如Power 或 Gas 或 Groceries。所有这些最终都运行良好。
问题:但是,如果我重新分类线路费用,例如从我最初的选择Gas 中,我将其更改为Power,它将再次复制当前行的A1:F1 并移动到Power 工作表。这很好,但我需要它来删除我们从Gas 选项卡中复制的行。
可能的解决方案?:我能想到的唯一方法是添加类似这样的内容...如果下拉列表不是空白并且我更改了原始选择,那么我需要找到A1:F1 的精确文本副本(A1 :日期,B1:编号,C1:描述,D1:借方,E1:贷方,F1:注释 - 这些将(“应该”)永远不会重复)从原始选择工作表(Gas)并删除这些单元格和向上移动下面的行。我正在寻求帮助,请有人用代码编写上述场景并向我展示它在我当前代码中的样子(我在新手级别上了解 VBA - 充其量)。
这是我当前的代码,一旦更改下拉值就会运行:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range, c As Range
Set rng = Intersect(Target, Range("G2:G1001"))
If Not rng Is Nothing Then
For Each c In rng.Cells
Select Case c.Value
Case "Power": Power c
Case "Gas": Gas c
Case "Water": Water c
Case "Groceries, etc.": GroceriesEtc c
Case "Eating Out": EatingOut c
Case "Amazon": Amazon c
Case "Home": Home c
Case "Entertainment": Entertainment c
Case "Auto": Auto c
Case "Medical": Medical c
Case "Dental": Dental c
Case "Income": Income c
Case "Other": Other c
End Select
Next c
End If
End Sub
这是从上述代码中触发的 case 宏(每个 case 都有一个类似的宏):
Sub Gas(c As Range)
Dim rng As Range
Set rng = c.EntireRow.Range("A1:F1") '<< A1:F1 here is *relative to c.EntireRow*
'copy the values
With Worksheets("Gas").Cells(Rows.Count, 1).End(xlUp)
.Offset(1, 0).Resize(1, rng.Cells.Count).Value = rng.Value
End With
End Sub
有什么建议吗?
【问题讨论】:
-
需要某种唯一标识符来查找旧值。如果对数据一无所知,就无法为您提供帮助。能否提供样本工作簿下载链接或数据截图?
标签: excel vba delete-row