数组/集合和 for Each 循环中的用户定义类型

2023-11-27

VBA 在弹出窗口中显示,不允许我迭代具有用户定义类型的数组。 我写了一些代码,想知道如何解决这个问题。 这是一个小例子,重点关注我想要做的事情。

Option Explicit

Type Info
    source As String
    destination As String
End Type

Sub specialCopy()
    Dim target As Variant
    Dim AllTargets() As Info: AllTargets = SetAllTargets()
    For Each target In AllTargets
        CopyValues (target)
    Next
End Sub

Function SetAllTargets() As Info()
    Dim A As Info: A = SetInfo("A1", "B1")
    Dim B As Info: B = SetInfo("A2", "B2")
    Dim AllTargets() As Info
    Set AllTargets = Array(A, B)
End Function

Function SetInfo(source As String, target As String) As Info
    SetInfo.source = source
    SetInfo.destination = destination
End Function

Sub CopyValues(target As Info)
    Range(target.source).Select
    Selection.Copy
    Range(target.destination).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
End Sub

我如何迭代我的AllTargets大批? 由于我无法编译此文件,因此这里可能存在多个问题。 我不完全确定我设置的方式是否AllTargetslist 是有效的语法。


我重新编写了示例以缩小代码中的问题范围:

Option Explicit

Type Info
    source As String
    destination As String
End Type

Sub specialCopy()
    Dim target As Variant
    Dim AllTargets As Collection: Set AllTargets = SetAllTargets()
    For Each target In AllTargets
        CopyValues (target) '2. unkown if this is possible
    Next
End Sub

Function SetAllTargets() As Collection
    Dim A As Info: A = SetInfo("A1", "B1")
    Dim B As Info: B = SetInfo("A2", "B2")
    Set SetAllTargets = New Collection
    SetAllTargets.Add (A) '1. problem here when assigning user type
    SetAllTargets.Add (B) '1. problem here when assigning user type
End Function

Function SetInfo(source As String, destination As String) As Info
    SetInfo.source = source
    SetInfo.destination = destination
End Function

Sub CopyValues(target As Info)
    Range(target.source).Select
    Selection.Copy
    Range(target.destination).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
End Sub

代码从数组变为集合 - 尽管如此,其中仍然存在我现在无法解决的问题。

我认为根本原因保持不变:使用用户定义的类型。 我把我认为问题所在的地方标记为评论。


您无法将 UDT 添加到集合或字典中。我不知道为什么,但这是语言固有的。您可以创建一个简单的自定义类来执行与 UDT 相同的操作。我不再使用 UDT,只是创建一个类来避免这些奇怪的限制。

创建一个新的类模块(插入 - 模块)。转到属性表 (F4) 并将名称属性更改为 CInfo。

在 CInfo 类中

Private mSource As String
Private mDestination As String

Public Property Get Source() As String
    Source = mSource
End Property

Public Property Let Source(rhs As String)
    mSource = rhs
End Property

Public Property Get Destination() As String
    Destination = mDestination
End Property

Public Property Let Destination(rhs As String)
    mDestination = rhs
End Property

在标准模块中

Sub specialCopy()
    Dim target As Variant
    Dim AllTargets As Collection: Set AllTargets = SetAllTargets()
    For Each target In AllTargets
        CopyValues target '2. unkown if this is possible
    Next
End Sub

Function SetAllTargets() As Collection
    Dim A As CInfo: Set A = SetInfo("A1", "B1")
    Dim B As CInfo: Set B = SetInfo("A2", "B2")
    Set SetAllTargets = New Collection
    SetAllTargets.Add A
    SetAllTargets.Add B
End Function

Function SetInfo(Source As String, Destination As String) As CInfo
    Set SetInfo = New CInfo
    SetInfo.Source = Source
    SetInfo.Destination = Destination
End Function

Sub CopyValues(ByRef target As Variant)
    Range(target.Source).Select
    Selection.Copy
    Range(target.Destination).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
