Sheila的工作表中需要输入一系列的四位数。她想要一种不需要在每个条目之间按下Enter或Tab的方法。换句话说,在按下每四个数字之后,Sheila希望Excel自动前进到下一个单元格。

Excel不提供这种类型的数据输入作为选项。但是,您可以创建一个宏来处理数据输入。一种方法是为我们提供一个简单的宏,该宏会提示用户输入字符串。当用户按下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

请注意,该宏将四个字符的块放入单元格中,因此请确保每个块前面都带有撇号。这样做的原因是要处理那些四个字符的块可能只包含数字并且这些数字以一个或多个零开头的情况。添加撇号可确保Excel将单元格输入视为文本,并且不会清除前导零。

您也可以通过简单地允许某人在工作表的单元格中输入文本来避免使用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

出现用户表单,您可以开始键入。完成后,只需单击按钮,用户表单将关闭。

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(13102)适用于Microsoft Excel 2007、2010、2013、2016、2019和Office 365中的Excel。您可以在此处为Excel的较旧菜单界面找到此技巧的版本: