ورود

View Full Version : حرفه ای: آیا این کار منطقی است یا خیر؟



mmbguide
سه شنبه 19 شهریور 1392, 16:30 عصر
سلام به همه دوستان

اگر موضوع گنگ نوشته شده عذر می خوام
----------------------
من روی یک فرم تعداد سه عدد TextBox دارم که هر کدام مقادیر عددی متفاوتی رو نشان می دهند. و یک دکمه در صفحه قرار دارد که با زدن آن مقدار TextBoxها رو جمع کرده و حاصل رو در یک یغام نمایش می دهد.

حالا فرض کنید یک جدول دارم که مقدار رشته ای me.txt1.value + me.txt2.value رو ذخیره می کند. آیا میشه کاری کرد که با زدن دکمه روی فرم این مقدار از جدول استخراج شده و عبارت رشته ای به یک عبارت محاسباتی تبدیل شود (در واقع به مقدار دو textbox رجوع کند) و مقدار دو عدد از txtboxها رو جمع کنه؟

البته مقدار رو میتونم با Dlookup استخراج کنم ولی مقدار بدست آمده یک رشته است و ماژول نمیتواند آنرا به عنوان شیء textbox تبدیل کند.

ممنون

امیر مهرشاد
سه شنبه 19 شهریور 1392, 16:41 عصر
من با سی شارپ کار میکنم ولی تا اونجایی که یادمه :

dim result as int
result = Val(textBox1.Text )+ Val(textBox2.Text );
امیدوارم منظورتو فهمیده باشم

mmbguide
سه شنبه 19 شهریور 1392, 16:49 عصر
شما در واقه مقدار textbox رو به یک متغیر عددی تبدیل کردید.

من منظورم اینه که رشته me.txt1.value + me.txt2.value اگر در داخل علامت نقل قول نوشته بشه آیا باز هم نرم افزار بصورت Val(textBox1.Text )+ Val(textBox2.Text ) با عبارت برخورد میکنه یا نه فقط یک رشته متنی هستش. نمیدونم منظورم رو رسوندم یا نه

Abbas Amiri
سه شنبه 19 شهریور 1392, 19:24 عصر
شما در واقه مقدار textbox رو به یک متغیر عددی تبدیل کردید.

من منظورم اینه که رشته me.txt1.value + me.txt2.value اگر در داخل علامت نقل قول نوشته بشه آیا باز هم نرم افزار بصورت Val(textBox1.Text )+ Val(textBox2.Text ) با عبارت برخورد میکنه یا نه فقط یک رشته متنی هستش. نمیدونم منظورم رو رسوندم یا نه

شما از تابع Split برای جدا سازی یک عبارت می توانید استفاده کنید .
در تابع زیر که باید در ماژول فرم کپی شود ،شما چنانچه عبارت مورد نظر را به آن پاس کنید مقدار برگشتی آن حاصل جمع مقادیر کنترلها است .
فقط بایستی نام کنترلها را داشته ذخیره داشته باشید.




Function EvalSumString(expr As String) As Long
Dim varExpr As Variant, sumExpr As Long, i As Integer
varExpr = Split(expr, "+")
For i = 0 To UBound(varExpr)
sumExpr = sumExpr + Me(Trim(varExpr(i)))
Next
EvalSumString = sumExpr
End Function

مثال :

MsgBox EvalSumString("text1 + text2")

alirezabahrami
سه شنبه 19 شهریور 1392, 19:48 عصر
شما در واقه مقدار textbox رو به یک متغیر عددی تبدیل کردید.

من منظورم اینه که رشته me.txt1.value + me.txt2.value اگر در داخل علامت نقل قول نوشته بشه آیا باز هم نرم افزار بصورت Val(textBox1.Text )+ Val(textBox2.Text ) با عبارت برخورد میکنه یا نه فقط یک رشته متنی هستش. نمیدونم منظورم رو رسوندم یا نه
من هم همزمان با تهیه فانکشن تهیه شده در پست 4 توسط استاد امیری یک نمونه تهیه کرده بودم
ملاحظه بفرمائید:
یا علی

mmbguide
سه شنبه 19 شهریور 1392, 22:24 عصر
حق با همه شما هستش چون منظورم رو بد می رسونم.

اینطور بگم شاید بهتر باشه. آیا راهی هست که یک رشته که در واقه یک فرمول هستش رو از جایی فراخوانی کرد (از جدول یا یک فایل متنی) و اون متن رو داخل یک ساب روتین به یک کد قابل اجرا تبدیل کرد؟

منظور من از این کد me.txt1.value + me.txt2.value اینه که:
من روی فرم برنامه 5 عدد شیء textbox گذاشتم که فقط باید چندتای آنها باهم جمع زده بشن. مثلا برای یک کار خاص باید textbox1 , text box4 جمع زده بشن و برای کاری دیگه textbox2 , textbox5.
حالا تو کد بالا فرمول هر کار متفاوت رو بصورت یک رشته که در واقع فرمول انجام کار هستش بصورت متن ذخیره کردم و میخوام در صورت لزوم وقتی از جدول فراخوانی شد بصورت یک خط کد قابل اجرا باشه.

امیدوارم منظورم رو رسونده باشم

mmbguide
سه شنبه 19 شهریور 1392, 23:48 عصر
راه حل پیدا شد

Dim s As String
s = "Text1,Text3"

Dim sp() As String
sp = Split(s, ",")

Dim o As Control
Dim i As Integer
i = 0

For Each n In sp
Set o = Me.Controls(n)
i = i + o
Next

MsgBox i

یک فرم بسازید و چندین عدد textbox با شماره های دلخواه بسازید. حالا کد بالا رو در یک دکمه وارد کنید و اون متغیر رشته ای رو که نام textboxها رو ذخیره میکنه رو به دلخوان نام هر textboxی که دوست داشتید رو بنویسید. میبینید که فقط textboxهای تعریف شده مقدارشان محاسبه خواهد شد. البته مقدار null نباشد.

hasanhzd
پنج شنبه 21 شهریور 1392, 09:25 صبح
درود
اگه جوابتون رو گرفتید که خیلی خوب
اگه نه بفرمایید شاید من منظورتون رو فهمیده باشم