فراخوانی مودول ها از workbookهای دیگر

Collapse
X
 
  • زمان
  • نمایش
حذف همه
new posts
  • saber2q

    • 2012/04/13
    • 90

    فراخوانی مودول ها از workbookهای دیگر

    سلام
    میخوام تعدادی (بیشتر از 200سند) بسازم که هر کدوم نیاز به یک سری توابع بیسیک دارن و البته این کد ها برای همه اسناد مشترکه ولی به دلایل زیر میخوام این برنامه ها و کد ها رو تو یک سند بنویسم و از سند های دیگر فراخوانی کنم تا:
    1- در صورت نیاز به تغییر یا اصلاح یا ارتقاء کد ها مجبور نشم کل 200تا سند رو تک به تک ویرایش کنم
    2- با باز کردن هر یک سند این کد ها باید لود بشن و سرعت رو کند مینن

    از اساتید و مهندسان راهنمایی میخوام که چجوری با کد بیسیک یک تابع یا زیر برنامه یا مودول رو از یک سند دیگر که قبلا باز شده فراخوانی کنم و در همین سند جاری اجراش کنم؟
    ضمنا میخوام سندی که کدهای اصلی درش قرار دارن وقتی باز هست دیده نشه و هیچ شیت یا فرمی در ظاهر وجود نداشته باشه (مثل سند توابع تاریخ شمسی که باز بودنش فقط تو کد ادیتور مشخص میشه)

    با تشکر
  • mokaram
    مدير تالار اکسل و بانک اطلاعاتی

    • 2011/02/06
    • 1805
    • 74.00

    #2
    امکان داره نمونه فایل قرار بدین چون اونجوری خیلی بهتر میشه قضیه را فهمید و کمک کرد
    [CENTER][IMG]http://forum.exceliran.com/signaturepics/sigpic909_10.gif[/IMG]
    [/CENTER]

    کامنت

    • امين اسماعيلي
      مدير تالار ويژوال بيسيك

      • 2013/01/17
      • 1198
      • 84.00

      #3
      با درود
      وقتی میخوای یه کدی رو از یه ورکبوک دیگه بازخونی کنی یه همچین کدی باید باشه. البته اون فایل باید باز باشه

      کد:
      Application.Run ("'amin.xlsm'!test")
      اسم فایلی که من دارم amin هست و کد هاشم توی ماژول در test هست(اسم ماکرو). توی اون ماژول test هر دستوری بنویسین اجرا میشه
      واسه باز شدن خودکار یه فایل اکسل هم که قبلا بحث شده . واسه مخفی شدن اون فایل هم همینطور
      در پناه خداوندگار ایران زمین باشید و پیروز

      کامنت

      • saber2q

        • 2012/04/13
        • 90

        #4
        ممنون از شما
        امین جان از دستوری که گفتی من سعی کردم استفاده کنم و البته عملیات اتصال به مودول انجام شد ولی مشکل اینه که دستوری که میخوام فراخوانی کنم و از یک فایل اکسل باز دستور بیسیک رو به یه فایل باز دیگه بدم خطا میگیره.
        من تا فایل اکسل پیوست کردم لطفا ببینیدشون
        اولی اسمش Main هست که دستورات بیسیک رو در مودول4 و worksheet و workbookداره که هر کدوم عملیاتی انجام میدن مثل لاک کرد یا غیر قابل انتخاب کردن و... در سلول ها. فایل دومی هم وجود داره با نام File1 که از این فایل Nتا وجود خواهد داشت که ظاهر سلولهاش شبیه فایل main هست ولی دستورات داخل subها خالی هستن و من میخوام به جای این که دستورات رو در خود فایل بنویسم, آدرسی بدم به فایل main و دستور رو از sub name متناظر از فایل Main بخونه و این اتقاق در مورد همه فایلهای دیگه بیافته و همگی دستورات لازمشونو از فایل main بخونن.
        اگه امکان داره شما سعی کن یکی از دستورات داخل مودول فابل main رو به مودول و sub متناظرش در File1 متصل کنی.

        با تشکر از شما.
        فایل های پیوست شده

        کامنت

        • امين اسماعيلي
          مدير تالار ويژوال بيسيك

          • 2013/01/17
          • 1198
          • 84.00

          #5
          با درود
          خوب من یه نگاه میکنم ولی به نظرت کد ها رو تو ماژول نوشتی. نه دیگه . کد ها واسه یه سری Button تویه اون فایل هست و شما میخوای بره عین همون کد رو از button متناظرش بخونه. خوب این که خودش باز حد اقل یه کد نویسی میخواد . حالا ببینم اصلا من بلدم . ولی اساسا یه جای کارت میلنگه یعنی اشتباه برنامه ریزی کردی
          در پناه خداوندگار ایران زمین باشید و پیروز

          کامنت

          • saber2q

            • 2012/04/13
            • 90

            #6
            ببین اون فایل mainدر حال حاضر یه فایل خام عین 200تا فایل دیگمه که هرکدوم کدهای خودشون تو خودشونه و مشکل اینجاس که این فایلها از اول سال رو به آخر سال که میریم هی اضافه میشن و هر تغییری تو کدها لازم بشه باید بشینم عین 200تا فایا رو اصلاح کنم...
            فقط کد ها مربوط به باتون ها نیست یک سری کدهای protectiهم هست.
            حالا من میخوام همه این کدهارو طوری بنویسم که یکجا باشن نه 200جا اشکال نداره تو تک تک فایل ها کدهای ارجاعی مینویسم که اونا هیچ وقت قرار نیست تغییر کنن و فقط به یه زیر برنامه ارجاع میرن.
            Last edited by saber2q; 2014/03/11, 22:20. دلیل: اضافه کردن

            کامنت

            • امين اسماعيلي
              مدير تالار ويژوال بيسيك

              • 2013/01/17
              • 1198
              • 84.00

              #7
              با درود من برای کلید شماره 7 یعنی همون سبز کوچیکه یه کد نوشتم هر 2 تا رو باز کن و سبز فایل یک رو بزن. از حالت فشرده فایل رو در بیار.امیدوارم همین منظورت باشه
              فایل های پیوست شده
              در پناه خداوندگار ایران زمین باشید و پیروز

              کامنت

              • saber2q

                • 2012/04/13
                • 90

                #8
                نوشته اصلی توسط امين اسماعيلي
                با درود من برای کلید شماره 7 یعنی همون سبز کوچیکه یه کد نوشتم هر 2 تا رو باز کن و سبز فایل یک رو بزن. از حالت فشرده فایل رو در بیار.امیدوارم همین منظورت باشه
                دستت درد نکنه، دقیقا درسته فقط چیکار میشه کرد که قبل از Activecell آدرس فایل مورد نظر و پدش رو بفرستیم؟ آخه ممکنه در یک لحظه چند فایل (بیشتر از 2فایل مشابه باز باشن) و تو بعضی از دستورات (مثل protect sheet و Unprotectsheet) که ربطی به سلول اکتیو نداره دچار مشکل میشیم.
                همین کلیدی که زحمت کشیدی انجام دادی رو میخوام با کلیک کردن روش، نام و آدرس اون فایل به فایل اصلی انتقال پیدا کنه و متقابلا سابی که قراره فراخوانی بشه و اجرا بشه با دریافت نام و آدرس فایل فراخوانی بشه و دستورات رو خطاب به فایل مربوطه اجرا کنه.

                با تشکر

                کامنت

                • امين اسماعيلي
                  مدير تالار ويژوال بيسيك

                  • 2013/01/17
                  • 1198
                  • 84.00

                  #9
                  با درود
                  والا من که گیج شدم . ادرسو کجا به کی کدوم .................. تا اینجا من راه داشتم . دستم باز بود بلد بودم .
                  در پناه خداوندگار ایران زمین باشید و پیروز

                  کامنت

                  • saber2q

                    • 2012/04/13
                    • 90

                    #10
                    ببین میخوام از یه دستوری استفاده کنم که مستقیم دستور رو به آدرس فایل مورد نظر بده نه به Activeworkbook یا Activesheet.
                    چون ممکنه در لحظه باز شدن یه فایل هنوز activeworkbook یه فایل دیگه باشه و دستورات تو یه فایل دیگه اعمال بشه. من میخوام با هز دستوری که ارسال میشه, اسم و پد اون فایل هم ارسال بشه و فایل Main هم با دریافت اسم و پد, دستور مورد نظر رو به فایل با همون اسم و پد بفرسته.
                    الان من گیر اینم فقط...

                    کامنت

                    چند لحظه..