PDA

View Full Version : طریقه فهمیدن آرایه خالی



just4froum
سه شنبه 09 اسفند 1390, 17:59 عصر
با سلام به همگی :

از چه کدی استفاده کنم که بفهمم متغیر a هیچ تغییری نکرده که با ارور subscript out of range دچار نشم.

dim a() as string

msgbox ubound(a)


:قلب::قلب::قلب:

Veteran
سه شنبه 09 اسفند 1390, 18:15 عصر
این چون ارایه بدون بعد هست باید اول
redim بشه
مثلا
Dim a() As String
ReDim a(2, 2) As String
MsgBox UBound(a)

just4froum
سه شنبه 09 اسفند 1390, 18:18 عصر
خوب مشکل من هم همینجاست من طول آرایه رو نمی دونم.

یعنی برنامه خودش بهش طول می ده .بعضی وقت ها هم هیچ کاری نمی کنه چون اون چیزی رو که می خواد پیدا نمی کنه.

حالا من می خوام بفهمم که آیا برنامه اون چیزی رو که می خواد پیدا کرده و توی این آرایه ریخته یا نه ( طولشو تغییر داده یا نه ؟؟؟ )

می خواستم بدونم راهی هست ازش استفاده کنم یا نه مثلا استفاده از null

البته نمی خوام از On error استفاده کنم.

Veteran
سه شنبه 09 اسفند 1390, 18:21 عصر
یعنی شما برنامه ای نوشتید که در مواقع خاص طول ارایه تغییر میده
حالا شما میخواید وقتی طول ارایه تغییر کرد مثلا یک پیغام به شما بده ؟
درسته ؟

just4froum
سه شنبه 09 اسفند 1390, 18:29 عصر
نه برنامه من یک سری مراحل رو طی می کنه

بعد از این مراحل من باید بفهمم از redim استفاده کرده یا نه (تحت شرایطی استفاده می کنه !!!)

البته نمی خوام از on error استفاده کنم ! می خوام ببینم آیا تابعی وجود داره یا یه چیزی مثل اون ؟

:قلب::قلب::قلب:

Veteran
سه شنبه 09 اسفند 1390, 18:32 عصر
خب دوست
طبق اطلاعاتی که من دارم redim برای تغییر طول ارایه هست.
شما میگید

من باید بفهمم از redim استفاده کرده یا نه
یعنی طول ارایه تغییر کرده یا نه
اگر این هست بگو که برنامشو بنویسیم
اگر هم نمونه کد بزارید خیلی خوبه

just4froum
سه شنبه 09 اسفند 1390, 18:52 عصر
با تشکر

ببینید من برای فهمیدن این مشکل از ساب Is_x_Changed استفاده کردم می خوام ببینم راه دیگری هم هست یا نه ؟؟؟




Dim x() As Long
Private Sub Form_Load()
If MsgBox("Hello", vbYesNo) = vbYes Then
ReDim x(1)
x(1) = 123456
End If
If Is_x_Changed = True Then
MsgBox x(1)
End If
End Sub


Private Function Is_x_Changed() As Boolean
On Error GoTo Is_x_Changed_Error
Dim m As Long
m = UBound(x)
Is_x_Changed = True
Exit Function
Is_x_Changed_Error:
Is_x_Changed = False
End Function

Veteran
سه شنبه 09 اسفند 1390, 20:01 عصر
Dim x() As Long
Private Sub Form_Load()
If MsgBox("Hello", vbYesNo) = vbYes Then
ReDim x(1)
x(1) = 123456
SaveSetting "myarr", "myarr", "myarr", "yes"
Else
SaveSetting "myarr", "myarr", "myarr", ""
End If
If GetSetting("myarr", "myarr", "myarr") = "yes" Then
MsgBox x(1)
End If
End Sub

Mr'Jamshidy
سه شنبه 09 اسفند 1390, 22:41 عصر
میتونی از یک متغییر از نوع Boolean استفاده کنی و هر جا که از Redim استفاده کردی مغدار اون هم تغییر بدی

یک کار دیگه هم هست

از همون On Error Resume Next استفاده کنی
بعد یک متغیر از نوع Integer تعریف کنی و مقدار اون رو در اول تابع برابر -1 قرار بدی

بعد این کد رو استفاده کنی

مثلا

Dim MyArray As Integer
MyArray = -1

MyArray = UBound(ArrayVal)
If MyArray = -1 Then
Msgbox "آرایه تغییری نکرده است"
Else
Msgbox "آرایه تغییر کرده است"
End If


Dim x() As Long
Private Sub Form_Load()
If MsgBox("Hello", vbYesNo) = vbYes Then
ReDim x(1)
x(1) = 123456
SaveSetting "myarr", "myarr", "myarr", "yes"
Else
SaveSetting "myarr", "myarr", "myarr", ""
End If
If GetSetting("myarr", "myarr", "myarr") = "yes" Then
MsgBox x(1)
End If
End Sub



دوست عزیز اگر ارایه داشته باشه UBound مشکل ایشون رو حل میکنه اما زمانی که ارایه نداشته باشه این کد خطا میگیره