复制带有选中复选框的行

2024-01-09

我想将三张纸(“肝脏”、“肺”和“肾脏”)中选中复选框的行合并到一张“报告”中。我想抓取 A 列中不包含单词“sample”的行。当我将数据粘贴到“Report”中时,我想通过在其间添加一行,用相应的原始工作表名称来标记每组行,其中包含A 列中的工作表名称。

我想出了这段代码,它进入无限循环,我必须杀死 Excel 才能停止它。这仅适用于“肺”表,但我希望为其他两张表复制它。 理想情况下,我想使用数组来传输数据,但我不确定如何解决。任何关于如何修复我已有的或改进它的建议将不胜感激。

谢谢

For Each chkbx In ActiveSheet.CheckBoxes

 If chkbx.Value = 1 Then
    For r = 2 To Rows.count
         If Cells(r, 1).Top = chkbx.Top And InStr(Cells(r, 1).Value, "Sample") < 0 Then
         '
           With Worksheets("Report")
              LRow = .Range("A" & Rows.count).End(xlUp).Row + 1
            .Range("A" & LRow & ":P" & LRow) = _
             Worksheets("Lung").Range("A" & r & ":P" & r).Value
         End With
           Exit For
       End If
     Next r
   End If
 Next

下面的代码将生成以下报告(详细信息如下):

.

有 3 个部分,但所有代码都应粘贴到一个用户模块中:

.

要执行的子程序:

Option Explicit

Private Const REPORT    As String = "Report_"
Private Const EXCLUDE   As String = "Sample"
Private Const L_COL     As String = "P"

Private wsRep As Worksheet
Private lRowR As Long

Public Sub updateSet1()
    updateSet 1
End Sub
Public Sub updateSet2()
    updateSet 2
End Sub
Public Sub updateSet3()
    updateSet 3
End Sub

Public Sub updateSet(ByVal id As Byte)
    Application.ScreenUpdating = False
    showSet id
    Application.ScreenUpdating = True
End Sub

Public Sub consolidateAllSheets()
    Application.ScreenUpdating = False
    With ThisWorkbook
        consolidateReport .Worksheets("COLON"), True  'time stamp to 1st line of report
        consolidateReport .Worksheets("LUNG")
        consolidateReport .Worksheets("MELANOMA")
        wsRep.Rows(lRowR).Borders(xlEdgeBottom).LineStyle = xlContinuous
    End With
    Application.ScreenUpdating = True
End Sub

.

showSet() - 使用1 组 1, 2 组 2, Set2 已编辑 3 个:

Public Sub showSet(ByVal id As Byte)
    Dim ws As Worksheet, cb As Shape, lft As Double, mid As Double, thisWs As Worksheet
    Dim lRed As Long, lBlu As Long, cn As String, cbo As Object, s1 As Boolean

    If id <> 1 And id <> 2 And id <> 3 Then Exit Sub

    lRed = RGB(255, 155, 155): lBlu = RGB(155, 155, 255)
    Set thisWs = ThisWorkbook.ActiveSheet
    For Each ws In ThisWorkbook.Worksheets
        If InStr(1, ws.Name, REPORT, vbTextCompare) = 0 Then
            lft = ws.Cells(1, 2).Left
            mid = lft + ((ws.Cells(1, 2).Width / 2) - 5)
            For Each cb In ws.Shapes
                cn = cb.Name
                Set cbo = cb.OLEFormat.Object
                s1 = InStr(1, cn, "set1", 1) > 0
                If id < 3 Then
                    cb.Visible = IIf(s1, (id = 1), (id <> 1))
                    cb.Left = IIf(cb.Visible, mid, lft)
                    cbo.Interior.Color = IIf(s1, lBlu, lRed)
                Else
                    cb.Visible = True
                    cb.Left = IIf(s1, lft + 3, mid + 6.5)
                    cbo.Interior.Color = IIf(s1, lBlu, lRed)
                End If: ws.Activate
                With cbo
                    .Width = 15
                    .Height = 15
                End With
            Next
        Else
            ws.Visible = IIf((id = 3), -1, IIf(InStr(1, ws.Name, id) = 0, 0, -1))
        End If
    Next
    thisWs.Activate   'to properly update checkbox visibility
End Sub

.

合并报告()

