如何用 vba 在 Excel 中制作面具?
How to make a mask in Excel with vba?
我在 Excel 中创建了一个用户表单,其中包含 3 个字段。 name1
、brc1
和 tmx1
。用户可以在字段 tmx1
中输入从 1 到 9999 的任何数字。我希望他单击 发送 按钮时发送一个屏蔽号码如下 0000
到另一个名为 data.xls
的 ecxel 例如,如果用户在字段 tmx1
21 中键入我希望程序发送 0021 如果他输入 321 发送 0321 如果是 4 个数字就可以,依此类推。
我的部分代码如下:
Private Sub cmdSend_Click()
Workbooks.Open Filename:="Z:\Tameio\data.xls"
Range("A1").Select
ActiveCell.End(xlDown).Select
lastrow = ActiveCell.Row
Cells(lastrow + 1, 1).Value = name1.Text
Cells(lastrow + 1, 2).Value = brc1.Text
Cells(lastrow + 1, 3).Value = tmx1.Text
Range("A1").Select
ActiveWorkbook.Close SaveChanges:=True
您可以使用 Format
函数进行屏蔽。以这个函数存根为例:
Public Function Masking(Data As Integer) As String
Masking = Format(Data, "0000")
End Function
Sub Test_Masking()
Debug.Print Masking(1)
Debug.Print Masking(12)
Debug.Print Masking(123)
Debug.Print Masking(1234)
Debug.Print Masking(12345)
End Sub
结果:
0001
0012
0123
1234
12345
将其应用于您的案例:
Private Sub CommandButton1_Click()
Workbooks.Open Filename:="Z:\Tameio\data.xls"
Range("A1").Select
ActiveCell.End(xlDown).Select
lastrow = 10 ' change this to whatever you prefer
Cells(lastrow + 1, 1).Value = name1.Text
Cells(lastrow + 1, 2).Value = brc1.Text
Cells(lastrow + 1, 3).Value = "'" & Format(tmx1.Text, "0000")
Range("A1").Select
ActiveWorkbook.Close SaveChanges:=True
End Sub
编辑:
根据 Mat's Mug 的优秀建议,这里有一个更通用的格式化函数:
Public Function Masking(Data As Integer, TotalLengthWithZeroPad As Integer) As String
Masking = Format(Data, String(TotalLengthWithZeroPad, "0"))
End Function
Sub Test_Masking()
Dim totallength As Integer
totallength = 10 ' how long will our string's total length be?
Debug.Print Masking(1, totallength)
Debug.Print Masking(12, totallength)
Debug.Print Masking(123, totallength)
Debug.Print Masking(1234, totallength)
Debug.Print Masking(12345, totallength)
End Sub
结果
0000000001
0000000012
0000000123
0000001234
0000012345
我在 Excel 中创建了一个用户表单,其中包含 3 个字段。 name1
、brc1
和 tmx1
。用户可以在字段 tmx1
中输入从 1 到 9999 的任何数字。我希望他单击 发送 按钮时发送一个屏蔽号码如下 0000
到另一个名为 data.xls
的 ecxel 例如,如果用户在字段 tmx1
21 中键入我希望程序发送 0021 如果他输入 321 发送 0321 如果是 4 个数字就可以,依此类推。
我的部分代码如下:
Private Sub cmdSend_Click()
Workbooks.Open Filename:="Z:\Tameio\data.xls"
Range("A1").Select
ActiveCell.End(xlDown).Select
lastrow = ActiveCell.Row
Cells(lastrow + 1, 1).Value = name1.Text
Cells(lastrow + 1, 2).Value = brc1.Text
Cells(lastrow + 1, 3).Value = tmx1.Text
Range("A1").Select
ActiveWorkbook.Close SaveChanges:=True
您可以使用 Format
函数进行屏蔽。以这个函数存根为例:
Public Function Masking(Data As Integer) As String
Masking = Format(Data, "0000")
End Function
Sub Test_Masking()
Debug.Print Masking(1)
Debug.Print Masking(12)
Debug.Print Masking(123)
Debug.Print Masking(1234)
Debug.Print Masking(12345)
End Sub
结果:
0001
0012
0123
1234
12345
将其应用于您的案例:
Private Sub CommandButton1_Click()
Workbooks.Open Filename:="Z:\Tameio\data.xls"
Range("A1").Select
ActiveCell.End(xlDown).Select
lastrow = 10 ' change this to whatever you prefer
Cells(lastrow + 1, 1).Value = name1.Text
Cells(lastrow + 1, 2).Value = brc1.Text
Cells(lastrow + 1, 3).Value = "'" & Format(tmx1.Text, "0000")
Range("A1").Select
ActiveWorkbook.Close SaveChanges:=True
End Sub
编辑:
根据 Mat's Mug 的优秀建议,这里有一个更通用的格式化函数:
Public Function Masking(Data As Integer, TotalLengthWithZeroPad As Integer) As String
Masking = Format(Data, String(TotalLengthWithZeroPad, "0"))
End Function
Sub Test_Masking()
Dim totallength As Integer
totallength = 10 ' how long will our string's total length be?
Debug.Print Masking(1, totallength)
Debug.Print Masking(12, totallength)
Debug.Print Masking(123, totallength)
Debug.Print Masking(1234, totallength)
Debug.Print Masking(12345, totallength)
End Sub
结果
0000000001
0000000012
0000000123
0000001234
0000012345