我試圖設置一個工作流程/ UX,其中導入一個CSV文件,並且每個導入文件的列被分配一個「數據類型」,在每個頂部使用下拉列表柱。一旦這些數據類型被指定/分配給每一列,另一個宏將使用導入的CSV數據填充第二張表格,其中新表格中的位置取決於爲導入數據的每列指定的數據類型。創建一個包含未賦值變量的Excel VBA數組作爲條目
例如,如果導入數據的第一列是數據類型「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
條目被分配了正確的值,因此問題似乎是通過未分配變量數組的方式將ColArray值分配給數據類型變量的「最後一步」。
如果有人對如何解決使用未分配變量數組爲每個數組條目賦值(同時保留使用條目的「原始」變量名稱調用這些值的能力)這一「常規」問題提出建議,或者如果有更有效的方式來完成這個電子表格功能,請讓我知道!
編輯1:根據John Coleman的要求,我會詳細介紹一下我在這裏要做的事情。
曾經有分配給數據類型導入的列數,我要一些代碼以這樣的方式將數據發送到一個第二片,例如:
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
等等,但我覺得,如果我要問的是可能的,我也許可以用它在另一種情況下(即使它不是最理想的方法,這例)。
我不太知道你正在嘗試做的,也許你可以解釋一點。我懷疑「字典」可能會有所幫助。這不是原生的VBA(它來自VBScript),而是被大多數VBA開發者用作標準工具。請參閱:http://www.techbookreport.com/tutorials/vba_dictionary.html。這將允許您從一個字符串獲取信息(這是我認爲* *您'「原始」變量names'的意思) –
感謝您的答覆,約翰 - 當我有一點時間,我會更新原始包括「下一步」。粗略地說,我想要做的是能夠用一些代碼填充第二個工作表,例如'For i = 2到LastRow Worksheets(2).Cells(1,j)= Worksheets(1).Cells(DataA,j)'等等每個數據類型列。因爲我知道數據類型應該在第二個工作表的列中,但第一個工作表是可變的(取決於導入的數據)。這樣我可以使用數據類型變量而不是ColArray位置從導入的數據調用適當的數據類型。 –
好吧,我已經爲你更新了原始文章@JohnColeman,希望它現在更有意義! –