Public Sub consolidateReport(ByRef ws As Worksheet, Optional dt As Boolean = False)
    Dim fRowR As Long, vSetID As Byte, vSetName As String
    Dim lRow As Long, thisRow As Long, cb As Variant

    vSetID = IIf(ws.Shapes("cbSet2_03").Visible, 2, 1)
    vSetName = "Set" & vSetID
    Set wsRep = ThisWorkbook.Worksheets(REPORT & vSetID)
    fRowR = wsRep.Range("A" & wsRep.Rows.count).End(xlUp).Row
    If Not ws Is Nothing Then
        With ws
            lRow = .Range("A" & .Rows.count).End(xlUp).Row
            lRowR = fRowR + 1
            With wsRep.Cells(lRowR, 1)
                .Value2 = ws.name
                .Interior.Color = vbYellow
                If dt Then .Offset(0, 2) = Format(Now, "mmm dd yyyy, hh:mm AMPM")
            End With
            For Each cb In .Shapes
                If InStr(1, cb.name, vSetName, 0) Then
                    If cb.OLEFormat.Object.Value = 1 Then
                        thisRow = cb.TopLeftCell.Row
                        If InStr(1, .Cells(thisRow, 1).Value2, EXCLUDE, 1) = 0 Then
                            lRowR = lRowR + 1
                            wsRep.Range("A" & lRowR & ":" & L_COL & lRowR).Value2 = _
                                .Range("A" & thisRow & ":" & L_COL & thisRow).Value2
                        End If
                    End If
                End If
            Next
            If fRowR = lRowR - 1 Then
                wsRep.Cells(lRowR, 1).EntireRow.Delete
                lRowR = lRowR - 1
                MsgBox "No checkboxes checked for sheet " & ws.name
            End If
        End With
    End If
End Sub

.

该过程从一个文件开始,预计每张纸上有 2 组复选框(第 2 列):

  • cbSet1_01、cbSet1_02、cbSet1_03...
  • cbSet2_01、cbSet2_02、cbSet2_03...

如这张图片所示

(复选框颜色将通过代码重置,只要它们遵循上面的命名约定)

.

  1. 通过运行生成两个文件,一个用于 Set1,另一个用于 Set2Sub updateSet()

    • showSet 1隐藏 Set2(Report_2 和所有复选框,在所有工作表上)- 保存 File1
    • showSet 2隐藏 Set1(Report_1 和所有复选框,在所有工作表上)- 保存 File2
  2. 分发,然后检索更新的文件

    • 打开File1并运行Sub consolidateAllSheets()生成 Report_1
    • 打开文件2并运行Sub consolidateAllSheets()生成 Report_2

      比较 Report_1 与 Report_2

  3. 通过运行生成用于编辑的 Set 2Sub updateSet()

    • showSet 3显示 Set1 和 Set2(所有复选框和两个报告)- 保存文件 3

      比较文件 1、文件 2 和文件 3

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

