ComBox 更改后用时间计算填充列表框

2024-01-08

我这里有一个简单的用户表单,它根据组合框的更改填充列表框。

组合框中唯一列表的代码:

Private Sub UserForm_Initialize()
    'used this code to get a dynamic combobox unique Task list in Sheet1 Column A
    'but I wonder why there is an extra space after the last item in combobox
    Dim v, e
    With Sheets("Sheet1").Range("A2:A10000")
        v = .value
    End With
    With CreateObject("scripting.dictionary")
        .CompareMode = 1
        For Each e In v
            If Not .Exists(e) Then .Add e, Nothing
        Next
        If .Count Then Me.ComboBox1.List = Application.Transpose(.Keys)
    End With
End Sub

原始数据更新(在Excel中添加了F列和G列) ***请不要介意列的排列方式,因为它们有其用途。

Task     ||ID    ||PARAGRAPH #|| START        ||END       || Month    || Name
Writing  ||4823  ||  1        ||13:00:00      ||13:15:00  || January  || Larry
Reading  ||4823  ||  1        ||13:16:00      ||13:18:00  || February || Larry 
Writing  ||4823  ||  2        ||13:20:00      ||13:30:00  || March    || Larry
Reading  ||4823  ||  2        ||13:31:00      ||13:50:00  || April    || Larry
Writing  ||4824  ||  1        ||14:00:00      ||14:10:00  || October  || Cole
Reading  ||4824  ||  1        ||14:11:00      ||14:14:00  || October  || Cole

Image of Raw (added columns F and G): image of raw updated

***这是我更新的组合框更改与当前月份和列名称的期望结果(不需要在 Excel 工作表中具有总时间列,仅在列表框中):

Private Sub ComboBox1_Change()
    If ComboBox1.value = "Writing" And Month = current month Then '***
    'if values are present then
    'calculate time (end - start) for Writing rows
    'populate listbox of Writing entries with Total Time Column, Month Column, Name Column
    'no need to populate start and end cols       

    'if there are no values found in Sheet1
    'ListBox1 is just blank

ElseIf ComboBox1.value = "Reading" and Month = current month Then '***
    'if values are present then
    'calculate time (end - start) for Reading rows
    'populate listbox of Reading entries with Total Time Column, Month Column, Name Column
    'no need to populate start and end cols     

    'if there are no values found in Sheet1
    'ListBox1 is just blank
End If
End Sub

***更新了列表框所需的写作结果以及当前月份和列名称:

***更新了列表框所需的阅读结果以及当前月份和列名称:

Reading: reading outcome

注意:月份格式为 Now,“mmmm” 过滤时不需要名称。只需要提出清单即可。

This question https://stackoverflow.com/questions/77037452/excel-vba-form-show-unique-entries-with-time-calculation-in-listbox也有计算,但它是针对唯一 ID 的。当前问题不需要是唯一的,只要列表框根据组合框选择进行填充即可。这里的答案1满足组合框更改后的显示,但列表框中没有时间计算或总计列(结束-开始)。答案2在Edit之前有时间计算但没有月份和列名;答案 2 中编辑的答案返回空白列表框。提前致谢。


请测试下一个代码:

Private Sub ComboBox1_Change()
  Dim sh As Worksheet, lastR As Long, arr, arrFin, count As Long, i As Long, j As Long, k As Long
  
  Set sh = ActiveSheet 'use here the necessary one
  lastR = sh.Range("A" & sh.rows.count).End(xlUp).Row
  
      arr = sh.Range("A2:F" & lastR).value 'place the range in an array for faster processing
      count = WorksheetFunction.CountIf(sh.Range("A2:A" & lastR), ComboBox1.value) 'count the specific string occurrences
      If count > 0 Then
        ReDim arrFin(1 To count, 1 To UBound(arr, 2) - 1) 'redim the final aray
        For i = 1 To UBound(arr)
            If arr(i, 1) = ComboBox1.value Then
                k = k + 1
                For j = 1 To UBound(arrFin, 2)
                    If j = UBound(arrFin, 2) Then
                        arrFin(k, j) = Format(arr(i, j + 1) - arr(i, j), "hh:mm:ss")
                    Else
                        arrFin(k, j) = arr(i, j)
                    End If
                Next j
            End If
        Next i
      Else
        listBox1.Clear
      End If

     With listBox1
        .ColumnCount = UBound(arrFin, 2)
        .List = arrFin
     End With
End Sub

当然,你必须根据你的需要设置每列的宽度。

Edited:

下一个版本也将在第六列(当前月份)上过滤返回的数组,同时也会引入第七列。请注意 G:G 列中包含 STRINGS 月份名称:

