gpt4 book ai didi

VBA Excel - 在 VBA 中存储列表的方法?

转载 作者:行者123 更新时间:2023-12-02 14:38:29 25 4
gpt4 key购买 nike

我不知道还能去哪里,我尝试找到像我这样的问题,但没有成功。我有一个原始范围表,我想将信息复制到新工作表中,然后将复制的信息转换为 ListObject 表。我已经完成了 99%,但后来我想将复制表的原始 header 更改为我自己的 header (因为大多数原始 header 都很长)。

我构建了一个循环来查看 [#Headers] 单元格,查找与某个原始值匹配的值,然后将其替换为我自己的值。例如

For Each cl In Range("Table1[#Headers]")
If cl.Value = "Employee" Then
cl.Value = "Name"
ElseIf cl = "Employer Name" Then
cl.Value = "Company"
'...
End If
Next cl

拥有一个代码块来为 30 多个实例执行此操作是很麻烦的,如果我收到的原始信息以某种方式更改了它的 header 值,那么我必须再次寻找这段代码并进行更改。我希望有一种方法可以存储任何 Sub 都可以引用的 2 列前后 header 名称列表,就像全局数组一样(除了全局数组是不可能的)。我研究了类(class),但我在信息全局化方面再次遇到了问题。

我正在考虑制作一个带有两列列表的隐藏工作表,但我真的希望这不是必需的,不想要比我必须拥有的更多的工作表。有没有办法在 Excel VBA 中存储供全局使用的列表?

Example image

解决方案:

根据 @Mat's Mug 的建议,我将展示如何添加我的词典。

我创建了一个名为 DHeader 的公共(public)变体,并创建了一个要调用的 Sub:

Public DHeader As Dictionary

Sub Load_Headers()

If Not DHeader Is Nothing Then Exit Sub
Set DHeader = New Dictionary

With DHeader
.add "Employee", "Name"
.add "Employer Name", "Company"
'...
End With

End Sub

然后在我的操作子中添加了以下内容:

Call Load_Headers
For Each i_1 In Range("Table1[#Headers]")
If DHeader.Exists(CStr(i_1.Value)) = True Then
i_1.Value = DHeader.Item(CStr(i_1.Value))
End If
Next i_1

现在我的值(value)观和行动被分成了代码的不同部分。我想我必须添加一种方法来清除我的 Action 子中的字典,但它有效!

最佳答案

无论您做什么,您都需要在某个地方拥有映射代码。

如果巨大的 If-Then-Else block 不太吸引人,您可以考虑使用 Scripting 中的 Dictionary 对象库 - 使用“之前”列名称作为字典键,使用“之后”列名称作为字典值,映射代码可能如下所示:

Dim ColumnMap As New Scripting.Dictionary
With ColumnMap
.Add "Employee", "Name"
.Add "Employer Name", "Company"
'...
End With

然后,当您迭代标题行中的单元格时,您可以验证名称/键是否存在于字典中,然后通过获取映射值来继续重命名。只是不要假设字典中存在列名,否则您最终会遇到“键不存在”运行时错误。

关于VBA Excel - 在 VBA 中存储列表的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28566917/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com