复制带有选中复选框的行 的相关文章

  • Outlook 无法识别一个或多个姓名

    我有以下 vba 代码 它读取邮箱并向任何发送无效代码作为邮箱回复的用户发送回复 但有时会收到运行时错误 Outlook 无法识别一个或多个名称 我的问题是 创建新的 MAPI 配置文件是否可以解决该问题 或者我是否需要添加一个代码来解析地
  • VBA 字符串 255 个字符限制

    我在使用 VBA 时遇到问题 并注意到它的字符串限制为 255 个字符 我实际上正在尝试通过 POST 发送 JSON 并暂停执行 我注意到该字符串始终只有 255 个字符 有没有办法调整字符串的大小或其他什么 我在这个问题上浪费了大约 6
  • 在组合框中显示可见工作表

    您好 我有以下代码来在组合框中显示工作表 创建工作表后 工作表会自动添加到列表中 我不希望隐藏的工作表在保管箱中可见 我怎么做 Option Explicit Private Sub ComboBox1 Change If ComboBox
  • 在 MS Word 中运行外部 vba 代码

    我可以将外部代码链接到 Word 文档吗 我有很多带有宏的 Word 文档 VBA 代码 全部使用相同的代码 我希望代码从外部源运行 而不是从所有这些文档中运行 这样 如果我必须更新代码 我只有一个地方需要更新 您可以创建一个模板并将其放入
  • 定义 js-xlsx 单元格范围

    我正在尝试使用 js xlsx 读取 Excel 值 我可以使用以下代码从工作簿工作表中获取单元格值 if typeof require undefined XLSX require xlsx var workbook XLSX readF
  • VBA中的字符串是可以迭代的数组吗?

    VBA中字符串是数组吗 例如 我可以像在 C C 中那样迭代它吗 做这样的事情 char myArray 10 for int i 0 i lt length i cout lt lt myArray i VBA 中的等价物是什么 它的行为
  • Excel工作簿关闭后反复打开

    我使用了 Application ontime 方法来调度一些宏 关闭工作簿后 它会一次又一次地打开 为了解决这个问题 我在工作簿上设置了另一个事件 BeforeClosed 现在它显示运行时错误 1004 Object Applicati
  • Excel VBA - 添加自定义数字格式

    我有一个在 Excel 外部生成的文件 其中包含许多百分比 所有这些百分比都有一位小数 当导入到 Excel 中时 Excel 会在百分比中添加第二位小数 这似乎是 Excel 中百分比的某种默认格式 它只是添加了一个 0 我想将所有两位小
  • numpy NPV 和 Excel NPV 有区别吗?

    我的 Excel 中有一行包含 11 个值 TotalSavings 0 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 贴现率为 0 08 我在 Excel 中使用 计算 NPVNPV
  • 如果总和为 0,则查找并删除带标题的最后一列

    我想创建一个宏 查找带有标题的最后一列 并仅当该列的总和等于零时才将其删除 到目前为止 这是我尝试过的 Dim LastCol As Long Dim i As Long With ThisWorkbook Sheets Sheet1 Fo
  • VBA在多个文件夹中搜索特定子文件夹并移动其中的所有文件

    你能帮助我吗 我想要一个宏vba来搜索SPECIFIC例如 所有存在并移动其文件的文件夹和子文件夹之间的子文件夹 Xfolder P Desktop Folder1 subfolder SUBFOLDER1 Xfolder 我正在使用 VB
  • 启动时的 Excel 加载项

    我正在使用 Visual C 创建 Microsoft Excel 的加载项 当我第一次创建解决方案时 它包含一个名为 ThisAddIn Startup 的函数 我在这个函数中添加了以下代码 private void ThisAddIn
  • 如何通过电子邮件发送 Excel 文件?

    我有一个 excel 文件 Excel 2003 xls 格式 我想用 c 通过电子邮件发送它 我的代码成功发送它 但是当我尝试打开响应文件时 它似乎编码错误 例如 这里是响应文件名 utf 8 B RWxzesOhbW9sw6FzXzIw
  • 使用 ClosedXML 创建数据透视表

    我正在尝试使用 ClosedXML V0 91 1 创建数据透视表 但我不断遇到问题 因为我的 Excel 文件包含不可读的内容 然后 Excel 工作簿在单击时删除了我的数据透视表Yes below 下面是我击中时的显示Yes 它正在删除
  • 通过 Excel / VBA 调用 DLL 中的 C++ 函数在传递双参数时生成异常

    我试图通过 DLL 在 Excel VBA 中使用 C C 静态函数 我在 VS17 中调试时遇到异常 我怀疑这是参数传递方式的问题 它是双精度 EXCEL EXE 中 0x00007FFA28BBA14F kernel32 dll 处抛出
  • Powershell - 在不安装 Excel 的情况下将 CSV 转换为 XLS

    我有一台自动生成报告的服务器 报告采用 CSV 格式 我需要能够直接加密文件 无需第三方压缩 无 WinZIP 或 WinRAR 我认为最好的想法是将 CSV 转换为 XLS 然后通过 Powershell 密码保护 XLS 文件 不幸的是
  • Excel - 在一列中查找重复项,然后将数量求和到另一列中?

    查找一列中的重复项 然后将数量求和到另一列中 https i stack imgur com AADjd png DATA RESULT A 1 A 11 A 1 B 7 A 9 C 5 B 2 D 4 B 2 E 8 B 3 C 5 D
  • 如果 Excel 中的表格包含单元格引用,如何对其进行排序?

    我在工作表 1 中有一个 Excel 数据表 它引用了许多其他工作表中的各种不同单元格 当我尝试对工作表进行排序或过滤时 引用会随着单元格的移动而发生变化 但是 我不想手动进入每个单元格并在各处插入 符号 因为有些引用是连续的 我可能想稍后
  • 跳过行:将数据从 SSIS 导出到 Excel 文件

    我正在尝试使用 SSIS 将数据从 SQL Server 数据库导出到 Excel 文件中 我希望从第 6 行插入数据 第 5 行有标题 我可以映射标题名称Excel 目标编辑器 通过编写 SQL 命令到 SQL 表头 SELECT FRO
  • 将 Excel 文件读入 R 并锁定单元格

    我有一个 Excel 电子表格要读入 R 它受密码保护并锁定了单元格 我可以使用 excel link 导入受密码保护的文件 但我不知道如何解锁 取消保护单元格 excel link 给了我这个错误 gt