Private Sub ComboBox1_Change()
  Dim sh As Worksheet, lastR As Long, arr, arrFin, count As Long, i As Long, j As Long, k As Long
  Dim arrMonths: arrMonths = Split("January,February,March,April,May,June,July,August,September,October,November,December", ",")
  Dim curMonth As String: curMonth = arrMonths(Month(Date) - 1)
  
  Set sh = ActiveSheet 'use here the necessary one
  lastR = sh.Range("A" & sh.Rows.count).End(xlUp).Row 'last row in the range to be processed
  
      arr = sh.Range("A2:G" & lastR).Value 'place the range in an array for faster processing
      
      'calculate the necessary array elements:
      count = WorksheetFunction.CountIfs(sh.Range("A2:A" & lastR), ComboBox1.Value, sh.Range("F2:F" & lastR), curMonth)

      If count > 0 Then
        ReDim arrFin(1 To count, 1 To UBound(arr, 2) - 1) 'redim the necessary array to keep the rows to be loaded in list box
        For i = 1 To UBound(arr)
            If arr(i, 1) = ComboBox1.Value And arr(i, 6) = curMonth Then
                k = k + 1
                For j = 1 To UBound(arrFin, 2)
                    If j = UBound(arrFin, 2) - 2 Then
                        arrFin(k, j) = Format(arr(i, j + 1) - arr(i, j), "hh:mm:ss")
                    ElseIf j = UBound(arrFin, 2) - 1 Then
                        arrFin(k, UBound(arrFin, 2) - 1) = curMonth
                    ElseIf j = UBound(arrFin, 2) Then
                        arrFin(k, UBound(arrFin, 2)) = arr(i, j + 1)
                    Else
                        arrFin(k, j) = arr(i, j)
                    End If
                Next j
            End If
        Next i
      Else
        ListBox1.Clear: Exit Sub
      End If

      With ListBox1
        .ColumnCount = UBound(arrFin, 2)
        .List = arrFin
      End With
End Sub

如果您需要收集更多列,请将它们放在最后四列之前。根据问题设计了一段代码。如果必须返回一个新列,代码可以相对容易地进行调整,但是如果您想要再返回一个,然后再返回另外两个,则处理起来会很困难。