End Sub
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数组/集合和 for Each 循环中的用户定义类型 的相关文章

  • 从 excel/vba 生成电子邮件到 Outlook 时,我的电子邮件签名不会出现?

    您好 我使用 Ron De Bruin 的精彩网站创建了 VBA 代码 该代码可以从 Excel 文件生成向特定用户发送的电子邮件 唯一的问题是我的签名没有出现在每封电子邮件上 而且我似乎找不到如何在代码中添加它 有人可以建议吗 正如你所知
  • PolyML 函数和类型

    一对函数tofun int gt a gt a and fromfun a gt a gt int这样 fromfun o tofun n评估为n对于每一个n int 任何人都可以向我解释这实际上要求什么 我正在寻找更多对此的解释 而不是实
  • C++dynamic_cast vs 在静态枚举中存储对象类型?

    我正在为一个框架开发一个大的类层次结构 完成后将需要大量的类型转换 我的问题是 放入一个使用枚举来存储层次结构中所有对象类型的静态成员是多么愚蠢的想法 让每个类的成员都是静态的不会增加实例化对象的大小 并且会提供一种 可能 比dynamic
  • 删除以动态更改的字符串开头的脚本类型属性

    在 WordPress 网站上 我想删除动态添加随机字符串的脚本 类型 属性 形式为 type xxx text javascript 其中 xxx 在页面加载时发生变化 Disable 火箭装载机 on 云耀光 yourdomain co
  • vba Excel 中的多个查找请求(在查找中查找)

    我正在尝试执行一种嵌套查找请求 用例是我需要在一个工作表上查找组 如果找到 则从找到的行中的单独列中获取用户 ID 值 然后在另一张纸 然后它应该执行一系列操作 然后在第一张表中找到下一个出现的组 我的代码是 LookupGroup Spl
  • 为什么这个对象的“forEach 不是函数”?

    这可能真的很愚蠢 但我不明白为什么这不起作用 var a cat large a forEach function value key map console log value 未捕获的类型错误 a forEach 不是函数 http j
  • 如何从Excel调用VBA函数

    我有一个 excel 文件 我必须在其中放置验证规则 我有一个单元格表示 客户时间 用户可以在其中输入时间 但它是自定义时间 用户可以这样输入时间 23 45 98 20 100 30 用户不能输入字符串 并且不能输入除冒号之外的特殊字符
  • 将单元格背景颜色设置为其包含的 RGB 值。如何?

    下面是我希望通过手动复制和粘贴以外的方式实现的屏幕截图 这是材料设计调色板 在 Excel 中看起来很棒 如何循环遍历范围 B2 B15 并将每个单元格背景颜色设置为其相应的包含颜色 也许是一个VBA loop去经历垂直 B 单元格范围 解
  • PHP:限制 foreach() 语句? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何限制 foreach 语句 假设我只希望它运行前 2 个 eaches 或其他什么 方法有很多 一种是使用计数器 i 0 foreac
  • Excel 公式或 VBA:在具有 2 列条件的单独表中查找匹配的地址 - 无辅助列

    我需要公式结构方面的帮助 我有2张桌子 我想找到 a 列和 b 列相等的匹配项并获取表 2 中的地址 它们将是唯一的条目 例如 项目信息表 A B C 1 Name Company Project 2 Chris Evans Apple I
  • 在没有加载项的情况下加载 Excel

    All 我编写了一个电子表格应用程序 用户通过双击我提供的图标来加载它 问题是用户有很多插件 这会降低 Excel 的速度 如何使用命令行开关加载 Excel 来禁用所有加载项 该问题适用于 Excel 2003 和 Excel 2007
  • Pandas 将 NULL 读取为 NaN 浮点数而不是 str [重复]

    这个问题在这里已经有答案了 给定文件 cat test csv a b c NULL d e f g h i j k l m n 其中第三列被视为str 当我对列执行字符串函数时 pandas已阅读NULLstr 作为一个NaN float
  • 在 Excel 工作簿中找不到链接

    我编写了一个宏来打开多个受密码保护的工作簿 这些工作簿彼此之间都有链接 因此为了方便起见 我设置了UpdateLinks 0这样在其他书籍打开之前 我就不会收到所有链接更新的密码提示 所有工作簿打开后 我尝试使用以下命令更新链接 Workb
  • Foreach循环无法找到对象

    我正在尝试将 foreach 与并行后端结合使用来加速计算 用于特征选择的 AUCRF 随机森林的交叉验证 如果这确实重要的话 在这样做的过程中 我需要获取向量的子集 向量的名称可以更改 但可以作为字符向量进行访问 我使用 eval par
  • Scala 'null' 是否算作另一种类型的实例?

    我有这个代码 class MyLinkedList T h T tail MyLinkedList T def prepend v T MyLinkedList T new MyLinkedList v this 我想知道我如何可以将第二个
  • 尝试使用变量作为自动过滤器中的条件,并带有“不等于”<>,但无法使其工作

    我正在使用 Excel VBA 使用 不等于 表达式来过滤列表 如果我使用Criteria1 lt gt Bob 代码运行完美 但如果我将 Bob 更改为变量 代码将无法运行 这有效 ActiveSheet ListObjects Rpt
  • 哈希密码字段使用什么数据类型以及长度?

    我不确定密码哈希是如何工作的 稍后将实现 但现在需要创建数据库模式 我正在考虑将密码限制为 4 20 个字符 但据我了解 加密后哈希字符串的长度将有所不同 那么 如何将这些密码存储在数据库中呢 更新 仅使用哈希函数不足以存储密码 你应该阅读
  • 您可以调整用户窗体的这些代码吗:使其小而高效

    当 userfrom 按以下顺序激活时 我想在运行时添加动态用户表单控件 例如 标签 文本框 我想要类似以下的东西 当用户表单激活时 它需要询问用户字段的数量 他 她想要插入 如果用户回答7 则需要按以下顺序添加字段 3 列顺序 标签1 文
  • OCaml 前向声明

    有没有办法在 OCaml 中进行 C 风格的前向声明 我的问题是我有两个相互引用的变体 type path formula Next of state formula Until of state formula state formula
  • 在 foreach 循环中更改另一个结构内的结构

    打印以下代码 调用 MyMethod 时 0 0 0 1 我希望它打印 0 0 1 1 为什么是这样 Code private struct MyStruct public MyInnerStruct innerStruct private

