Pergunta

Usando VBA Eu tenho um conjunto de funções que retornam um ADODB.Recordset onde todas as colunas como adVarChar. Infelizmente isso significa numerics se classificados como texto. Então 1,7,16,22 se torna 1,16,22,7

Existe algum método que pode classificar numerics como colunas de texto sem recorrer a mudar o tipo da coluna?

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

NB: Estou usando Project 2003 e Excel 2003 e referenciando Microsoft ActiveX DataObject 2.8 Biblioteca

Foi útil?

Solução

pad Esquerda com Zeros com pelo menos tantos como máximo de dígitos numéricos. por exemplo.

0001 0010 0022 1000

Você pode usar $ Direita () para fazer isso.

Outras dicas

função

Use o Val () para classificar numericamente em uma coluna de texto. Exemplo:

SELECT ID, Field1
FROM tablename
ORDER BY Val(Field1);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top