AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / coding / 问题 / 79556977
Accepted
Shiela
Shiela
Asked: 2025-04-05 20:49:04 +0800 CST2025-04-05 20:49:04 +0800 CST 2025-04-05 20:49:04 +0800 CST

如何使用来自 Sheet2 的值的组合框对 Sheet1 的数据进行排序?

  • 772

我这里有 2 张表。一张表用于存放主要数据。另一张表用于存放“名队”条目。

Sheet1(故意留空——如果有空白也可以查看结果)

一个 乙 碳
姓名 添加日期 修改日期
安娜 2025 年 3 月 11 日 2025 年 3 月 18 日
小牛 2025 年 3 月 11 日 2025 年 3 月 12 日
丽莎 2025 年 3 月 14 日 2025 年 3 月 13 日
罗恩 2025 年 3 月 11 日 2025 年 3 月 14 日
玛丽 2025 年 3 月 12 日 2025 年 3 月 15 日
库尔特 2025 年 3 月 13 日 2025 年 3 月 17 日
2025 年 3 月 15 日
凯文 2025 年 3 月 16 日

工作表2

一个 乙
团队 姓名
露西 安娜
露西 小牛
彼得 丽莎
彼得 罗恩
诺里 玛丽
诺里 库尔特
卡尔 莫娜
卡尔 凯文

列表框:

错误的团队

我想选择来自 Sheet2 的团队。下面有一段代码,但会出现“类型不匹配”的错误。

在 ComboBox 更改期间调用 showList:

Sub showList()
    Dim ws As Worksheet, colList As Collection
    Dim arrData, arrList, i As Long, j As Long
    Dim targetTeam As Variant
    ' *** 
    Dim ws2 As Worksheet: Set ws2 = Worksheets("Sheet2")
    Dim arr: arr = ws2.Range("B1").CurrentRegion.Value
    Dim dict As Object: Set dict = CreateObject("Scripting.Dictionary")
    For i = 2 To UBound(arr)
        dict(arr(i, 2)) = Empty
    Next
   ' ***

    Set colList = New Collection
    Set ws = Worksheets("Sheet1")
    arrData = ws.Range("A1:E" & ws.Cells(ws.Rows.count, "A").End(xlUp).Row)
    For i = 2 To UBound(arrData)
            targetTeam = Application.VLookup((arrData(i, 2)), ws2.Range("B1").CurrentRegion.Value, -1, False)
                If dict.exists(arrData(i, 1)) And cmbTeam = targetTeam Then
                    colList.Add i, CStr(i)
                End If

    Next
    ReDim arrList(1 To colList.count + 1, 1 To UBound(arrData))
    For j = 1 To 5
        arrList(1, j) = arrData(1, j) ' header
        arrList(1, 4) = "Date Added Duration"
        arrList(1, 5) = "Date Modified Duration"
        For i = 1 To colList.count
                arrList(i + 1, j) = arrData(colList(i), j)
                    Dim dateA As Variant
                    Dim dateB As Variant
                    Dim dateC As Variant
                    Dim difference1 As Long
                    Dim difference2 As Long
                
                ' Assign values to the dates
                dateA = arrList(i + 1, 2)
                dateB = arrList(i + 1, 3)
                dateC = Format(Now, "m/d/yyyy")
                
                ' Calculate the difference in days
                difference1 = DateDiff("d", dateA, dateC) 'date today minus date added
                
                If Not dateA = "" Then
                    If difference1 > 1 Then
                    arrList(i + 1, 4) = difference1 & " days"
                    Else
                    arrList(i + 1, 4) = difference1 & " day"
                    End If
                Else
                    arrList(i + 1, 4) = "Missing"
                End If
                
                difference2 = DateDiff("d", dateB, dateC) 'date today minus date modified
                
                If Not dateB = "" Then
                    If difference2 > 1 Then
                    arrList(i + 1, 5) = difference2 & " days"
                    Else
                    arrList(i + 1, 5) = difference2 & " day"
                    End If
                Else
                    arrList(i + 1, 5) = "Missing"
                End If
        Next
    Next
    With Me.ListBox1
        .Clear
        .ColumnCount = UBound(arrData, 2)
        .list = arrList
    End With
End Sub

类型不匹配错误

错误代码

期望:

期望结果

excel
  • 1 1 个回答
  • 63 Views

