ارسال پاسخ 
 
رتبه موضوع:
  • 3 رای - 3.67 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
آیا این مسئله نگهداری و تعمیرات با vba قابل حل هست؟
۲۵-۵-۱۳۸۹, ۰۸:۵۹ عصر (آخرین تغییر در این ارسال: ۳۱-۵-۱۳۸۹ ۰۷:۲۷ عصر توسط esyoo.)
ارسال: #1
آیا این مسئله نگهداری و تعمیرات با vba قابل حل هست؟
با سلام
من در حال نوشتن برنامه نگهداری وتعمیرات هستم.(هنوز در فاز های اولیه هستم)
در این برنامه اگر یک ماشین ---اب بشه برای تعمیر اون اقدام میکنند و یک سری قطعات رو تعویض یا تعمیر میکنند.
من با صحبت هایی که کردم نهایتا برای یک ماشین تا 10 قطعه رو تعویض میکنند
با توجه به عکس برای ماشین 1000 در تاریخ 88/01/01 نیز 10 نوع قطعه مصرف شده که مقدار مصرف اون جلوش هست می بینید.
و این روند تا 31 هر ماه ادامه دارد.

حالا می خو اهیم آ--- ماه یک گزارش بگیرم و ببینیم که ماشین 1000 در کل ماه چه قطعاتی و به چه مقداری مصرف کرده است؟
ممنون میشم راهنمایی کنید.

[تصویر: yqxjaky6oewl6y1h0cn8.jpg]







آیا اشکال من در ایجاد دیتا بیس بوده و باید به گونه ای دیگر طراحی شود؟
ممنون
نمونه فایل:
http://www.4shared.com/file/qjyV4vYy/net.html


در پست 16 همین تاپیک به خواسته ام رسیدم.
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در پاسخ
 Thanks given by: mrexcel , hasan2271 , alieddy0
۲۵-۵-۱۳۸۹, ۰۹:۱۳ عصر
ارسال: #2
RE: آیا این مسئله نگهداری با vba قابل حل هست؟
طراحی دیتابیس مقوله ایست که باید در آن دقت زیادی شود!
کلا اگر این برنامه رو با Access بنویسید خیلی بهتر و کارامد تر خواهد بود.
اکسس یک برنامه مدیریت بانک اطلاعاتی است که به صورت تخصصی برای تهیه نرم افزار های سیستمی مورد استفاده قرار میگیرد که در درس MIS رشته صنایع تدریس می شود.
اکسل نرم افزار تخصصی برای ایجاد این برنامه نیست! ولی اگر می خواهید با اکسل این برنامه را بنویسید. این روند را انجام دهید:

شکستن جداول: این جدولی که دارید را به حداقل سه جدول بشکنید به صورت زیر:
1- جدول لیست دستگاه ها
2- جدول لیست قطعات
3- جدول لیست قطعات مصرفی در دستگاه ها

هر جدول در یک شیت
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در پاسخ
 Thanks given by: esyoo , mrexcel , alieddy0
۲۶-۵-۱۳۸۹, ۰۷:۲۸ صبح (آخرین تغییر در این ارسال: ۲۶-۵-۱۳۸۹ ۰۷:۴۳ صبح توسط shamsololama.)
ارسال: #3
RE: آیا این مسئله نگهداری با vba قابل حل هست؟
(۲۵-۵-۱۳۸۹ ۰۹:۱۳ عصر)m_d6712 نوشته است:  طراحی دیتابیس مقوله ایست که باید در آن دقت زیادی شود!
کلا اگر این برنامه رو با Access بنویسید خیلی بهتر و کارامد تر خواهد بود.
اکسس یک برنامه مدیریت بانک اطلاعاتی است که به صورت تخصصی برای تهیه نرم افزار های سیستمی مورد استفاده قرار میگیرد که در درس MIS رشته صنایع تدریس می شود.
اکسل نرم افزار تخصصی برای ایجاد این برنامه نیست! ولی اگر می خواهید با اکسل این برنامه را بنویسید. این روند را انجام دهید:

شکستن جداول: این جدولی که دارید را به حداقل سه جدول بشکنید به صورت زیر:
1- جدول لیست دستگاه ها
2- جدول لیست قطعات
3- جدول لیست قطعات مصرفی در دستگاه ها

هر جدول در یک شیت


