PDA

View Full Version : مبتدی: کمک - دستور شرطی پلکانی ( چند سطحی )



mdbaba
جمعه 02 تیر 1396, 15:00 عصر
سلامم خدمت دوستان من توی یه فرمی دو تا قیل دارم که میخوام از یکی (m) ورودی بگیرم و در صورت برقرار بودن هریک از شرطا نسبت به اون محاسبات رو انجام بده و در فیلد دوم (vkol) بیاره. با مدلی که وارد کردم بظاهر همه چی درسته اما با نتایج قاطی میشه و دزست در نمی یاد خواهشن اگه راهنمایی دارین دریغ نکنید. شدیدا ضروزی هست.

s = m
If s < 0 Or s > 1000000000000# Then
MsgBox "!""



ElseIf 0 < s <= 200000000 Then
Me.vkol = (s * 0.07)

ElseIf 200000000 < s <= 500000000 Then
Me.vkol = (200000000 * 0.07) + ((s - 200000000) * 0.05)


ElseIf 500000000 < s <= 1000000000 Then
Me.vkol = (200000000 * 0.07) + (300000000 * 0.05) + ((s - 500000000) * 0.04)

ElseIf 1000000000 < s <= 5000000000# Then
Me.vkol = (200000000 * 0.07) + (300000000 * 0.05) + (500000000 * 0.04) + ((s - 1000000000) * 0.03)
Else
End If
End Sub

mdbaba
جمعه 02 تیر 1396, 15:07 عصر
فایل ساده نمونه رو هم گذاشتم. خواهشن زودتر راهنمایی کنید!

mazoolagh
شنبه 03 تیر 1396, 13:11 عصر
همیشه کد رو درون تگ کد قرار بدین که خوانا باشه


نتایج قاطی میشه و دزست در نمی یاد
اینو توضیح ندادین در چه حالتی درست در نمیاد چون کد همین الان نشون میده که بازای مقادیر بیشتر از 5000000000 تا 1000000000000 تکلیفش مشخص نیست - اون else آخر

برای اطمینان بجای اینکه مقادیر پله ها رو مستقیما در شر بکار ببرین اونها رو بصورت ثابت (یا متغیر) تعریف کنین (شاید مقادیر پله ها نادرست هست - تعداد صفر رو چک کنین) و بجای if .. then ..else از select case استفاده کنین
بهتر هست که یک تابع بنویسین و اون تابع رو چک کنین و وقتی درست بود از تابع در برنامه استفاده کنین

mdbaba
شنبه 03 تیر 1396, 22:23 عصر
ممنونم از توجه تون استاد بزرگ وار، تقریبا اون مواردی که فردمودنین رو تست کردم. منظور از قاطی کردن این بود که تو دوتا سطح اول محاسبات درست در می اومد. موقعی که سومی روز اضافه می کردم یا اون سطح رو و بعدیا رو در نظر نمی گرفت و یا اگه دسکاری می کردم اون رو و بعدیا رو درست می داد و شرطای قبلی رو قاطی می کرد. با select case آشنا نیستم.ممنون میشم را هنمایی کنین.
اما می دونین یه راهی پیذا کردم که فکر میکنم به کاری مبتدیای مثل من بیاد البته یک روش استانداردی نیست؛ من اومدم چند تا فیلد دیگه تعریف کردم و شرطای بعد رو تو اونا وارد کردم با چند شرط اضافی و جمع اون فیلدا تونستم نتیجهی درستی بگیرم. کدا رو می فرستم.

Private Sub m_AfterUpdate()
s = mIf s <= 200000000 Then
Me.vkol = (s * 0.07)
ElseIf 200000000 < s <= 500000000 Then
Me.vkol = (200000000 * 0.07) + ((s - 200000000) * 0.05)
End If
If s > 500000000 Then
Me.vkol = 0
End If

If 500000000 < s <= 100000000 Then
Me.h = (200000000 * 0.07) + (300000000 * 0.05) + ((s - 500000000) * 0.04)

End If
If s <= 500000000 Or 1000000000 < s Then
Me.h = 0
End If

If 1000000000 < s <= 5000000000# Then
Me.k = (200000000 * 0.07) + (300000000 * 0.05) + (500000000 * 0.04) + ((s - 1000000000) * 0.03)
End If
If s > 5000000000# Or s <= 1000000000 Then
Me.k = 0

End If

If 5000000000# < s <= 10000000000# Then
Me.p = (200000000 * 0.07) + (300000000 * 0.05) + (500000000 * 0.04) + (4000000000# * 0.03) + ((s - 5000000000#) * 0.02)
End If
If s > 10000000000# Or s <= 5000000000# Then
Me.p = 0
End If


If 10000000000# < s Then
Me.e = (200000000 * 0.07) + (300000000 * 0.05) + (500000000 * 0.04) + (4000000000# * 0.03) + (5000000000# * 0.02) + ((s - 10000000000#) * 0.01)
End If
If s <= 10000000000# Then
Me.e = 0
End If
Me.hv_ejra = s * 0.02
If Me.hv_ejra > 10000000 Then
Me.hv_ejra = 10000000
End If

End Subاگر که حرفه ای نباشه اما بدرد من خورد و فکر می کنم بکار بعضی هام بیاد