3

使用 VBA,我有一组函数返回ADODB.Recordset所有列作为adVarChar. 不幸的是,这意味着数字被排序为文本。所以 1,7,16,22 变成 1,16,22,7

是否有任何方法可以将数字作为文本列进行排序,而无需更改列的类型?

Sub TestSortVarChar()

  Dim strBefore, strAfter As String

  Dim r As ADODB.RecordSet

  Set r = New ADODB.RecordSet
  r.Fields.Append "ID", adVarChar, 100
  r.Fields.Append "Field1", adVarChar, 100
  r.Open


  r.AddNew
  r.Fields("ID") = "1"
  r.Fields("Field1") = "A"

  r.AddNew
  r.Fields("ID") = "7"
  r.Fields("Field1") = "B"

  r.AddNew
  r.Fields("ID") = "16"
  r.Fields("Field1") = "C"

  r.AddNew
  r.Fields("ID") = "22"
  r.Fields("Field1") = "D"


  r.MoveFirst
  Do Until r.EOF
    strBefore = strBefore & r.Fields("ID") & " " & r.Fields("Field1") & vbCrLf
    r.MoveNext
  Loop

  r.Sort = "[ID] ASC"


  r.MoveFirst
  Do Until r.EOF
    strAfter = strAfter & r.Fields("ID") & " " & r.Fields("Field1") & vbCrLf
    r.MoveNext
  Loop

  MsgBox strBefore & vbCrLf & vbCrLf & strAfter

End Sub

注意:我正在使用 Project 2003 和 Excel 2003 并引用Microsoft ActiveX DataObject 2.8 库

4

2 回答 2

3

左填充零,至少与最大位数一样多。例如

0001 0010 0022 1000

您可以使用 Right$() 来完成此操作。

于 2008-10-01T03:19:27.040 回答
2

使用 Val() 函数对文本列进行数字排序。例子:

SELECT ID, Field1
FROM tablename
ORDER BY Val(Field1);
于 2008-10-01T14:03:39.833 回答