随机推荐

  • 基于 JSON 的数据库(如 Couchbase、CouchbaseLite、CouchDB 等)的理想复制过滤器?

    我要写一个过滤功能CouchDB服务器端过滤特定于用户的文档 此过滤器将只允许复制特定用户有权访问的少数选定文档 而不是复制 TB 大小的整个数据库 在这里我发现了一个类似的问题CouchDB 限制用户只能复制自己的文档 https sta
  • 通过 Gitignore 递归包含 Nuget DLL

    我正在将 GIT 与新的 ASP NET MVC 项目一起使用 我的 gitignore 文件中有一行用于忽略 dll dll 我想添加以下内容以在我的 NUGET 包文件夹中包含 即不要忽略 DLL packages dll 我遇到的问题
  • 将文件读取为字符串

    我需要在 android 中将 xml 文件作为 String 加载 以便我可以将其加载到 TBXML xml 解析器库并解析它 我现在将文件读取为 String 的实现需要大约 2 秒 即使对于一些 KB 的非常小的 xml 文件也是如此
  • 用于从字符串创建 JSX 元素的正确 TypeScript 类型

    我有一个组件 我想默认渲染为h2 我希望消费者能够根据需要指定不同的元素 下面的代码会导致错误 TS2604 JSX element type ElementType does not have any construct or call
  • Mongoose:连接选项中 socketTimeoutMS 的奇怪行为

    我试图在第一次与 mongoose connect 建立连接时定义自定义超时值 但看到一些奇怪的结果 如果我使用基本选项 没有指定任何超时 那么一切正常 options server auto reconnect true 但是 如果我尝试
  • 初始化结构体包含对结构体的引用

    是否可以有一个包含对结构的引用的结构 这些是如何初始化的 请参阅下面的简短示例 Thanks typedef struct int a typeInner1 typedef struct int b typeInner2 typedef s
  • 如何检测响应式网页设计的屏幕尺寸?

    我用谷歌搜索了这个并得到了怪异模式网站 http www quirksmode org m tests widthtest html这给了你你的屏幕尺寸 拉起控制台我看到screen width and screen height可以直接从
  • 如何使对象正确地可散列?

    这是我的代码 class Hero def init self name age self name name self age age def str self return self name str self age def hash
  • 正则表达式匹配域扩展

    我需要确认域扩展名是否存在 到目前为止 我还无法获得域名扩展的匹配项 其中域名可以包含通配符 gmail com msn com mac com comcast net DomainPartOfEmail Right temp Len te
  • C++ 从 CreateProcess() 获取 UTF-8 输出

    我无法让它工作 所以我得到 UTF 8 输出CreateProcess into wstring 目前我正在运行此方法来执行此操作 但没有 UTF 8 输出 HANDLE g hChildStd OUT Rd NULL HANDLE g h
  • 让 PEAR 在 XAMPP(Windows 上的 Apache/MySQL 堆栈)上工作

    我正在尝试安装Laconica http laconi ca 在我的 Windows 开发服务器上使用 XAMPP 的开源微博应用程序提供的说明 http laconi ca trac wiki InstallationWindows 网站
  • Perl REST 流程布局

    我正在使用 Apache 和 Perl modperl 以及处理程序来处理请求 我对此很陌生 我不太确定如何以合理的方式安排事情 现在我有以下内容 package MyClass Handler use warnings use stric
  • 在 Swift 4 中将数据转换为 DispatchData

    我正在将一个项目迁移到 Swift 4 但我无法弄清楚应该如何使用新的 API s 在 Swift 4 中执行此操作 以下代码是旧的 Swift 3 方式 从函数中间开始 因此需要保护 let formattedString A strin
  • 为什么在我的字符串末尾添加换行符?

    我有一个小问题 我注意到 出于某种原因 当我使用 连接两个变量时 Python 自动使用换行符 for i in range o a Before readline b After readline if a b lines append
  • Django 模型无线电输入

    我正在尝试将单选按钮合并到我的表单中 在我的forms py我的表单有以下字段 class ProfileForm forms ModelForm class Meta model Profile fields first name las
  • 单击 Android 中的 URL 时会打开我的应用程序

    我定义了一个意图过滤器 以便从某些类型的 URL 启动我的应用程序 重点是它是针对所有类型的链接启动的 而我只想针对具体的主机名启动 这是我的清单
  • System.InvalidOperationException:集合已修改

    我在枚举队列时遇到以下异常 系统 InvalidOperationException 集合已修改 枚举 操作可能无法执行 这是代码摘录 1 private bool extractWriteActions out List
  • Kotlin 与正则表达式的拆分工作不符合预期

    我正在尝试将字符串拆分为 16 个字符长度的块 所以首先我创建长度为 64 的字符串 val data Some string data String format 64s data 然后我用正则表达式分割它 val nameArray d
  • 带有列表理解的python三元迭代

    三元迭代可以吗 我的意思是一个简单的版本 尽管这个特定的例子可以用更好的方式来完成 c 0 list1 4 6 7 3 4 5 3 4 c 1 if 4 i for i in list1 else 0 一个更实际的例子 strList Ul
  • 复制带有选中复选框的行

    我想将三张纸 肝脏 肺 和 肾脏 中选中复选框的行合并到一张 报告 中 我想抓取 A 列中不包含单词 sample 的行 当我将数据粘贴到 Report 中时 我想通过在其间添加一行 用相应的原始工作表名称来标记每组行 其中包含A 列中的工