דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. קבלת ערך Enum ממספר - VBA

קבלת ערך Enum ממספר - VBA

מתוזמן נעוץ נעול הועבר תכנות
3 פוסטים 2 כותבים 121 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • א מנותק
    א מנותק
    ארי
    כתב ב נערך לאחרונה על ידי
    #1

    ערב טוב.
    לצורך ייעול קוד שלי היה לי רצון למצוא דרך לקבל נתון מתוך רשימת Enum בקוד VBA באקסס.
    כלומר, כידוע רשימה זו מחזירה רק מספר ולא ערך, ורציתי לקבל את הערך ולא רק את המספר (מקווה שאני מובן).
    לצורך זה כתבתי את הקוד הבא, ובקשתי היא האם חברי הפורום יוכל לעבור עליו, אשמח לקבל כל הערה/הארה.
    תודה.

    Option Compare Database
    Option Explicit
    
    Public Enum EnumTest
        a = 1
        b = 2
        c = 3
        E = 15
    End Enum
    
    Public Function FindEnumString(EnumNum As String, EnumName As String, Optional ModuleName As String) As String
    Dim ModStr As String
    Dim EnumStr() As String
    Dim i
    
    If ModuleName = "" Then ModuleName = VBE.ActiveCodePane.CodeModule
    
    ModStr = VBE.ActiveVBProject.VBComponents.item(ModuleName).CodeModule.Lines(1, VBE.ActiveVBProject.VBComponents.item(ModuleName).CodeModule.CountOfLines)
    ModStr = Mid(ModStr, InStr(1, ModStr, "Enum " & EnumName) + Len("Enum " & EnumName), InStr(1, ModStr, "End Enum") - (InStr(1, ModStr, "Enum " & EnumName) + Len("Enum " & EnumName)))
    
    EnumStr = Split(ModStr, vbCrLf)
    For i = LBound(EnumStr) To UBound(EnumStr)
        If Trim(Right(EnumStr(i), Len(EnumStr(i)) - InStr(1, EnumStr(i), "="))) = EnumNum Then
            FindEnumString = Trim(Left(EnumStr(i), InStr(1, EnumStr(i), "=") - 1))
        End If
    Next i
    End Function
    
    Public Function test()
    Dim En As String
    En = EnumTest.b
    
    Debug.Print En & " (" & FindEnumString(En, "EnumTest") & ")"
    End Function
    
    Y.Excel.AccessY תגובה 1 תגובה אחרונה
    1
    • Y.Excel.AccessY מנותק
      Y.Excel.AccessY מנותק
      Y.Excel.Access
      השיב לארי ב נערך לאחרונה על ידי Y.Excel.Access
      #2

      @ארי יפה, מתאים לקוד שאתה כותב. אבל לקוד של אחרים צריך זהירות.
      יש אפשרות לכתוב Const ב Enum, ואז זה לא יעבוד.
      הנה דוגמה של שגיאה:

      Option Compare Database
      Option Explicit
      
      Const myConst As Integer = 4
      
      Public Enum EnumTest
          A = 1
          B = 2
          c = myConst
          E = 15
      End Enum
      
      Public Function FindEnumString(EnumNum As String, EnumName As String, Optional ModuleName As String) As String
      Dim ModStr As String
      Dim EnumStr() As String
      Dim i
      
      If ModuleName = "" Then ModuleName = VBE.ActiveCodePane.CodeModule
      
      ModStr = VBE.ActiveVBProject.VBComponents.item(ModuleName).CodeModule.Lines(1, VBE.ActiveVBProject.VBComponents.item(ModuleName).CodeModule.CountOfLines)
      ModStr = Mid(ModStr, InStr(1, ModStr, "Enum " & EnumName) + Len("Enum " & EnumName), InStr(1, ModStr, "End Enum") - (InStr(1, ModStr, "Enum " & EnumName) + Len("Enum " & EnumName)))
      
      EnumStr = Split(ModStr, vbCrLf)
      For i = LBound(EnumStr) To UBound(EnumStr)
          If Trim(Right(EnumStr(i), Len(EnumStr(i)) - InStr(1, EnumStr(i), "="))) = EnumNum Then
              FindEnumString = Trim(Left(EnumStr(i), InStr(1, EnumStr(i), "=") - 1))
          End If
      Next i
      End Function
      
      Public Function test()
      Dim En As String
      En = EnumTest.c
      
      Debug.Print En & " (" & FindEnumString(En, "EnumTest") & ")"
      
      End Function
      
      

      Y.Excel.Access @ gmail.com

      א תגובה 1 תגובה אחרונה
      0
      • א מנותק
        א מנותק
        ארי
        השיב לY.Excel.Access ב נערך לאחרונה על ידי
        #3

        @Y-Excel-Access אכן במקרה כזה הקוד לא יעבוד.
        אמנם הוא לא מחזיר שגיאה, אבל גם לא את הערך המבוקש.

        תגובה 1 תגובה אחרונה
        1

        בא תתחבר לדף היומי!
        • התחברות

        • אין לך חשבון עדיין? הרשמה

        • התחברו או הירשמו כדי לחפש.
        • פוסט ראשון
          פוסט אחרון
        0
        • דף הבית
        • קטגוריות
        • פוסטים אחרונים
        • משתמשים
        • חיפוש
        • חוקי הפורום