با درود فراوان
دوست خوبم m-d6712 در مورد جواب بالا دقت فرمائید این سایت و این قسمت برای هم فکری و جواب به سئوالات هست نه مقایسه نرم افزارها با هم و دوستانی که در مورد اکسل سئوال دارند حتما مایلند این سئوالشان در مورد اکسل حل شود وگرنه ممکن است با کلی نرم افزار های دیگه هم آشنایی داشته باشند و اگر زحمت جواب دوستان متحمل می شوید جواب را کامل بنویسید و یا دقیق تر راهنمائی فرمائید که مورد استفاده دوستان قرار بگیرد

---------------------------------------------------------------------------------------------------
بمانیم تا کاری کنیم ،نه کاری کنیم تا بمانیم (دکتر شریعتی)
shamsololama@yahoo.com
09177733411
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در پاسخ
 Thanks given by: esyoo , mrexcel , morteza2006 , safirazadi , alieddy0
۲۶-۵-۱۳۸۹, ۱۰:۱۵ صبح (آخرین تغییر در این ارسال: ۱۱-۳-۱۳۹۰ ۰۹:۲۷ صبح توسط shamsololama.)
ارسال: #4
RE: آیا این مسئله نگهداری با vba قابل حل هست؟
با درود فراوان
این فرمی بود که قبلا آماده کرده بود م قسمتی از آن را تغییر دادم که کار شما رو انجام میده و در کلید جستجو 2 قرار داده ام
در بقیه کلید ها جستجو را با تعداد شرطهای متفاوت انجام میدهد که به عنوان نمونه گذاشتم تا کدها رو ببینی و خواستی استفاده کنی

فایل رو برات میل کردم
عکس از برنامه:

---------------------------------------------------------------------------------------------------
بمانیم تا کاری کنیم ،نه کاری کنیم تا بمانیم (دکتر شریعتی)
shamsololama@yahoo.com
09177733411
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در پاسخ
 Thanks given by: esyoo , mrexcel , frarshadh , alieddy0
۲۷-۵-۱۳۸۹, ۰۱:۱۶ صبح (آخرین تغییر در این ارسال: ۲۷-۵-۱۳۸۹ ۰۴:۱۸ صبح توسط m_d6712.)
ارسال: #5
RE: آیا این مسئله نگهداری با vba قابل حل هست؟
با تشکر از دوست عزیز جناب آقای شمس العلماء
توانایی اکسل بسیار بالاست و خیلی از کارها رو می تونه انجام بده! در این هیچ شکی نیست! اما وظیفه خودم دونستم که راه های بهتر رو هم برای دوستان مشخص کنم! همچنان معتقدم اکسس برای این کار بهتره! و انجام صحیح این پروژه با اکسل بسیار دشوار تر است! با این وجود به توصیه شما گوش کردم و یک نمونه از این پروژه که با اکسل ایجاد شده برایتان میگذارم!


اصل فایل اکسل کامل:
http://www.mediafire.com/file/xqgcmvn28e...ir-Cm.xlsm



برای مقایسه: اگر قرار بود این فایل رو با اکسس درست کنم ده برابر در زمان صرفه جویی می شد. و همچنین نیاز به هیچ کد نویسی نبود زیرا ویزارد های اکسس بسیار راحت هستند.


توضیحات:

ابتدا پیکربندی به صورت زیر است:

[تصویر: snrjkmy0ygk3oc3hrs.jpg]


به ترتیب جداول به صورت زیر می باشد.
1- جدول قطعات:
[تصویر: e7en7ggujfq6urezyd8a.png]

2- جدول ماشین ها:
[تصویر: 2zstfrtt802d6vemygqy.jpg]

3- جدول تعمیرات:
[تصویر: uodr5eoklevs0ryxqngb.jpg]

4- جدول قطعات استفاده شده در تعمیرات:
[تصویر: 30j5xj01209tyt61rj55.jpg]


به این صورت اطلاعات ما در این جداول شکسته می وشد که بسیار کارامد تر از حالت پیوسته است. (بنا به ساختار های رابطه ای بانک های اطلاعاتی)


می توان با کد نویسی بسیار مختصر و استفاده از فرمان های SQL تمامی گزارش های مورد نیاز را درخواست داد.

در روش استفاده از فرمان های SQL ابتدا بایستی به فایل اکسل خودمان به عنوان بانک اطلاعاتی وصل شد.
سپس درخواست SQL را برای این بانک ارسال کرد.
و سپس نتیجه را چاپ کرد.

