你可以给Excel中的列variables名称?

我有一个相当大的Excel电子表格,大约有4500行,35列。

当修改字段值时,我们的VBA代码通过字母(aka A1A2A3A4500 )引用列…这是一个限制,因为我们无法在列表中移动列而无需更新我们的所有代码到该列已移到的位置。

有没有可能给一个列的variables名?

如果列A当前拥有First Name ,是否可以命名此列First_Name以便无论此列移动的位置如何,都会保留First_Name引用?

那么在我们的VBA代码中,我们可以说First Name而不是A1

谢谢!

最简单的方法是定义(35)与列号或列号对应的variables或枚举。

 Option Explicit Public Const Name As String = "A" Public Const Age As String = "C" Public Const ID As String = "F" ... 

那么当引用列时,使用定义的名称即。 Range(Name & 13).

这样,只有当列的顺序发生改变时,才需要修改public const

如果你通过数字引用列考虑使用枚举

 Public Enum Col Name = 1 ID = 2 Age = 3 End Enum Sub Main() Cells(1, Col.ID) = "ID HEADER" End Sub 

这是一个dynamic查找列的版本:

 Sub test() Do While True ' Ctrl-Break to stop MsgBox ColByName(InputBox("Name:")) Loop End Sub Function ColByName(colName As String) As Long Dim iCol As Long For iCol = 1 To UsedRange.Columns.Count ' need better upper range for code off of a sheet If Cells(1, iCol) = colName Then ColByName = iCol Exit Function End If Next iCol ColByName = -1 End Function 

我更喜欢ENum路线,但有时它是不实际的,它可以引入维护问题。

另一种方法是按名称索引的集合 – 在列移动时重build集合等。请注意,testing显示默认比较区分大小写。

我经常使用的技术是利用Excel表格 。 使用此命令将在您的工作表中创build一个特殊的对象,然后您可以在您的VBA代码中引用。 (当然,如果你愿意的话,可以使用VBA以编程方式添加一个新的Excel表格。)

例如,如果您的工作表中包含以下数据:

 +--------------+-------------+ | First_Name | Last_Name | +--------------+-------------+ | John | Smith | | Sally | Jones | +--------------+-------------+ 

一旦将其转换为Excel表格,您将能够使用如下代码引用它:

 Option Explicit Public Sub SampleCode() ' ' selects Last_Name column ' Range("Table1[Last_Name]").Select ' ' prints "Jones" ' Debug.Print Cells(3, Range("Table1[Last_Name]").Column).Value End Sub 

Excel将为Table1开始创build一个顺序表名。 您可以在Excel中更改此名称,或者如果以编程方式创build它,则为其指定一个唯一的名称。