ایجاد سوال
dark_mode
0 دوستدار 0 امتیاز منفی
39 visibility
موضوع: آفیس توسط:

اگر تعداد زیادی کتاب کار دارید که می‌خواهید با استفاده از ماکروها پردازش کنید، ممکن است وسوسه شوید که ماکرو پردازش را در هر کتاب کار قرار دهید (به عنوان یک ماکرو Auto_Open)، و سپس نوعی روتین برای بارگیری هر کتاب بنویسید. به نوبه خود، و آن را ذخیره کنید.

اگرچه این ممکن است در تئوری خوب به نظر برسد، اما در عمل کار نخواهد کرد. چرا؟ زیرا هنگامی که یک کتاب کار را تحت کنترل ماکرو باز می کنید، ماکرو Auto_Open در کتاب کاری که باز می شود به طور خودکار اجرا نمی شود. سه راه برای حل این مشکل وجود دارد.

اولین مورد این است که ماکرو خود را دوباره انجام دهید تا در هر کتاب کار به ماکروهای Auto_Open متکی نباشید. اگر ماکرو Auto_Open در هر کتاب کار یکسان است، پس چرا به سادگی کد را به رویه ای جداگانه در کتاب کار کنترل کننده منتقل نکنید؟ برای مثال، فرض کنید از کدی استفاده می‌کردید که این فرآیند را دنبال می‌کرد:

Sub MyMacro()
    Dim J As Integer
    Dim sTarget As String

    Application.ScreenUpdating = False
    For J = 1 To 999
        sTarget = "Book" & Format(J, "000") & ".xls"
        Workbooks.Open sTarget
        Auto_Open runs here
        Workbooks(sTarget).Save
    Next J
    Application.ScreenUpdating = True
End Sub

به دلایلی که قبلا توضیح داده شد، این کار نمی کند. یک راه حل این است که به سادگی کد مشترک Auto_Open را به رویه دیگری منتقل کنید و بعد از باز کردن کتاب کار آن را فراخوانی کنید، همانطور که در اینجا نشان داده شده است:

Sub MyMacro()
    Dim J As Integer
    Dim sTarget As String

    Application.ScreenUpdating = False
    For J = 1 To 999
        sTarget = "Book" & Format(J, "000") & ".xls"
        Workbooks.Open sTarget
        Workbooks(sTarget).Activate
        DoCommonCode
        Workbooks(sTarget).Save
    Next J
    Application.ScreenUpdating = True
End Sub
Sub DoCommonCode()
    Common code goes here
End Sub

این روش به خوبی کار می کند، مشروط بر اینکه روال یکسان باشد که در همه کتاب های کاری مختلف شما اجرا می شود. اگر روال ها در هر کتاب کار متفاوت است، می توانید VBA را مجبور کنید تا ماکرو Auto_Open را اجرا کند. این کار با استفاده از روش RunAutoMacros درست پس از باز کردن کتاب‌های کار انجام می‌شود:

Workbooks.Open sTarget
ActiveWorkbook.RunAutoMacros xlAutoOpen

با توجه به این رویکرد، شما به راحتی می توانید یک ماکرو پیدا کنید که به سادگی هر کتاب کار را باز می کند (بنابراین ماکروهای Auto_Open می توانند اجرا شوند) و سپس آنها را ذخیره می کند. چنین ماکرو به صورت زیر ظاهر می شود:

Sub RunAutoOpenMacrosInBooks()
    Dim J As Integer
    Dim sTarget As String

    Application.ScreenUpdating = False
    For J = 1 To 999
        sTarget = "Book" & Format(J, "000") & ".xls"
        On Error Resume Next
        Workbooks.Open sTarget
        Windows(sTarget).Activate
        With ActiveWorkbook
            If .Name <> ThisWorkbook.Name Then
                .RunAutoMacros xlAutoOpen
                .Save
                .Close
            End If
        End With
    Next i
    Application.ScreenUpdating = True
End Sub

رویکرد سوم و حتی بهتر از آن این است که در هر یک از کتاب های کاری خود به ماکروهای Auto_Open تکیه نکنید. در عوض، به رویداد Workbook_Open به عنوان راهی برای اجرای ماکرو خود تکیه کنید. رویداد Workbook_Open به طور خودکار فعال می شود، صرف نظر از اینکه کتاب کار به صورت دستی یا در ماکرو دیگری باز شود. کدی که رویداد حاوی آن است به طور خودکار اجرا می شود، درست همانطور که از یک ماکرو Auto_Open انتظار دارید.

اگر خواستی، با این لینک از ما حمایت کن

پاسخ شما

looks_5نام شما برای نمایش - اختیاری
حریم شخصی : آدرس ایمیل شما محفوظ میماند و برای استفاده های تجاری و تبلیغاتی به کار نمی رود
عدد چهار رقمی در تصویر را وارد کنید

برای جلوگیری از این تایید در آینده, لطفا وارد شده یا ثبت نام کنید.
اگر حساب گوگل دارید به راحتی وارید شوید

0 پاسخ وجود دارد

سوالات مشابه

برای دسترسی راحت به مطالب سایت ، اپلیکیشن سایت را نصب کنید
و لطفا بعد از نصب امتیاز دهید. با تشکر از حمایت شما
0 دوستدار 0 امتیاز منفی
0 پاسخ 35 visibility
0 دوستدار 0 امتیاز منفی
0 پاسخ 35 visibility
0 دوستدار 0 امتیاز منفی
0 پاسخ 76 visibility
0 دوستدار 0 امتیاز منفی
0 پاسخ 45 visibility

24.3k سوال

9.6k پاسخ

614 دیدگاه

11.2k کاربر

347 نفر آنلاین
0 عضو و 347 مهمان در سایت حاضرند
بازدید امروز: 49346
بازدید دیروز: 25180
بازدید کل: 20386663
...