如果您将所有这些添加到最后四个之前,如上所述,那么在仅调整下一个问题后它将运行良好:

  • 将要处理的范围扩展到最后一列(arr = sh.Range("A2:x" & lastR).value)
  • 识别保留月份名称的列并在第二部分中使用它count计算 (sh.Range("x2:x" & lastR), curMonth)
  • 在数组处理中使用上述列 NUMBER (arr(i, colNo) = curMonth).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ComBox 更改后用时间计算填充列表框 的相关文章

  • 将ADODB二进制流转换为字符串vba

    我有以下问题 我有一个存储在服务器上的 CSV 文件 但它有 3 个字符作为分隔符 我想从 URL 加载数据并使用 作为分隔符将数据填充到 Excel 页面的列中 到目前为止 我找到了使用 ADODB 记录集从网站加载文件的代码 但我无法进
  • Pandas 0.22.0:IndexError:读取 xls 时列表索引超出范围

    我正在尝试将 282Mb 65536 行 x 138 列 xls 文件加载到 pandas 数据框中 import pandas as pd import os filename r invoicing xls dir os path di
  • 读取R中打开的Excel文件

    有没有办法将打开的Excel文件读入R 当Excel中打开一个excel文件时 Excel会对文件加锁 比如R中的read方法无法访问该文件 你能绕过这个锁吗 Thanks 编辑 这发生在带有原始 Excel 的 Windows 下 发生错
  • 如何将组合框放置在选项卡的标题中?

    是否可以在选项卡标题中显示组合框 如果是 extjs 组合则更好 我创造了jsfiddle 上的一个例子 http jsfiddle net andron v4ZzT 但存在这样的问题 1 无法显示Combo的选项列表 鼠标点击不起作用 2
  • SpreadsheetML 文件扩展名被 IE 和 FF 更改 - 内容类型错误?

    我正在 PHP 中生成 SpreadsheetML 文件 当用户下载文件并保存时 默认情况下文件会另存为 Report xml 并在 Excel 中打开 但是 如果选择在 Excel 中打开文件而不是保存文件 则文件名将更改为 Report
  • 如果总和为 0,则查找并删除带标题的最后一列

    我想创建一个宏 查找带有标题的最后一列 并仅当该列的总和等于零时才将其删除 到目前为止 这是我尝试过的 Dim LastCol As Long Dim i As Long With ThisWorkbook Sheets Sheet1 Fo
  • VSTO 替代方案 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 VSTO 有哪些替代方案 ManagedXll 能做什么而 VSTO 不能 你什么时候使用其中一个而不
  • Excel 工作表名称的有效字符

    在 Java 中 我们使用以下包以编程方式创建 Excel 文档 org apache poi hssf 如果您尝试设置工作表的名称 不是文件 而是内部 Excel 工作表 在以下情况下您将收到错误消息 名称超过 31 个字符 该名称包含以
  • Windows Phone 上的列表框样式所选项目

    我想知道如何在选择列表框的项目时添加样式 我有以下列表框
  • Redim Preserve 给出“下标超出范围”

    我想要Redim Preserve一个数组我不断收到错误 下标超出范围 我知道只有最后一个维度的大小可以更改 这正是我正在做的事情 这里出了什么问题 数组的类型是Variant BmMatrix Sheets BENCH Range a60
  • 当我在组合框中选择一个项目时,如何防止 TextChanged 事件?

    我有一个TextChanged http msdn microsoft com en us library system windows forms control textchanged aspx我的事件ComboBox http msd
  • 启动时的 Excel 加载项

    我正在使用 Visual C 创建 Microsoft Excel 的加载项 当我第一次创建解决方案时 它包含一个名为 ThisAddIn Startup 的函数 我在这个函数中添加了以下代码 private void ThisAddIn
  • 从 MS Access 调用存储过程会导致错误 3146

    当我使用下面所示的代码从 MS Access 前端调用 SQL Server 存储过程时 它停止运行并抛出运行时错误 3146 这个存储过程在 SQL Server 中工作正常 但是当我从 MS Access 运行时 它首先工作 但突然停止
  • 使用宏打开受信任文档或启用宏时 Excel 崩溃

    正如标题所示 我无法使用宏打开受信任的文档 Excel 立即崩溃 制作文档的副本允许其打开 因为该副本不受信任 并且我可以检查 VB 编辑器中的宏 但启用宏会导致另一次崩溃 为什么会发生这种情况以及我可以采取什么措施来解决它 我今天遇到了类
  • 使用 VBA 通过 Access 导航网页/操作 IE

    你好 StackOverflow 社区 我有一个关于使用 Access VBA 操作 IE 的问题 本质上 我正在尝试编写代码 使用 IE 打开特定网页 在该页面中搜索特定链接 目标链接的名称将取决于用户的情况 通过以编程方式单击该链接导航
  • 如何通过电子邮件发送 Excel 文件?

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

    我正在尝试使用 ClosedXML V0 91 1 创建数据透视表 但我不断遇到问题 因为我的 Excel 文件包含不可读的内容 然后 Excel 工作簿在单击时删除了我的数据透视表Yes below 下面是我击中时的显示Yes 它正在删除
  • 使用 VBA 将 Excel 电子表格中嵌入的 Word 文档保存到磁盘

    我们有一个 Excel 电子表格 当前使用存储在公司 LAN 上的 Word 模板生成报告 这对于内部用户来说效果很好 但对于没有连接到 LAN 的任何人来说就不行了 例如 笔记本电脑用户 管理层不希望将模板作为单独的文件分发给外部用户 而
  • 如何将参数从 Excel/VBA 传递到 Rstudio 中的脚本

    我正在尝试使用 Rstudio 从 VBA 打开 R 脚本 同时将参数传递给 R 脚本 然后我可以使用 commandArgs 访问该脚本 该问题与此处描述的问题非常相似 WScript Shell 用于运行路径中包含空格且来自 VBA 的
  • 在 powershell 中打开 Excel 时出错

    我需要用以下命令打开 Excel 文件CorruptLoad来自 powershell 脚本的参数 但是当我尝试做到这一点时 出现错误Exception calling Open with 15 argument s open method

