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

اگر یک برنامه VBA را از داخل یک نمونه خاص از اکسل اجرا می کنید، می توانید نمونه های دیگری از اکسل ایجاد کنید، کتاب های کار را در نمونه های تازه ایجاد شده باز کرده و تغییر دهید، و سپس آن نمونه ها را ببندید. با این حال، ممکن است تعجب کنید که چگونه می‌توانید در یک ماکرو تعیین کنید که آیا نمونه‌های دیگر اکسل قبلاً در حال اجرا هستند یا خیر، و اگر چنین است، کنترل آن نمونه‌ها را در دست بگیرید.

چند راه برای انجام این کار وجود دارد. اگر به سادگی می خواهید بدانید که چند نمونه از اکسل در حال اجرا هستند، می توانید از یک ماکرو استفاده کنید که از API ویندوز استفاده می کند. تابع زیر این رویکرد را پیاده سازی می کند:

Public Declare Function GetDesktopWindow Lib "user32" () As Long
Public Declare Function FindWindowEx Lib "user32" Alias _
  "FindWindowExA" (ByVal hWnd1 As Long, ByVal
hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long

Function ExcelInstances() As Long
    Dim hWndDesk As Long
    Dim hWndXL As Long

    Get a handle to the desktop
    hWndDesk = GetDesktopWindow

    Do
        Get the next Excel window
        hWndXL = FindWindowEx(GetDesktopWindow, hWndXL, _
          "XLMAIN", vbNullString)

        If we got one, increment the count
        If hWndXL > 0 Then
            ExcelInstances = ExcelInstances + 1
        End If

        Loop until weve found them all
    Loop Until hWndXL = 0
End Function

این کد توسط Excel MVP Stephen Bullen توسعه یافته است و در این سایت قابل مشاهده است:

http://www.officekb.com/Uwe/Forum.aspx/excel-prog/55941

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

Dim xlApp As Excel.Application
Set xlApp = GetObject(, "Excel.Application")

اگر یک نمونه در حال اجرا است، می توانید با استفاده از شی xlApp به آن دسترسی داشته باشید. اگر یک نمونه در حال اجرا نباشد، با خطای زمان اجرا مواجه خواهید شد. تابع GetObject اولین نمونه اکسل را دریافت می کند که بارگذاری شده است. برای دسترسی به دیگران، می توانید آن یکی را ببندید و سپس دوباره GetObject را امتحان کنید تا مورد بعدی و غیره را دریافت کنید.

اگر می‌خواهید xlApp را روی یک نمونه خاص از اکسل تنظیم کنید، اگر نام یک کتاب کار باز را در آن نمونه می‌دانید، می‌توانید این کار را انجام دهید:

Dim xlApp As Excel.Application
Set xlApp = GetObject("ExampleBook.xlsx").Application
اگر خواستی، با این لینک از ما حمایت کن

پاسخ شما

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

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

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

سوالات مشابه

برای دسترسی راحت به مطالب سایت ، اپلیکیشن سایت را نصب کنید
و لطفا بعد از نصب امتیاز دهید. با تشکر از حمایت شما
0 دوستدار 0 امتیاز منفی
0 پاسخ 29 visibility
0 دوستدار 0 امتیاز منفی
1 پاسخ 39 visibility
0 دوستدار 0 امتیاز منفی
0 پاسخ 28 visibility
0 دوستدار 0 امتیاز منفی
0 پاسخ 25 visibility
0 دوستدار 0 امتیاز منفی
0 پاسخ 28 visibility

25.1k سوال

10.4k پاسخ

614 دیدگاه

11.2k کاربر

389 نفر آنلاین
0 عضو و 389 مهمان در سایت حاضرند
بازدید امروز: 10596
بازدید دیروز: 42465
بازدید کل: 20443803
...