Domanda

Usando VBA ho una serie di funzioni che restituiscono un ADODB.Recordset dove tutte le colonne sono adVarChar . Sfortunatamente questo significa che i numeri vengono ordinati come testo. Quindi 1,7,16,22 diventa 1,16,22,7

Esistono metodi che possono ordinare i numeri come colonne di testo senza ricorrere a cambiare il tipo di colonna?

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: sto usando Project 2003 ed Excel 2003 e sto facendo riferimento a Libreria Microsoft ActiveX DataObject 2.8

È stato utile?

Soluzione

Tasto sinistro con zeri con almeno un numero massimo di cifre numeriche. per es.

0001 0010 0022 1000

Puoi usare Right $ () per farlo.

Altri suggerimenti

Utilizzare la funzione Val () per ordinare numericamente una colonna di testo. Esempio:

SELECT ID, Field1
FROM tablename
ORDER BY Val(Field1);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top