کد زیر برای وصل شدن به فایل اکسل کنونی است. (activeWorkBOOK)
البته قبل از نوشتن این کد برای فعال سازی ADODB که کلاس خاصی برای وصل شدن به بانک های اطلاعاتی می باشد باید آن را به فایل خود Add کنید. برای این کار به روی Tools و در آن References را انتخاب کنید. در لیست کتابخانه Mirosoft ActiveX Data Objects 2.8 Library را انتخاب کرده و تیک آن را بزنید. و Ok را بفشارید.

[تصویر: irs76kw3i0rmxcn2ioxc.jpg]

کد:
Dim cn As ADODB.Connection
Set cn = New ADODB.Connection
cn.Provider = "MSDASQL"
cn.Open "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};" & _
"DBQ=" & ThisWorkbook.Path & "\" & ThisWorkbook.Name & "; ReadOnly=True;"

در کد بالا cn شی مورد نظر ماست که ایجاد کردیم. در انتها connectionstring برای وصل شدن به فایل اکسل کنونی را وارد کردیم! دقت فرمایید که از دو مشخصه ThisWorkbook.Path و ThisWorkbook.Name برای ایجاد آدرس فایل کنونی استفاده شده است.

برای درخواست دادن و انتخاب باید از فرمان SQL استفاده کرد که به زودی در بخش بانک های اطلاعاتی به طور کامل توضیح خواهم داد.

به عنوان مثال برای درخواست و چاپ تمامی ---ابی ها در ماه 05 می توان از فرمان زیر استفاده کرد.
کد:
strQuery = "Select * From [Sheet1$L:N] where CMDate Like '89/05/%'"
    Set RsReport = cn.Execute(strQuery)
    Sheet2.Range("A2:Z10000").CopyFromRecordset RsReport

در کد بالا StrQuery متن درخواست است. ترجمه متن درخواست به این صورت است: "همه (*) اطلاعات از جدول [Sheet1$L:N] (که همان ستون های L,M,N از شیت 1است) را انتخاب کن(Select) به شرطی که (where) تاریخ آنها مشابه '05/89' باشد.
"




یا اگر بخواهیم بدانیم هر کدام از ماشین ها چه روز هایی ---اب شده اند:
کد:
Dim StrMachineName As String
    StrMachineName = 'نام ماشین مورد نظر مثلا سنگ'
    strQuery = "Select [Sheet1$M:N].CMDate From [Sheet1$A:B],[Sheet1$M:N] where [Sheet1$A:B].MachineCode=[Sheet1$M:N].MachineCode And [Sheet1$A:B].MachineName= '" + StrMachineName + "'"
    Set RsReport = cn.Execute(strQuery)
    Sheet2.Range("A2:Z10000").CopyFromRecordset RsReport

همچنین به عنوان مثال می خواهیم بدانیم از هر کدام از قطعات چقدر مصرف شده است. از این کد استفاده می کنیم:

کد:
strQuery = "Select First([Sheet1$G:H].PartName),Sum([Sheet1$P:R].ComsumeNum) From [Sheet1$P:R],[Sheet1$L:N],[Sheet1$G:H] where [Sheet1$P:R].CMCode=[Sheet1$L:N].CMCode And [Sheet1$P:R].CMPart=[Sheet1$G:H].PartCode Group By [Sheet1$G:H].PartCode"
  
    Set RsReport = cn.Execute(strQuery)
    Sheet2.Range("A2:Z10000").CopyFromRecordset RsReport

گزارش دیگری که می توان ایجاد کرد گزارش قطعات مصرفی یک ماشین است:

کد:
strQuery = "Select First(PartName), Sum(ComsumeNum) From [Sheet1$P:R],[Sheet1$L:N],[Sheet1$G:H],[Sheet1$A:B] where [Sheet1$A:B].MachineCode=[Sheet1$L:N].MachineCode   And [Sheet1$P:R].CMCode=[Sheet1$L:N].CMCode And [Sheet1$P:R].CMPart=[Sheet1$G:H].PartCode and [Sheet1$A:B].MachineName = '" + machine + "' Group BY PartName"

    Set RsReport = cn.Execute(strQuery)
    Sheet2.Range("A2:Z10000").CopyFromRecordset RsReport




و هر گزارش دیگری که دوست داشته باشید را می توانید با 4 خط برنامه ایجاد کنید.
جستجو، مرتب سازی و ... از مزیت های این روش است.
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در پاسخ
 Thanks given by: shamsololama , esyoo , ali tehrani , Almasi , baran00093 , mrexcel , frarshadh , safirazadi , barrai , alieddy0
