设置标题列的名称 - 预期的14个列名称

时间:2018-05-22 01:19:20

标签: excel vba excel-vba

我有一个简单的用户表单,用于收集有关人员的信息。

这是我添加6人信息时得到的一个例子。我想从第3行开始信息列表(因为2个第一行由命令按钮“Remplir formulaire”填充:

Example of filled form

我的问题是,在调用userForm时,我希望每个前14列有14个标题名称(将这些值填入这些列的函数将在我的代码中稍后完成)。

要设置14个字段的名称(从row = 3开始),我做了:

Private Sub ResetForm()

'Monsieur by default
ComboBox1.Value = "Monsieur"

'Empty TextBox1
TextBox1.Value = ""

'Empty TextBox2
TextBox2.Value = ""

'Empty TextBox3
TextBox3.Value = ""

End Sub

Private Sub UserForm_Initialize()

'Create header for each colum
Dim HeaderName(14) As String

'Index to browse HeaderName array
Dim a As Integer

HeaderName(1) = "Civilité"
HeaderName(2) = "Nom"
HeaderName(3) = "Prénom"
HeaderName(4) = "Âge"
HeaderName(5) = "Fonction"
HeaderName(6) = "Entité"
HeaderName(7) = "Catégorie"
HeaderName(8) = "Adresse"
HeaderName(9) = "Code postal"
HeaderName(10) = "Ville"
HeaderName(11) = "Tél Fixe"
HeaderName(12) = "Tél Portable"
HeaderName(13) = "Email"
HeaderName(14) = "Autres infos"

'Initlialize headers : start from row = 3
Sheet1.Activate
With Sheet1
      For a = 1 To 14
           If (.Cells(3, a) <> "") Then
             .Cells(3, a).Value = HeaderName(a)
           End If
           Debug.Print "a = " & a
      Next a
End With

'Fill ComboBox
With ComboBox1
    .AddItem "Monsieur"
    .AddItem "Madame"
End With

'Set Elu by default
CheckBox1.Value = True
CheckBox2.Value = False

'Reset all inputs
Call ResetForm

End Sub

并进入相同的VBA源代码,我为Command按钮“”Remplir Formulaire“做了一遍:

Private Sub CommandButton1_Click()

Dim emptyRow As Long

Sheet1.Activate

With Sheet1
emptyRow = .UsedRange.Rows.Count + .UsedRange.Rows(1).Row - 1
    If .Cells(emptyRow, 1).Value <> "" Then
        emptyRow = emptyRow + 1
        .Cells(emptyRow, 1).Value = ComboBox1.Value
        .Cells(emptyRow, 2).Value = TextBox1.Value
        .Cells(emptyRow, 3).Value = TextBox2.Value
        .Cells(emptyRow, 4).Value = TextBox3.Value
        .Cells(emptyRow, 5).Value = CheckBox1.Value

        If CheckBox1.Value = True Then
           .Cells(emptyRow, 5).Value = CheckBox1.Caption
        Else
           .Cells(emptyRow, 5).Value = CheckBox2.Caption
        End If
    End If
End With

End Sub

所以我不明白为什么我不能通过UserForm_Initialize()数组得到函数HeaderName中指定的每个顶部列的14个名称:只有前四个(Civilité,Nom,Prénom,单击“Remplir Formulaire”命令按钮时显示年龄,而不是其他10个。

任何人都可以看到什么是错的?此致

ps:.xlsm可以从this link

下载

1 个答案:

答案 0 :(得分:1)

你真的需要检查细胞是否为空?我会用以下代码替换20多行代码:

Sheet1.Range("A3").Resize(1, 14).Value = Array("Civilité", "Nom", "Prénom", "Âge", "Fonction", "Entité", "Catégorie", "Adresse", "Code postal", "Ville", "Tél Fixe", "Tél Portable", "Email", "Autres infos")