如何用 vba 在 Excel 中制作面具?

How to make a mask in Excel with vba?

我在 Excel 中创建了一个用户表单,其中包含 3 个字段。 name1brc1tmx1。用户可以在字段 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