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

کریس در حال توسعه یک ماکرو اکسل است که یک سری موارد را به کاربر نمایش می دهد. او می خواهد یک تاخیر در ماکرو مثلاً یک ثانیه بین هر قطعه اطلاعاتی که نمایش می دهد معرفی کند، و از خود می پرسد که آیا راه آسانی برای اضافه کردن چنین تاخیری وجود دارد؟

چند راه وجود دارد که می توانید تاخیر را در ماکرو خود وارد کنید. روش سنتی استفاده از متد Wait است که با شی Application استفاده می شود. شما از آن برای معرفی تاخیر یک ثانیه ای به این صورت استفاده می کنید:

Application.Wait (Now() + TimeValue("0:00:01"))

توجه داشته باشید که پارامتر مورد نیاز روش Wait زمانی است که می خواهید ماکرو شما از سر گرفته شود. به عبارت دیگر، زمان «انتظار تا» است. به همین دلیل است که در مثال بالا از زمان جاری (از تابع Now) با افزایش یک ثانیه استفاده می شود.

اگر ترجیح می دهید از روش Wait (به هر دلیلی) استفاده نکنید، می توانید فقط از یک حلقه برای صرف زمان خود استفاده کنید:

Dim WaitTime As Date

WaitTime = Now() + TimeValue("0:00:01")
Do While Now < WaitTime
Loop

یک نوع از این رویکرد به تابع تایمر متکی است که تعداد ثانیه ها را از نیمه شب برمی گرداند:

Dim Endpoint as Single

Endpoint = Timer + 1
Do While Timer < Endpoint
Loop

هنگام استفاده از یک حلقه به این روش، اگر فقط یک ثانیه تاخیر داشته باشید، احتمالاً مشکل بزرگی نخواهد بود. اگر نیاز به تأخیر طولانی تری دارید، احتمالاً می خواهید تابع DoEvents را در حلقه قرار دهید:

Dim Endpoint as Single

Endpoint = Timer + 1
Do While Timer < Endpoint
    DoEvents
Loop

دلیل آن ساده است - اگر این کار را نکنید، اکسل در حالی که در حلقه است به هیچ رویداد دیگری پاسخ نمی دهد. این می تواند باعث شود که به نظر برسد سیستم شما در حین انتظار یخ زده یا آویزان شده است.

اگر به جزئیات بیشتر در تأخیرهای خود (تا محدوده میلی ثانیه) نیاز دارید، ممکن است بخواهید به عملکرد Sleep که بخشی از API ویندوز است تکیه کنید. (این بخشی از VBA نیست.) برای استفاده از آن، باید یک اعلان را در ابتدای ماژول خود، در ناحیه اعلامیه ها، قبل از هر روشی وارد کنید:

#If VBA7 And Win64 Then
    Public Declare PtrSafe Sub Sleep Lib "kernel32"(ByVal dwMilliseconds As Long)
#Else
    Public Declare Sub Sleep Lib "kernel32"(ByVal dwMilliseconds As Long)
#End If

سپس در ماکرو خود می توانید از تابع Sleep به این صورت استفاده کنید:

Sleep(1000)

این سیستم را برای 1000 میلی ثانیه مکث می کند که 1 ثانیه است.

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

پاسخ شما

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

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

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

سوال مشابهی یافت نشد

برای دسترسی راحت به مطالب سایت ، اپلیکیشن سایت را نصب کنید
و لطفا بعد از نصب امتیاز دهید. با تشکر از حمایت شما

23.2k سوال

8.5k پاسخ

608 دیدگاه

9.7k کاربر

79 نفر آنلاین
0 عضو و 79 مهمان در سایت حاضرند
بازدید امروز: 2504
بازدید دیروز: 14408
بازدید کل: 15451425
...