شیلا یک کاربرگ دارد که باید یک سری اعداد چهار رقمی در آن وارد شود. او راهی را می خواهد که در آن 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
فرم کاربر ظاهر می شود و می توانید شروع به تایپ کردن کنید. پس از اتمام کار، فقط روی دکمه کلیک کنید و فرم کاربر بسته می شود.