如果下拉列表中的选择发生更改,则从工作表中删除数据

2024-01-27

跟进之前回答的问题:Excel VBA - 基于一系列下拉列表运行宏 https://stackoverflow.com/questions/40478350/excel-vba-run-a-macro-based-on-a-range-of-dropdown-lists.

当前:这是个人费用电子表格,我在我的表上使用 G 列Master用于对从我的信用合作社提供的 .csv 导入的行项目费用进行分类的工作表。 G 列中的每个单元格都有一个下拉列表,它是我的工作簿中其他工作表的名称:Power, Gas, Groceries等。目前,当您从 G 列下拉列表中进行选择时,它会复制A1:F1当前行的并将其粘贴到所选工作表的下一个空行,例如Power or Gas or Groceries。所有这一切终于工作正常了。

问题:但是,如果我重新分类线路费用,例如从我最初的选择Gas我把它改为Power它会再次复制A1:F1当前行并移动到Power工作表。这很棒,但我需要它来删除我们从我们的Gas tab.

可能的解决方案?:我能想到的唯一方法是添加类似的内容...如果下拉列表不为空并且我更改了原始选择,那么我需要找到以下内容的精确文本副本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 宏(每种情况都有一个类似的宏):

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

有什么建议么?


尝试这个。您可能需要稍微调整一下,但它应该可以帮助您前进。我添加了一个全局变量,您可以存储下拉列表中的先前值。
In the SelectionChange我尝试创建错误处理来处理选定的多个单元格。如果仅选择 1 个单元格,则该值将绑定到全局变量。然后,您可以使用该变量在下拉列表中查找上一个值的工作表,循环遍历该工作表,然后删除该值。

首先,我已将其添加到您的天然气、电力等子项目中。使它们充满活力。

Sub Power(c As Range)

    Dim rng As Range

    Set rng = Nothing
    Set rng = Range("A" & c.Row & ":F" & c.Row) '<< A1:F1 here is *relative to c.EntireRow*

    'copy the values
    With Worksheets("Power").Cells(Rows.Count, 1).End(xlUp)
        .Offset(1, 0).Resize(1, rng.Cells.Count).Value = rng.Value

        ' Copy formating from Master Sheet
        With Worksheets("Master")
            Range("A" & c.Row & ":F" & c.Row).Copy
        End With
        .Offset(1, 0).PasteSpecial xlPasteFormats
        Application.CutCopyMode = False

    End With

End Sub

在主表(不是模块)下,我添加了以下内容:

' Add this to the absolute top of the sheet, must be outside a procedure (sub)
Option Explicit
Public cbxOldVal As String
Dim PrevVal As Variant

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Rows.Count > 1 Then Exit Sub
If Target.Columns.Count > 1 Then Exit Sub

cbxOldVal = Target.Value
End Sub

Private Sub Worksheet_Activate()
    If Selection.Rows.Count = 1 And Selection.Columns.Count = 1 Then
        PrevVal = Selection.Value
    Else
        PrevVal = Selection
    End If
End Sub

将其添加到您的Worksheet_Change事件。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range, c As Range
Set rng = Intersect(Target, Range("G2:G1001"))

If Not Intersect(Target, Columns("G")) Is Nothing Then
    If PrevVal <> "" Or cbxOldVal <> "" Then
        If cbxOldVal = Target.Value Then
            MsgBox "You have to click on another cell " & vbNewLine & "and then click back on " & Target.Address & " to change the value", vbExclamation, "Error"
            Cells(Target.Row, Target.Column) = PrevVal
            Exit Sub
        ElseIf Target.Value = "" Or Target.Value = PrevVal Then Exit Sub
        End If
    End If
End If

If Not rng Is Nothing Then
' Your loop