随机推荐

  • 当用户尚未登录时,FB.ui() 在 Safari 中通过异步请求给出错误

    我正在尝试让用户能够在我的外部网站上的 Facebook 墙上发布内容 我在 Safari 中遇到问题 如果用户未登录 即他们尚未完成调用 FB login 的流程 则在调用 FB ui 时会收到以下 JS 错误 类型错误 未定义 不是对象
  • ServiceLoader.next 导致 NoClassDefFoundError

    我这么问是因为我完全not我确信我做了正确的事 我正在使用 Eclipse 进行 Web 项目 我们在包中将其称为 WebProject 废话 com web project 我希望 WebProject 在运行时加载 JAR 插件 所以我
  • 上下文、AsyncTask 和轮换更改

    这是一个很好的做法吗getApplicationContext 使用 AsyncTask 以便不必附加和分离 Activity以避免内存泄漏when发生旋转变化并且活动被破坏 我认为它应该是正确的 因为我实际上需要一个依赖于洞应用程序的上下
  • 使用 Gmail 凭据登录

    有没有一种方法可以使用 Google 凭据来获取基本用户信息 例如 电子邮件 姓名 性别 并在我的应用程序中使用它们 这就像允许用户使用 Gmail 登录我的应用程序一样 我也问了同样的问题here https stackoverflow
  • ggplot2 二维密度权重

    我正在尝试使用 R 中的 ggplot2 用二维密度轮廓绘制一些数据 我得到一个有点奇怪的结果 首先 我设置了 ggplot 对象 p lt ggplot data aes x Distance y Rate colour Company
  • 如何让 gVim 的 vimdiff 忽略大小写?

    我正在尝试比较两个程序集文件 其中一个文件全部大写 另一个文件全部小写 许多行在大小写和空格方面都是相同的 我尝试了以下操作 同时两个缓冲区处于差异模式 set diffopt icase set diffopt iwhite diffup
  • List.Add 似乎是重复的条目。怎么了?

    我有一堂这样的课 public class myClass public List
  • 计划任务的限制(或者任务持久化是如何实现的)?

    我开始阅读 Hangfire 文档 但没有发现任何有关任务限制的信息 正如声明的那样 任务 或作业 存储在某个地方 由于它们只是代表 据我所知 唯一可以存储的东西是代表 主体 IL 但是可能存在闭包 它为任务提供了一些上下文 例如一些外部服
  • 如何在Python中对二进制文件进行base64编码/解码?

    我正在尝试使用 python 使用以下简单代码对同一图像文件进行编码和解码 但每次输出文件都大于输入文件并且无法打开 这段代码有什么问题 import base64 with open img jpeg rb as image file e
  • 多线程异常和Dispose。为什么 Dispose 没有调用?

    using 语句保证该对象将被调用 Dispose 方法 在此示例中 这种情况没有发生 并且终结器方法也没有调用 为什么这一切 当其他线程发生异常时 如何更改代码以保证处理我的对象 class Program static void Mai
  • JavaScript 中的动态方法调用

    我知道我可以这样做 var myClass my class definition var methodName myMethod myClass methodName p1 p2 pN 但如果有这样的情况我该怎么办 if data som
  • 在 tkinter 画布上绘制 png 图像 python

    我正在尝试使用创建一个简单的游戏tkinter in python 3 5使用画布小部件 对于这个游戏 我需要能够使用透明 png 图像 这是我的代码 from PIL import ImageTk from tkinter import
  • 我可以使用 PHP 读取 .TXT 文件吗?

    当我开始使用 PHP 和 MySQL 编写站点时 我编写的第一个 PHP 脚本之一是初始化数据库的脚本 删除 创建数据库 删除 创建每个表 然后从脚本中的文字加载表 一切正常 呼呼 但我更喜欢从文件中读取数据 而不是在 PHP 脚本中对它们
  • 对 C99 可变长度数组 (VLA) 使用限制限定符

    我正在探索 C99 中简单循环的不同实现如何根据函数签名自动矢量化 这是我的代码 define PRAGMA SIMD Pragma simd define PRAGMA SIMD ifdef INTEL COMPILER define A
  • 调整容器引擎集群上实例类型的大小

    我们的一些容器在内存高于容器引擎集群中当前部署的实例类型时运行得更好 创建容器引擎集群后 是否有推荐的做法来为较大的实例重建容器引擎模板 例如 从 GCE 实例 n1 standard 2 到 n1 highmem 8 来运行具有 8GB
  • 为什么我的配置项没有从 codeigniter 中的 getenv() 条目填充?

    我将 phpdotenv 与 Codeigniter 一起使用 Codeigniter 的环境设置不太适合这个项目 我试图在我的 config php 文件中设置它 config site id getenv APP ID phpdoten
  • 在 Android 中以编程方式撤销权限

    是否可以在 Android Marshmallow 中删除或撤销应用程序的权限 请注意 它应该在运行时完成 因此使用 ADB shell 脚本或将应用程序转换为其字节 DEX 代码是不可能的 因为架构更改不是所需解决方案的选项 仅当您的应用
  • 高效排序 mongodb 地理空间查询的结果

    我有大量文档 例如 loc 10 32 24 34 relevance 0 434 并希望能够有效地执行如下查询 loc geoWithin box 103 10 1 80 43 30 232 与任意盒子 添加二维索引loc使得这非常快速和
  • PHP/GD:更好的高斯模糊

    我想用 GD 库模糊图像 不幸的是 GD 提供的 GAUSSIAN BLUR 效果还不够 我想要更多blurrish
  • ComBox 更改后用时间计算填充列表框

    我这里有一个简单的用户表单 它根据组合框的更改填充列表框 组合框中唯一列表的代码 Private Sub UserForm Initialize used this code to get a dynamic combobox unique