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

Ray می خواهد، در صورت امکان، راهی برای متحرک کردن «شمارش بالا» برای یک مقدار در یک سلول باشد. به عنوان مثال، در سلول B7 ممکن است مقدار 23 داشته باشد. او می خواهد به آن مقدار در سلول E4 اشاره کند و تعداد سلول های E4 را از 0 تا 23 (0، 1، 2، 3، و غیره) داشته باشد که هر عدد را نشان می دهد. به نوبه خود.

هیچ روش داخلی برای انجام این کار در اکسل وجود ندارد، اما می توانید از یک ماکرو برای انجام انیمیشن استفاده کنید. اساساً، ماکرو باید بفهمد در سلول B7 چه چیزی وجود دارد، و سپس از یک حلقه For...Next برای عبور از مقادیر بین 0 و هر آنچه در B7 است استفاده کند. در طی هر بار تکرار حلقه، مقدار E4 تغییر می کند و نوعی تاخیر ایجاد می شود.

بخش تاخیر ماکرو چیزی است که در واقع توانایی تغییر نحوه انجام کار ماکرو را فراهم می کند. تأخیر لازم است تا انیمیشن کار کند. بدون آن، اعداد در E4 خیلی سریع افزایش می یابند. اکسل چند راه مفید برای پیاده سازی تاخیر ارائه می دهد. به عنوان مثال، این مثال از ماکرو به تابع Sleep متکی است:

#If VBA7 Then
Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#Else
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#End If
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim n As Integer
    Const cellWatch As String = "$B$7"
    Const cellCount As String = "$E$4"
    Const msec As Long = 200  milliseconds
    If Target.Address = cellWatch Then
        Application.EnableEvents = False
        Range(cellCount).Show
        If IsNumeric(Target) Then
            For n = 0 To Target  skipped if Target < 0
                Range(cellCount) = n
                Sleep msec  delay each increment
            Next n
        End If
        Range(cellCount) = Target
        Application.EnableEvents = True
    End If
End Sub

این کد باید به ماژول ThisWorksheet اضافه شود، زیرا طوری طراحی شده است که هر بار که چیزی در کاربرگ تغییر می کند اجرا شود. کد بررسی می کند که آیا سلول در حال تغییر سلول هدف (B7) است یا خیر. اگر اینطور باشد، مقدار را در آنجا می گیرد و به حلقه For...Next می پرد که هر چیزی را در سلول E4 به روزرسانی می کند. تابع Sleep برای به تاخیر انداختن، در این مثال، 200 میلی ثانیه بین هر به روز رسانی E4 استفاده می شود.

اگر ماکرویی می خواهید که کوتاه تر باشد و به کنترل کننده رویداد Worksheet_Change متکی نباشد، ممکن است موارد زیر را در نظر بگیرید. از روش Wait برای مکث در حلقه For...Next استفاده می کند:

Sub CountUp()
    Dim J As Integer
    For J = 0 To Range("B7").Value
        Range("E4").Value = J
        Application.Wait (Now + TimeValue("0:00:01"))
    Next J
    Range("E4").Value = Range("B7").Value
End Sub

این نسخه از ماکرو یک ثانیه کامل بین هر به روز رسانی به سلول E4 مکث می کند.

هر زمان که از یک ماکرو مانند این استفاده می کنید که نوعی تاخیر را پیاده سازی می کند، به یاد داشته باشید که کاربرگ شما ممکن است کمتر پاسخگو باشد. این به دلیل آن تأخیر است و هر چقدر هم که مقدار آن در سلول E4 زیاد باشد. (هرچه مقدار بزرگتر باشد، تأخیر کل بیشتر می شود.)

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

پاسخ شما

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

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

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

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

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

23.2k سوال

8.5k پاسخ

614 دیدگاه

11.1k کاربر

100 نفر آنلاین
0 عضو و 100 مهمان در سایت حاضرند
بازدید امروز: 7232
بازدید دیروز: 16808
بازدید کل: 20170511
...