۲۷-۵-۱۳۸۹, ۱۱:۳۷ صبح
ارسال: #6
RE: آیا این مسئله نگهداری با vba قابل حل هست؟
با سلام
من یه راهی به نظرم رسید برای تشکیل دیتابیس

اینطوری 2 محدودیت از بین میره:
1)تعداد قطعه تعویضی در هر روز(چون ممکنه بنا به دلایلی از 10 بیشتر بشه)
2)ممکنه در هر روز بیشتر از یک ماشین نیاز به تعمیر داشته باشه

در ضمن، برای درج تاریخ از فرمت 00"/"00"/"00 استفاده کنید که مشکلی پیش نیاید.

در اینصورت می توانید در یک بازه مشخص همه اطلاعات خواسته شده را بدست بیاورید. با استفاده از فرمول vlookup و برای تعداد از sumif و در نهایت برای یافتن انواع قطعات استفادده شده از autofilter و unic code استفاده کنید
اینا به ذهنم رسید.حالا در اجرا اگر مشکلی داشتی در خدمتم
امیدوارم بتونم کمک کنم
(در شیت 2 فایل خودتون نمونه دیتابیس رو گذاشتم)


فایل‌های ضمیمه
.xlsx  net.xlsx (اندازه: 13.69 KB / دانلودها: 115)

همیشه شاد باشیدAngel
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در پاسخ
 Thanks given by: Almasi , mrexcel , alieddy0
۲۷-۵-۱۳۸۹, ۰۱:۳۹ عصر
ارسال: #7
RE: آیا این مسئله نگهداری با vba قابل حل هست؟
دوست عزیز khakzad
من تقریبا همین روشی که شما گفتید رو دارم اجرا میکنم ولی به سبکی دیگر.
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در پاسخ
 Thanks given by: alieddy0
۲۷-۵-۱۳۸۹, ۰۱:۴۵ عصر (آخرین تغییر در این ارسال: ۲۷-۵-۱۳۸۹ ۰۲:۳۷ عصر توسط khakzad.)
ارسال: #8
RE: آیا این مسئله نگهداری با vba قابل حل هست؟
پس مشکل کجا بود؟
به نکته ای برخورد کردید لطفا به من هم بگید.ممنون

همیشه شاد باشیدAngel
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در پاسخ
 Thanks given by: mrexcel , alieddy0
۲۷-۵-۱۳۸۹, ۰۲:۵۴ عصر
ارسال: #9
RE: آیا این مسئله نگهداری با vba قابل حل هست؟
با درود فراوان
فایلی که براتون میل کردم رو نگاه کردین؟ من فکر کردم مشکل حل شده چون با روش میشه تمام اطلاعات خواسته شده رو یک جا جستجو کرد حتی با چند شرط (مثلا ماشینهای کد 1000 که بین تاریخ مشخصی تعمیر شده و همچنین قطعه کد 3 تعویض شده برابر با 5 قطعه باشد)
و حتی اگر تعداد قطعه تعویضی آن از 10 بیشتر باشه نیز مشکلی ایجاد نمی کند
فایلی که فرستادم جستجو را شکل بالا که گفتم انجام میدهد که قسمتی از آن را به عنوان نمونع برای شما تغییر داده بودم
و اگر برای قرار دادن روی فایل خود مشکلی داری تا نمونه کامل آن را آماده کنم برایتان میل کنم و اگر حس می کنی جوابگوی خواسته شما نیست بگویید تا روشی دیگر را برایتان بگویم.

---------------------------------------------------------------------------------------------------
بمانیم تا کاری کنیم ،نه کاری کنیم تا بمانیم (دکتر شریعتی)
shamsololama@yahoo.com
09177733411
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در پاسخ
 Thanks given by: esyoo , mrexcel , ali tehrani , Almasi , alieddy0
۲۷-۵-۱۳۸۹, ۰۳:۱۶ عصر
ارسال: #10
RE: آیا این مسئله نگهداری با vba قابل حل هست؟
سلام
این فایل رو مبتونم ببینم؟منم داشته باشم؟

همیشه شاد باشیدAngel
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در پاسخ
 Thanks given by: esyoo , mrexcel , alieddy0
ارسال پاسخ 




پرش در انجمن:


ارتباط با ما | Exceliran | بازگشت به بالا | بازگشت به محتوا | آرشیو | پیوند RSS