وقتی بروس دو کتاب کار باز دارد، ماکروهای کتابهای کار با یکدیگر تداخل پیدا میکنند. بروس از یک زیربرنامه در کتاب کار فعال عبور کرد و مشاهده کرد که به یک ماکرو در کتاب کار دیگر میرود. هیچ روش فراخوانی برای انجام این کار وجود نداشت. فقط پرید بروس متعجب است که چه چیزی باعث این رفتار عجیب می شود.
عیب یابی از راه دور سخت است. این چیزی است که هنگام کار با دو کتاب کار بسیار ساده تر می توان فهمید.
با این حال، مواردی وجود دارد که می توان آنها را به عنوان نقطه شروع پیشنهاد کرد. ابتدا، باید بررسی کنید که هیچ تضاد نامی بین ماکروهای دو کتاب کار وجود نداشته باشد. نامهای رویههای یکسان تحت برخی شرایط میتوانند باعث سردرگمی در اجرای کد VBA شوند.
دوم، به هر متغیری که ممکن است در یک دامنه جهانی تعریف شود نگاهی بیندازید. اگر نام متغیرهای مشابه در هر دو کتاب کار به عنوان "جهانی" تعریف شود، می تواند نتایج نامطلوبی را به همراه داشته باشد.
با این حال، محتمل ترین سناریو این است که یکی از کتاب های کاری یک یا چند کنترل کننده رویداد در حال بازی باشد و آنها در حال فعال شدن هستند. به عنوان مثال، اجازه دهید بگوییم که Workbook1 یک ماکرو معمولی در خود دارد و Workbook2 دارای یک کنترل کننده رویداد است که هر زمان که چیزی در آن Workbook تغییر کند فعال میشود. اگر ماکرو شما در Workbook1 از یک مرجع سلولی استفاده میکند که منجر به تغییر در Workbook2 میشود، در این صورت کنترلکننده رویداد فعال میشود و به طور ناگهانی، کد را در Workbook2 اجرا میکنید (و قابل درک است).
راه حل این است که مطمئن شوید که ماکرو شما در Workbook1 در نحوه ارجاع سلول ها بسیار خاص است تا مطمئن شوید که فقط به سلول های Workbook1 ارجاع می دهد. این مانع از کنترل رویداد در Workbook2 می شود.
ارتباط نزدیک با این موضوع این است که Workbook2 ممکن است ماکروهایی داشته باشد که پس از یک زمان معین به طور خودکار فعال می شوند. به عنوان مثال، می توان یک ماکرو ایجاد کرد که هر پنج دقیقه یکبار اجرا شود. اگر این اتفاق در Workbook2 رخ میدهد، حتی اگر یک ماکرو را در Workbook1 اجرا میکنید، زمانی که زمان تعیین شده فرا میرسد، ماکرو در Workbook2 تا زمانی که اجرای آن تمام شود، کنترل میشود.
برای اینکه ببینیم دقیقاً چه اتفاقی میافتد، نیاز به کمی کار است. بروس به درستی شروع میکند، و به صورت تک مرحلهای از زیربرنامه در Workbook1 عبور میکند. اگر پرش به کد در Workbook2 همیشه دقیقاً در همان مرحله در Workbook1 اتفاق می افتد، سپس بررسی کنید که آیا خط قبلی در کد Workbook1s تغییری در Workbook2 ایجاد کرده است (عمدی یا سهوی). سپس ماژول ها را در Workbook2 بررسی کنید تا ببینید آیا واقعاً یک کنترل کننده رویداد است که راه اندازی شده است یا خیر. اگر چنین است (و نمیخواهید فعال شود)، پس کد شما در Workbook1 باید رویدادها را قبل از تغییر خاموش کند و سپس رویدادها را روشن کند.