使用未分配的变量创建Excel VBA数组作为条目

时间:2016-01-04 17:23:51

标签: arrays excel vba excel-vba

我正在尝试设置工作流/ UX,其中导入CSV文件,并使用每列顶部的下拉列表为导入文件的每列分配“数据类型”。将这些数据类型指定/分配给每列后,另一个宏将使用导入的CSV数据填充第二个工作表,其中新工作表中的位置取决于为导入数据的每列指定的数据类型。

例如,如果导入数据的第一列是数据类型“DataA”,则对于第一列(从下拉菜单中的总共12“数据类型”)中选择下拉选择。然后,这个“DataA”数据将填入第五栏的第二张表中。

这是我到目前为止的代码:

Dim DataA As Integer, DataB As Integer, DataC As Integer, DataD As Integer, DataE As Integer, DataF As Integer, DataG As Integer, DataH As Integer, DataI As Integer, DataJ As Integer, DataK As Integer, DataL As Integer

    Dim ColArray(12) As Variant

    For p = 1 To LastColImport 'This is a previously-defined/assigned variable

        q = 1

        Do While q <= 12

        If ActiveSheet.DropDowns(p).Value = q Then

            ColArray(q) = p

            Exit Do

            Else

            q = q + 1

        End If

        Loop

    Next p

如果选择了数据类型,则使用整数条目填充ColArray数组,如果尚未选择,则填充空条目。我想要做的下一步是将每个ColArray条目值分配给一个命名变量,这样我就可以按数据类型名称调用ColArray条目值,而不必记住或查找哪种数据类型每个ColArray整数值指的是。

我无法在任何地方找到内置的“下拉列表范围名称”召回功能,所以我想做的是以下内容:

Dim ColArrayNames(12) As Variant

ColArrayNames(1) = DataA 'These variables were defined in the previous code block
ColArrayNames(2) = DataB

...

ColArrayNames(12) = DataL


ColArrayNames = ColArray

我意识到在这种特定情况下,将数据类型变量直接分配给ColArray值可能更容易,而不是将它们放入数组中,然后将数组值等同起来。我觉得用未分配的变量填充数组在其他情况下也很有用。我尝试使用这种分配变量的方法失败了。

将最后一行代码更改为:

For i = 1 to 12

ColArrayNames(i) = ColArray(i)

Next i

ColArray值未分配给数据类型变量。话虽如此,ColArrayNames条目被分配了正确的值,因此问题似乎是通过未分配的ColArrayNames数组将ColArray值分配给数据类型变量的“最后一步”变量

如果有人建议如何处理使用未分配变量数组为每个数组条目赋值的“常规”问题(同时保留使用条目“原始”变量名称调用这些值的能力),或者如果有一种更有效的方法来完全接近这个电子表格功能,请告诉我!

编辑1:按照约翰科尔曼的要求,我会详细说明我在这里要做的事情。

一旦我将导入的列号分配给数据类型,我想将数据发送到第二张表,其中包含一些代码,例如:

For i = 2 to LastRow 'The LastRow variable value will be found using a simple xlDown search process

Worksheets(2).Cells(1,i).Value = Worksheets(1).Cells(DataA,i).Value
Worksheets(2).Cells(4,i).Value = Worksheets(1).Cells(DataB,i).Value

Etc.

Next i

再次,我意识到我可以轻松使用

Worksheets(2).Cells(1,i).Value = Worksheets(1).Cells(ColArrayNames(1),i).Value

等等,但我觉得如果我要问的是可能的,我可以在另一种情况下使用它(即使它不是这个例子中最理想的方法)。

1 个答案:

答案 0 :(得分:0)

就我理解你的问题而言,似乎有效(并且有效地)定义原始源数据和格式化输出之间的数据映射(在这种情况下,第二个工作表上的单元格)。

当遇到问题的数据输入部分时,我意识到目标数据类型的最终“持有者”是持有它的对象 - 在这种情况下是工作表单元格,而不是VBA变量或数组。您的重点似乎是将数据从一个工作表传输/复制到另一个工作表(或从/到变体数组)的VBA代码。您自己的效率选择应该是您的指导。如果你想为多种数据类型使用相对通用的代码,我的建议是使用Variant值或数组,并在复制到目标单元格后,设置目标单元格的格式(有效地“键入”它无论以后需要使用什么)。

如果可以灵活地扫描映射表以适应任何数量的数据类型,格式或列,则甚至可能不需要字典。