然后我添加了一些代码到你的Worksheet_Change事件。将其添加到之后End Select.

    If cbxOldVal = "" Then
    ' do nothing

    Else

        With Worksheets(cbxOldVal)

            Dim i As Integer
            Dim strFindA As String, strFindB As String, strFindC As String
            Dim strFindD As String, strFindE As String, strFindF As String
            strFindA = Sheets("Master").Range("A" & c.Row)
            strFindB = Sheets("Master").Range("B" & c.Row)
            strFindC = Sheets("Master").Range("C" & c.Row)
            strFindD = Sheets("Master").Range("D" & c.Row)
            strFindE = Sheets("Master").Range("E" & c.Row)
            strFindF = Sheets("Master").Range("F" & c.Row)

            For i = 1 To 100    ' replace with lastrow

            If .Cells(i, 1).Value = strFindA _
            And .Cells(i, 2).Value = strFindB _
            And .Cells(i, 3).Value = strFindC _
            And .Cells(i, 4).Value = strFindD _
            And .Cells(i, 5).Value = strFindE _
            And .Cells(i, 6).Value = strFindF _
            Then

            .Rows(i).EntireRow.Delete
            MsgBox "deleted row " & i
            GoTo skip:

            End If

            Next i


        End With
    End If
skip:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果下拉列表中的选择发生更改,则从工作表中删除数据 的相关文章

  • VBA 使用 Like 运算符删除行

    简单的事情并不简单 我试图根据具有以 2L 开头的数据的特定列删除行 所以我写了这段代码 LastRow可以理解 Sub Cleanup For i 1 To LastRow If Range F i Like 2L Then Rows i
  • VBA中如何四舍五入到小数点后两位?

    在单元格 B2 中 在进行计算之前 我的变量值为 297 123 在 VBA 中 我想将其四舍五入为 297 12 请参阅下面的代码了解我的尝试 两者都将燃油评估为 297 我做错了什么 Dim fuel As Integer Dim li
  • 如何从 500 个 .xls Excel 文件中的单元格中获取数据?

    我想问你如何从许多Excel中的几个确定的 并且总是相同的 单元格中获取数据 xls文件 即我有一个清单 xls文件位于一个文件夹中 每个文件内部都有相同的表 但具有不同的值 我想从以下位置获取数据A1 C2 E3从文件夹中的所有文件中提取
  • 如何将 xlsx 读取为 pandas 数据框,并将公式作为字符串

    我有一个包含一些计算列的 Excel 文件 例如 我在 a 列中有一些数据 而 b 列是使用 a 列中的值计算的 我需要将新数据附加到 a 列并计算 b 列并保存文件 import pandas as pd df pd DataFrame
  • Excel 自动填充列 X++++..Y++..Z+

    如何自动填充之间的值 选择 A 列 CTRL G gt Blanks gt OK Type press UpArrow 然后按CTRL ENTER See 这个链接 http www techrepublic com blog msoffi
  • 使用 If 语句执行 Do Until 直到达到特定值

    我正在处理一份大数据表 我需要代码从特定单元格中减去 直到该值大于某个数字 如果这个数字没有达到 我希望它变成0 例如如果A3 A2 gt Q5 then E3 A3 A2 if lt Q5 do A3 A1 如果这不起作用E2 0 我需要
  • Excel中的MD5哈希函数?

    我想将文档中的多个 Excel 单元格从序列号转换为该序列号的 MD5 哈希值 excel中是否有预编译公式可以做到这一点 或者是我执行VBA的唯一选择 如果是VBA 我该怎么做 问题中的一些链接Excel VBA 的密码哈希函数 http
  • 将图表导出为图像有时会生成空文件

    I m doing a macro that exports all the charts in the sheet and then opens Outlook and attaches them However I ve noticed
  • VBA - 填充自定义功能区下拉列表/列表框

    我无法填充下拉列表 列表框 原始代码来自 https exceloffthegrid com inserting a dynamic drop down in ribbon https exceloffthegrid com inserti
  • 导出到 Excel 时如何避免“数字存储为文本”

    当我将表格从 Access 导出到 Excel 时 所有数字都显示为文本 并且单元格上有绿色箭头 有没有办法自动修复此错误 或者有另一种导出方法可以解决该错误 作为参考 这是我导出的方式 DoCmd TransferSpreadsheet
  • 从网站上的表格中抓取数据,而无需搜索标签

    这是这个问题的延续使用 InStr 搜索引号 空格 冒号等 https stackoverflow com questions 52673819 using instr to search for quotes spaces colons
  • Countif 不适用于小时和/或日期

    您好 我有 3 列内的数据 A 目的地 例如洛杉矶 B 承运人 例如 Ups C 发货时间 预计 4 00 使用的时间是24小时时间 不含Am Pm 我需要进行计数才能知道在特定时间我们有多少批货物 尝试过 COUNTIF A1 A100
  • 使用 R Shiny 从 XLConnect 下载 Excel 文件

    有没有人尝试过使用 R Shiny 中的下载处理程序通过 XLConnect 下载新创建的 Excel 文件 在 ui R 中有一行不起眼的行 downloadButton downloadData Download 在 server R
  • 文本到行 VBA Excel

    我有一个电子表格 其中包含大约 4000 行数据 其中一列数据具有唯一的订单号 我希望使用 作为分隔符将其分隔 所以本质上我想要 Name Order Date Jane 123 001 111 08 15 2013 Gary 333 12
  • 运行代码(而不是查询)时如何在状态栏上显示进度

    我已经发布了有关在 MS Access 2010 中运行查询时更新状态栏的问题 请参阅在 MS Access 中运行一系列查询时如何在状态栏上显示进度 https stackoverflow com questions 27765376 h
  • 将范围内的每个值乘以常数,但跳过空白单元格

    我需要一个简单快速的解决方案 用于将范围内的所有值乘以 VBA 代码中的数值 我知道这个解决方案 将整个范围乘以值 https stackoverflow com questions 18990541 multiply entire ran
  • 使用 VBA 的下拉菜单

    我需要使用 VBA 从下拉菜单中选择特定选项 我怎样才能做到这一点 链接到我们试图从中提取的网页 IE document getElementsByName down count click 我尝试过的代码 Full Module Priv
  • xlwings: 删除一个列 | Excel 中的行

    如何删除 Excel 中的一行 wb xw Book Shipment xlsx wb sheets Page1 1 range 1 1 clear clear 用于删除内容 我想删除该行 我很惊讶 clear 函数有效 但 delete
  • 在 Excel 表格中选择多列的代码

    我是 Excel VBA 新手 我需要修改我的代码 以便我能够进一步进行 我想在 Excel 表格中选择多个表格列 这是我的代码 Dim ws As Worksheet Dim tbl As ListObject Set ws Sheets
  • 如何使用 Nodejs 创建 Excel 文件?

    我是一名 Nodejs 程序员 现在我有一个数据表 我想将其保存为 Excel 文件格式 我该怎么做呢 我找到了一些 Node 库 但其中大多数是 Excel 解析器而不是 Excel 编写器 我使用的是 Linux 服务器 因此需要一些可