1 个回答

  • Voted
  1. Best Answer
    CDP1802
    2025-04-06T00:51:53+08:002025-04-06T00:51:53+08:00

    过滤词典条目

    Sub showList()
    
        Dim ws As Worksheet, ws2 As Worksheet, colList As Collection
        Dim arr, arrData, arrList, i As Long, j As Long, n As Long
        Dim dt As Date, dif As Long, targetTeam As Variant
    
        targetTeam = "Nory" ' replace "Nory" with cmbTeam
        Set ws2 = Sheets("Sheet2")
        arr = ws2.Range("B1").CurrentRegion.Value
        
        ' names for team
        Dim dict As Object: Set dict = CreateObject("Scripting.Dictionary")
        For i = 2 To UBound(arr)
            If arr(i, 1) = targetTeam Then
                dict(arr(i, 2)) = i
            End If
        Next
       
        ' data for team
        Set ws = Sheets("Sheet1")
        arrData = ws.Range("A1:E" & ws.Cells(ws.Rows.Count, "A").End(xlUp).Row)
        Set colList = New Collection
        For i = 2 To UBound(arrData)
            If dict.exists(arrData(i, 1)) Then
                colList.Add i, CStr(i)
            End If
        Next
        
        ReDim arrList(1 To colList.Count + 1, 1 To 5)
        arrList(1, 4) = "Date Added Duration"
        arrList(1, 5) = "Date Modified Duration"
        
        For j = 1 To 3
            arrList(1, j) = arrData(1, j) ' header
           
            For n = 1 To colList.Count
                i = n + 1
                arrList(i, j) = arrData(colList(n), j)
                
                ' calc add and mod diffs
                If j > 1 Then
                    If arrList(i, j) = "" Then
                        arrList(i, j + 2) = "Missing"
                    Else
                        dt = arrList(i, j)
                        dif = DateDiff("d", dt, Now) 'date today minus date add/mod
                        arrList(i, j + 2) = dif & IIf(dif > 1, " days", " day")
                    End If
                End If
            Next
        Next
        
        With Me.ListBox1
            .Clear
            .ColumnCount = UBound(arrList, 2)
            .List = arrList
        End With
    End Sub
    
    • 1

相关问题

  • 如何返回列出的合同上有费率但系统中没有费率的特定行?

  • 当某些值重复时自动在表中添加参考字段?

  • 循环遍历具有更改单元格地址的列

  • 搜索字符串并输出与该字符串对应的值

  • Excel中有没有一种方法可以计算字符串中特定文本的出现次数,但也包括前一个字符?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    重新格式化数字,在固定位置插入分隔符

    • 6 个回答
  • Marko Smith

    为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会?

    • 2 个回答
  • Marko Smith

    VScode 自动卸载扩展的问题(Material 主题)

    • 2 个回答
  • Marko Smith

    Vue 3:创建时出错“预期标识符但发现‘导入’”[重复]

    • 1 个回答
  • Marko Smith

    具有指定基础类型但没有枚举器的“枚举类”的用途是什么?

    • 1 个回答
  • Marko Smith

    如何修复未手动导入的模块的 MODULE_NOT_FOUND 错误?

    • 6 个回答
  • Marko Smith

    `(表达式,左值) = 右值` 在 C 或 C++ 中是有效的赋值吗?为什么有些编译器会接受/拒绝它?

    • 3 个回答
  • Marko Smith

    在 C++ 中,一个不执行任何操作的空程序需要 204KB 的堆,但在 C 中则不需要

    • 1 个回答
  • Marko Smith

    PowerBI 目前与 BigQuery 不兼容:Simba 驱动程序与 Windows 更新有关

    • 2 个回答
  • Marko Smith

    AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String”

    • 1 个回答
  • Martin Hope
    Fantastic Mr Fox msvc std::vector 实现中仅不接受可复制类型 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant 使用 chrono 查找下一个工作日 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor 构造函数的成员初始化程序可以包含另一个成员的初始化吗? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský 为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul C++20 是否进行了更改,允许从已知绑定数组“type(&)[N]”转换为未知绑定数组“type(&)[]”? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann 为什么 {2,3,10} 和 {x,3,10} (x=2) 的顺序不同? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller 在 5.2 版中,bash 条件语句中的 [[ .. ]] 中的分号现在是可选的吗? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench 为什么双破折号 (--) 会导致此 MariaDB 子句评估为 true? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng 为什么 `dict(id=1, **{'id': 2})` 有时会引发 `KeyError: 'id'` 而不是 TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String” 2024-03-20 03:12:31 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve