将列转换为字段顺序
Convert Column To Field Order
我正在将 excel 电子表格导入 access,并请求用户输入包含用户 ID 和 phone 的列。现在在访问表单上,它们将是字符串值,例如 A & R
然后我尝试将 alpha 值转换为数字值,但是当我使用此语法时,它没有给出适当的结果。如下所示,当我希望它产生 3
时,它会产生 @
- 在 Access 中将字母转换为列号
的适当方法是什么
Sub Test()
Dim colletter As String
colletter = "C"
Debug.Print Chr(Val(colletter) + 64)
End Sub
你真的很亲近。您将要使用 ASC() 函数,该函数 returns 字符的 ASCII 值。当你减去 64 时,它会得到正确的列索引。
Sub Test()
Dim colletter As String
colletter = "C"
Debug.Print Asc(colletter) - 64
End Sub
*编辑:我为多个字母添加了一些控件并确保字母是大写的。但是,这确实将它限制为只有两个字母,这意味着列 "ZZ" 是您的最后一列,但希望您的用户没有超过 702 列。 :)
Sub Test()
Dim colLetter As String
Dim colNumber As Integer
Dim multiplier As Integer
colLetter = "AB"
multiplier = 0
'If there is more than one letter, that means it's gone through the whole alphabet
If Len(colLetter) > 1 Then
multiplier = Asc(Left(UCase(colLetter), 1)) - 64
End If
colNumber = (multiplier * 26) + Asc(Right(UCase(colLetter), 1)) - 64
Debug.Print colNumber
End Sub
这是另一个允许任意数量字母的解决方案,例如"ZZZZ"。如您所知,它与@BobtimusPrime 的 post 非常相似。
Public Function RowLetterToNumber(ByVal RowLetter As String) As Integer
If Len(RowLetter) > 1 Then
RowLetterToNumber = RowLetterToNumber(Mid(RowLetter, 2))
RowLetterToNumber = RowLetterToNumber + 26
Else
RowLetterToNumber = Asc(RowLetter) - 64
End If
End Function
抱歉,您不能简单地使用:=COLUMN()
我正在将 excel 电子表格导入 access,并请求用户输入包含用户 ID 和 phone 的列。现在在访问表单上,它们将是字符串值,例如 A & R
然后我尝试将 alpha 值转换为数字值,但是当我使用此语法时,它没有给出适当的结果。如下所示,当我希望它产生 3
时,它会产生 @
- 在 Access 中将字母转换为列号
Sub Test()
Dim colletter As String
colletter = "C"
Debug.Print Chr(Val(colletter) + 64)
End Sub
你真的很亲近。您将要使用 ASC() 函数,该函数 returns 字符的 ASCII 值。当你减去 64 时,它会得到正确的列索引。
Sub Test()
Dim colletter As String
colletter = "C"
Debug.Print Asc(colletter) - 64
End Sub
*编辑:我为多个字母添加了一些控件并确保字母是大写的。但是,这确实将它限制为只有两个字母,这意味着列 "ZZ" 是您的最后一列,但希望您的用户没有超过 702 列。 :)
Sub Test()
Dim colLetter As String
Dim colNumber As Integer
Dim multiplier As Integer
colLetter = "AB"
multiplier = 0
'If there is more than one letter, that means it's gone through the whole alphabet
If Len(colLetter) > 1 Then
multiplier = Asc(Left(UCase(colLetter), 1)) - 64
End If
colNumber = (multiplier * 26) + Asc(Right(UCase(colLetter), 1)) - 64
Debug.Print colNumber
End Sub
这是另一个允许任意数量字母的解决方案,例如"ZZZZ"。如您所知,它与@BobtimusPrime 的 post 非常相似。
Public Function RowLetterToNumber(ByVal RowLetter As String) As Integer
If Len(RowLetter) > 1 Then
RowLetterToNumber = RowLetterToNumber(Mid(RowLetter, 2))
RowLetterToNumber = RowLetterToNumber + 26
Else
RowLetterToNumber = Asc(RowLetter) - 64
End If
End Function
抱歉,您不能简单地使用:=COLUMN()