随机推荐

  • 如何修复“'ddlAssignedTo' 有一个无效的 SelectedValue,因为它不存在于项目列表中

    我加载网格视图 网格视图有一个编辑和删除按钮 我点击 编辑 然后我得到 ddlAssignedTo has a SelectedValue which is invalid because it does not exist in the
  • 异常的 C++[Bug]?

    我一直在阅读Exceptional C by Herb Sutter 到达时Item 32 我发现了以下内容 namespace A struct X struct Y void f int void g X namespace B voi
  • 如何使 Playground 执行时间像我们在 iOS 应用程序中运行一样快

    我发现游乐场的执行速度并不可靠 例如使用代码 import UIKit var count 0 let startTime NSDate for i in 1 10000 count let endTime NSDate let inter
  • 将 OpenApi 路径拆分为多个路径定义文件

    我想更轻松地将我的路径 相当多 分割成它们自己的文件 假设我有两条主要路径 user and anotherPath有几个子路径 现在我有了一个 OpenApi 规范文件 其路径被引用到一个索引文件 该索引文件保存对每个路径的引用 用其参考
  • 64 位编译器中的浮点支持

    我们应该对 64 位 Delphi 编译器中的浮点支持有何期待 64位编译器会使用SSE吗 实现浮点运算 64位编译器支持吗 当前80位浮点类型 扩展 这些问题密切相关 所以我将它们作为一个问题来问 我就这个主题发表了两篇文章 here a
  • 如何发布一个空数组(整数)(jQuery -> MVC 3)

    使用 jQuery 我发布了一个数组int通过将数组放入 data 参数中来添加到我的 MVC 3 应用程序 如下所示 data myIntArray myIntArray 在我的控制器中 接收操作有一个参数int myIntArray 这
  • 如何在模型-视图-视图模型架构中的模型方法中间干净地获取用户输入?

    我正在编写一个侦听网络连接的应用程序 当一些数据到达时 它会回复 并且根据传入的数据 它可能需要在回复之前询问用户 显示对话框 我不知道如何在 M V VM 架构中干净地做到这一点 如果我只需要根据传入数据更新 GUI 那么事件和绑定到可观
  • 没有办法在 JavaScript 中拥有基于类的对象吗?

    基于 javascript 原型的面向对象编程风格很有趣 但是在很多情况下您需要能够从类创建对象 例如 在矢量绘图应用程序中 工作区在绘图开始时通常是空的 我无法从现有的 线 创建新的 线 更一般地说 动态创建对象的每种情况都需要使用类 我
  • 如何优雅地关闭嵌入式码头

    我有一个应用程序在嵌入式码头服务器上运行 现在我想启动 停止服务器作为服务 我使用脚本来启动服务器 java JAVA OPTS DREQ JAVA VERSION JAVA VERSION jar myjetty jar 主班 Serve
  • javascript:访问不同框架中的对象?

    如果我在 1 页上有一个框架集的 2 个框架 JS 有没有办法访问相对框架中的元素 Thanks 是的 但前提是两个框架上的页面位于同一域中 你可以做document getElementById frame id contentWindo
  • 如何在 RSS feed 上的 元素中正确放置日期

    我正在使用 RSS Graffitty 将 RSS 项目发布到 Facebook 页面 该应用程序告诉我这些项目缺少发布日期 所以我添加了这个标签 echo
  • 如何使用 Eclipse 处理 Boost.Test 输出

    我正在使用 Eclipse CDT 和 Boost Test 带有 Boost Build 我希望 Eclipse 能够解析构建期间运行测试套件期间生成的 Boost Test 的输出 有人知道如何实现这一目标吗 提前致谢 转至窗口 gt
  • Autofac命名注册构造函数注入

    Autofac是否支持在组件的构造函数中指定注册名称 示例 Ninject 的NamedAttribute 您需要使用顶部的 Autofac Extras Attributed 包来实现此目的 假设您有一个接口和两个类 public int
  • 使用 Android getIdentifier()

    我试过这个 r Resources getSystem getIdentifier ball red drawable com Juggle2 Log i FindBall R r 和这个 r Resources getSystem get
  • 使用花括号初始化列表调用显式构造函数:是否不明确?

    考虑以下 struct A A int int struct B B A 1 explicit B int int 2 int main B paren 1 2 3 B brace 1 2 4 的建设brace in 4 明确无误地呼吁 2
  • 如何隐藏滚动条上的灰点

    In Visual Studio 2015 2017 我们怎样才能隐藏Vertical Scrollbar的灰点如下图 如果您试图隐藏由 建议 而不是书签 引起的灰点 那么这就是具体的设置 Tools gt Options gt Envir
  • 调用第三方 API 时处理 CORS

    yes this is a very famous question I have tried many ways mentioned in the previous stack overflow QnA but nothing worke
  • PowerShell 3.0 新功能 [ordered] 的用例

    PowerShell 3 0 CTP1引入新功能 ordered 这在某种程度上是一个捷径OrderedDictionary 我无法想象它的实际用例 为什么这个功能真的很有用 有人可以提供一些有用的例子吗 示例 恕我直言 这是演示案例而不是
  • 在Java中生成所有排列[重复]

    这个问题在这里已经有答案了 可能的重复 生成给定字符串的所有排列 我在 Java 中有一个任意长度的数组 我想生成它们的所有可能的排列 对于固定长度执行此操作的简单方法是一系列嵌套的 for 循环 但由于数组的长度未知 因此这里不提供这种选
  • 数组/集合和 for Each 循环中的用户定义类型

    VBA 在弹出窗口中显示 不允许我迭代具有用户定义类型的数组 我写了一些代码 想知道如何解决这个问题 这是一个小例子 重点关注我想要做的事情 Option Explicit Type Info source As String destin