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

شیلا یک کاربرگ دارد که باید یک سری اعداد چهار رقمی در آن وارد شود. او راهی را می خواهد که در آن Enter یا Tab بین هر ورودی فشار داده نشود. به عبارت دیگر، پس از فشار دادن هر رقم چهارم، شیلا می‌خواهد اکسل به طور خودکار به سلول بعدی برسد.

اکسل این نوع ورود داده را به عنوان یک گزینه ارائه نمی دهد. با این حال، می توانید یک ماکرو برای مدیریت ورود داده ایجاد کنید. یکی از راه‌ها این است که ما یک ماکرو ساده داشته باشیم که از کاربر یک رشته کاراکتر را بخواهد. هنگامی که کاربر Enter را فشار می دهد (برای اینکه نشان دهد رشته کامل شده است)، سپس ماکرو هر تکه چهار کاراکتری متوالی را می گیرد و آنها را در سلول های متوالی قرار می دهد.

Sub FourCharEntry1()
    Dim str As String
    Dim x As Integer
    Dim y As Integer

    str = InputBox("Enter string")
    y = 0
    For x = 1 To Len(str) Step 4
        ActiveCell.Offset(0, y) = "" & Mid(str, x, 4)
        y = y + 1
    Next
End Sub

توجه داشته باشید که ماکرو، از آنجایی که تکه‌های چهار کاراکتری را در سلول‌ها قرار می‌دهد، مطمئن می‌شود که قبل از هر تکه، یک آپستروف وجود دارد. دلیل این امر رسیدگی به مواردی است که تکه چهار کاراکتری ممکن است فقط از اعداد تشکیل شده باشد و آن اعداد با یک یا چند صفر شروع شوند. افزودن آپوستروف مطمئن می شود که اکسل ورودی سلول را به عنوان متن در نظر می گیرد و صفرهای ابتدایی پاک نمی شوند.

همچنین می‌توانید از استفاده از InputBox صرفاً با اجازه دادن به شخصی برای وارد کردن متن در سلولی در کاربرگ اجتناب کنید. فرد می تواند به اندازه دلخواه تایپ کند (در صورت لزوم هزاران کاراکتر). سپس، با انتخاب سلول، می‌توانید یک ماکرو اجرا کنید که اطلاعات را از سلول بیرون می‌کشد و همان کار را انجام می‌دهد - آن‌ها را به تکه‌های چهار کاراکتری تقسیم می‌کند. ماکرو زیر دقیقاً این کار را انجام می دهد:

Sub FourCharEntry2()
    Dim str As String
    Dim x As Integer
    Dim y As Integer

    str = ActiveCell.Value
    y = 0
    For x = 1 To Len(str) Step 4
        ActiveCell.Offset(0, y) = "" & Mid(str, x, 4)
        y = y + 1
    Next
End Sub

روش دیگر استفاده از فرم کاربر سفارشی برای ورودی کاربر است. این فرم تعامل بسیار غنی‌تری با VBA فراهم می‌کند، بنابراین می‌توانید پس از وارد کردن هر چهارمین کاراکتر، اطلاعات را در سلول‌ها قرار دهید.

با ایجاد یک فرم کاربر (همانطور که در شماره های دیگر ExcelTips توضیح داده شد) شروع کنید که شامل دو کنترل است - یک جعبه متن و یک دکمه. نام جعبه متن را vText بگذارید و کد زیر را با آن مرتبط کنید:

Private Sub vText_Change() 
    If Len(vText) = 4 Then
        ActiveCell = vText
        ActiveCell.Offset(0, 1).Activate
        UserForm1.vText.Value = ""
    End If
End Sub

این به سادگی هر بار که محتویات کادر متن تغییر می‌کند (یعنی وقتی هر کاراکتر را تایپ می‌کنید) اجرا می‌شود و سپس طول هر چیزی که در آن وجود دارد را بررسی می‌کند. وقتی طول به 4 رسید، کد آن کاراکترها را می گیرد و آنها را در یک سلول قرار می دهد. سپس محتویات vText خالی می شود.

نام دکمه ای که در فرم کاربر ایجاد می کنید واقعاً مهم نیست. این به عنوان راهی برای بستن فرم کاربر استفاده می شود و باید کد زیر را به آن مرتبط کند:

Private Sub Cancel_Click()
    Unload UserForm1
End Sub

هنگامی که آماده استفاده از فرم کاربر هستید، کافی است سلولی را که می خواهید ورودی از آنجا شروع شود انتخاب کنید و سپس ماکرو زیر را اجرا کنید:

Sub Start()
    UserForm1.Show
End Sub

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

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

پاسخ شما

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

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

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

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

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

23.2k سوال

8.5k پاسخ

608 دیدگاه

9.7k کاربر

94 نفر آنلاین
0 عضو و 94 مهمان در سایت حاضرند
بازدید امروز: 9178
بازدید دیروز: 12076
بازدید کل: 15391589
...