随机推荐

  • MySQL LIKE + php sprintf

    test sprintf SELECT FROM table WHERE text LIKE s mysql real escape string test echo test output SELECT FROM table WHERE
  • 从各种 JSON 路径创建 JSON 对象

    我们需要从提供的各种 JSONPaths 创建 JSON 对象 例如 下面是要创建的新 JSON 对象中的两个路径以及该路径的值 student firstName Abc student subject physics mark 100
  • 如何使用 flutter cloud_firestore 包传递 firestore 身份验证令牌

    我在用Firebase 身份验证 REST api进行身份验证 这部分工作正常 因为我可以登录 注册用户 并且我可以获得uid和授权token back 当尝试写入 Cloud Firestore 时 如果我将 Cloud Firestor
  • pytest 装置和 confest.py 模块可以跨包共享吗?

    假设我有packageA它提供了一个类usefulClass pytest 固定装置test stuff py模块 并测试配置conftest py模块 此外 假设我有packageBand packageC两者都导入packageA 通过
  • Azure Devops:如何使用 if 语句设置组变量

    我正在尝试根据管道中存在的一个变量来设置变量组 yaml 看起来像这样 但是当我运行管道时出现以下错误 如果我删除 组 QA or 组 PROD 管道运行没有任何问题 我究竟做错了什么 这是略有不同的解决方案 但您可以实现您的目标 如果我理
  • 在 Google App Engine 上使用 Python 进行开发时,应该使用什么模拟对象框架?

    我正在使用 Python 和 Django 如果有的话 在 Google App Engine 上开发一个应用程序 我应该帮助哪个模拟对象框架来协助单元测试 我看到有很多独立的项目 即http python mock sourceforge
  • 如何模拟返回 Task> 和 Task> 的方法?

    我正在尝试设置一个单元测试初始值设定项 以 Moq 形式 其中正在模拟接口方法 public interface IRepository Task
  • 管理实验中的多个任意逻辑模拟

    我们正在 AnyLogic 7 下开发 ABM 并且我们希望通过单个实验进行多个模拟 将为每次模拟运行设置不同的参数 以便为一小组标准场景生成结果 我们有一个无需按 运行 即可自动启动的实验 随后按下 运行 会增加实验计数器并重新运行模型
  • 为什么 Nettle 2.4 的 `configure` 找不到 GMP 5.0.2?

    我正在尝试建立GnuTLS http www gnu org software gnutls 在 Mac OS X 10 5 Leopard 服务器上 是的 我知道 它有点过时 但这就是该服务器目前正在运行的 并且遇到了构建问题Nettle
  • AngularJS 中的 ng-app V/S data-ng-app

    在AngularJS中使用时ng app ng app在文档中找到的将用于定义根元素以作为应用程序自动引导 在某些应用程序中 它被用作data ng app 以下两个声明是否有任何区别 如果是 则什么 如果否 则哪一个是重要的 为什么 1
  • Java线程睡眠与中断异常

    为什么睡眠线程需要 try catch 来捕获中断异常 为什么睡眠甚至会发出中断异常错误 这是我在java编程中真正想了解的两个问题 我一直在通过谷歌搜索 但仍然没有找到明确的解释来解释为什么会发生这两件事 An InterruptedEx
  • 无符号负基元?

    在 C 中我们可以创建原语unsigned 但他们总是积极的 还有一种方法可以生成无符号负变量吗 我知道 无符号 这个词的意思是 没有符号 所以也不是减号 但我认为C 必须提供它 No unsigned只能包含非负数 如果您需要一个仅表示负
  • 如何获取机器的mac地址

    我想要获取机器的 MAC 地址 但是下面编写的代码仅在 Internet 连接到我的机器时显示 MAC 地址 其他它将返回 null 我使用的是 Windows 7 import java net InetAddress import ja
  • 替换 hive 中的空字符串 - Nvl 和 COALESCE 已尝试

    如何用其他值替换空字符串 长度 0 已使用Nvl and COALESCE但两者都不会替换为替换值 因为该值不为空 我可以用case语句 但寻找内置函数 如果有 因为你有空字符串所以当我们使用合并或 nvl仅当我们有空值在数据中 这些功能不
  • 4.0 和 2.0 应用程序之间的 Asp.Net 表单身份验证 SSO

    4 0 框架应用程序和 2 0 框架应用程序之间的单点登录似乎已被破坏 我有一个基于 asp net Framework 2 0 构建的旧应用程序和一个基于 asp net Framework 4 0 构建的新应用程序 我正在尝试在两者之间
  • VS2010图表控件:减少Y轴边距

    如何减小如下所示的左侧边距区域 标记为红色 的宽度 尝试这样的事情 Chart ChartAreas Chart ChartArea ObjectName InnerPlotPosition New System Windows Forms
  • 我可以暂时暂停 ORMLite 中自动生成的 ID 吗?

    我在我目前正在编写的一个小应用程序中使用 Android 和 ORMLite 该应用程序的目标是具有有效的导入 导出功能 为此我使用简单的 XML 框架 在某种程度上 一切都运转良好 情况如下 对象 A 包含引用对象 B 的外键 对象 B
  • 有没有办法从字符串创建 SyndicateFeed?

    我正在尝试从本地存储的 XML 数据重新创建 SyndicateFeed 对象 System ServiceModel Syndicate 如果我使用 XMLDocument 这会很容易 我会调用 LoadXml string Syndic
  • 任意长度的通用位向量类型

    出于与此处描述相同的原因 用户定义的未解释函数 https stackoverflow com questions 7740556 equivalent of define fun in z3 api 我想定义我自己的未解释函数 bvred
  • 如果下拉列表中的选择发生更改,则从工作表中删除数据

    跟进之前回答的问题 Excel VBA 基于一系列下拉列表运行宏 https stackoverflow com questions 40478350 excel vba run a macro based on a range of dr