سؤال

لقد قمت بإنشاء نوع محدد من المستخدمين لاحتواء بعض البيانات التي سأستخدمها لملء النموذج الخاص بي. أنا أستخدم مجموعة من نوع المستخدم هذا النوع، وأنا تغيير حجم الصفيف أثناء سحب البيانات من خادم خارج الموقع.

من أجل جعل البرنامج أسهل في الهضم، بدأت تقسيمها إلى الروتين الفرعي. ومع ذلك، عند تهيئة برنامجي، لا يمكنني معرفة متى تم تهيئة صفيف معين، وبالتالي لا أستطيع أن أكون متأكدا من أنه يمكنني استدعاء وظيفة الحجم لمعرفة ما إذا كانت الصفيف فارغة.

هل هناك طريقة لتهيئة نوع مستخدم فارغ أو اكتشاف نوع مستخدم NULL؟ حاليا، أنا بجد ترميزها وأود أن أفضل حل أناقة.

هل كانت مفيدة؟

المحلول

AFAIK، لا يمكنك التحقق مما إذا تم تهيئة نوع المعرفة من قبل المستخدم قبل إرساله كوسيطة لإجراء / وظيفة.

أنا نقلا عن هذا المثال من مساعدة VBA


Type StateData
    CityCode(1 To 100) As Integer     ' Declare a static array.
    County As String * 30
End Type

تتم تهيئة حقل المقاطعة إلى بعض القيمة، والتي يمكنك استخدام قيمة أساسية. إذا كان المستخدم يضع هذا الحقل بشكل صريح، فهذا يعني أنه يحمل بعض القيمة ويبقى غير مهيأ وغير ذلك.

ل

Sub main()
    Dim example As StateData
    MsgBox IsInitialized(example)

    Dim example2 As StateData
    example2.County = "LA"
    MsgBox IsInitialized(example2)
End Sub
Function IsInitialized(arg As StateData) As Boolean
    Dim initCounty As String * 30
    IsInitialized = (arg.County <> initCounty)
End Function

نصائح أخرى

بالإضافة إلى محلول IMPEMTY (صفيف) -

If IsNull(array) then 

   msgbox "array is empty"

End If

يحاول:

dim v

if isempty(v) then
    msgbox "is empty"
end if
If myObjectVariable is Nothing

يجب أن تعمل على اكتشاف ما إذا تم تهيئة كائن.

تحرير: "لا شيء" يعمل، إذا كان ذلك هدف عامل:

Dim blah As Object
If blah Is Nothing Then
    MsgBox "blah is nothing!"
End If

Dim foo as variant
If IsEmpty(foo) Then
    MsgBox "foo is empty!"
End If

إذا كنت بحاجة إلى التحقق مما إذا كانت الصفيف الديناميكي بأكمله من الأنواع المخصصة تم تهيئة أو لا (ليس فقط عنصرا خاصا) في VBA، فقد لا يكون هذا ممكنا مباشرة (حيث لا يعمل وظائف أي استثمالة وما إلى ذلك على أنواع مخصصة). ومع ذلك، قد تكون قادرا على إعادة هيكلة برنامجك بسهولة لإرجاع مجموعة من أنواع مختلفة من الحجم 0 للإشارة إلى أنه لم يتم قراءة / تهيئة شيء.

Private Function doStuff() As customType()
    Dim result() As customType

    ' immediately size it to 0 and assing it as result
    ReDim result(0)
    doStuff = vysledek

    ' do real stuff, ... premature "Exit Function" will return an array of size 0
    ' possibly return initialized values
End Function

' then you can all
If (UBound(tabulky) = 0) Then
    MsgBox "Nope, it is not initialized."
End If
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top