הפתרון שלי
גם אני נתקלתי בבעיה דומה הנובעת למעשה מכך שהפקד מתייחס לנתון כאל טקסט ולא כאל מספר סידורי, כך הוא למעשה ממיין את הנתונים לפי ערכי ה-ASCII של הסימנים המרכיבים אותם. הבעיה יכולה להפתר פשוט ע"י הוספת אפסים מובילים: ובך ברור ש-02 מגיע לפני 10. אך הפתרון הזה אינו אלגנטי ואפילו מכוער - ויזואלית. ניתן לנצל את ההתיחסות לנתון כאל טקסט כדי לתקן את המיון ע"י הוספת סימנים בלתי נראים ולקבל את אפקט האפסים המובילים - מבלי לראות אותם בפועל: דוגמה לסימן בלתי נראה כזה הוא (Chr$(10. בהנחה וידוע מספר הפריטים המקסימלי בהם תשתמשי (נניח: 10,000 הוא מספר נאה לצורך העניין) ידוע מספר הספרות המקסימלי להצגתו (5 במקרה שלנו). הגדירי מחרוזת בעלת גודל קבוע מראש ומלאי אותה מצד שמאל בסימנים בלתי נראים ואז הכניסי את המספר, לדוגמה:
Const MAX_DIGITS As Byte = 5 Dim sSort As String * MAX_DIGITS sSort = Right$(Number & String$(MAX_DIGITS,10), MAX_DIGITS)
הסבר: הגדרנו את המחרוזת sSort להיות קבועה לגודל 5. לאחר מכן הצבנו בה את 5 הסימנים הימניים המתקבלים מצירוף מחרוזת המספר המבוקש ו-5 סימנים בלתי נראים. כך קבלנו את sSort שאותה יש להציב בתור המספר הסידורי בפקד. באופן כזה, הספירה מ-1 עד 10 תהייה למעשה (בערכי ASCII):
[10][10][10][10][49] = 1 [10][10][10][10][50] = 2 [10][10][10][49][48] = 10 [10][10][52][48][48] = 40
וכך יתמיין הטקסט בצורה המבוקשת.