将列转换为字段顺序

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()