编写 excel VBA 用户窗体以将数据输入多行

问题描述 投票:0回答:1

请耐心等待我尝试解释这一点。我正在尝试开发一个数据输入表格,以便与我们的工作人员一起进入现场,该表格将自动下载到我们所需的 Excel 表格中。我们在每个植被地块的每个点上记录了多个物种。我创建了一个下拉物种列表以减少每个选择的错误,但不知道如何让它下载多行信息。我只能使其适用于一行(我知道需要创建一个 forloop,但对语言的理解不够好)或如何在不让用户输入该信息的情况下包含示例的位置。我已经包括了表格和 Excel 格式的样子。

用户表单:

工作表:

这是我当前拥有的代码,适用于第一行信息。我希望自动输入米距离,并且每次下载新行信息时,我希望项目 ID、地块 ID 和日期也能被重写。这可能吗?我是不是太过分了?

Private Sub CommandButton2_Click()

erow = Sheets("sheet1").Range("a" & Rows.Count).End(xlUp).Row
    Range("a" & erow + 1) = cboProjectID.Value
    Range("b" & erow + 1) = TextBox2.Value
    Range("c" & erow + 1) = TextBox3.Value
    Range("d" & erow + 1) = cboFieldCrew.Value
    Range("e" & erow + 1) = cboAzimuth.Value
    Range("g" & erow + 1) = cboSPP1.Value
    Range("h" & erow + 1) = cboSPP2.Value
    Range("i" & erow + 1) = cboSPP3.Value
    Range("j" & erow + 1) = cboSPP4.Value
    Range("k" & erow + 1) = cboSPP5.Value
    Range("l" & erow + 1) = cboSPP6.Value
    Range("m" & erow + 1) = cboSPP7.Value
    Range("n" & erow + 1) = cboSPP8.Value

    cboProjectID.Value = ""
    TextBox2.Value = ""
    TextBox3.Value = ""
    cboFieldCrew.Value = ""
    cboAzimuth.Value = ""
    cboSPP1.Value = ""
    cboSPP2.Value = ""
    cboSPP3.Value = ""
    cboSPP4.Value = ""
    cboSPP5.Value = ""
    cboSPP6.Value = ""
    cboSPP7.Value = ""
    cboSPP8.Value  = ""


End Sub
excel vba userform
1个回答
0
投票

看起来您的第一行组合框遵循

cboSPP1
cboSPP8

的命名约定 我可能会将其更改为第一行的
cboSPP1_1
cboSPP1_8
,然后第二行的
cboSPP2_1 to cboSPP2_8
,依此类推。然后你可以使用循环和类似的东西

Me.Controls("cboSSP" & lineNum & "_" & SPPNum).Value

访问相关下拉菜单的值。

“仪表”标签也是如此。

未经测试:

Private Sub CommandButton2_Click()
    
    Dim rw As Range, lineNum As Long, SPPNum As Long, arrInfo, arrSPP, con As Control
    
    'the next unused row (in ColA)
    Set rw = ThisWorkbook.Sheets("sheet1").Range("A" & Rows.Count).End(xlUp).Offset(1).EntireRow
    
    'information to be repeated on each line...
    arrInfo = Array(cboProjectID.Value, TextBox2.Value, TextBox3.Value, _
                    cboFieldCrew.Value, cboAzimuth.Value)
    
    For lineNum = 1 To 9 'however many lines of info you have
        rw.Columns("A").Resize(1, UBound(arrInfo) + 1).Value = arrInfo      'assign repeated info from array
        rw.Columns("F").Value = Me.Controls("lblMeters" & lineNum).Caption  'read the "meters" label
        For SPPNum = 1 To 8 'loop the species combos for this row
            rw.Columns("G").Offset(0, SPPNum - 1) = _
                Me.Controls("cboSSP" & lineNum & "_" & SPPNum).Value
        Next SPPNum
        Set rw = rw.Offset(1) 'next worksheet row
    Next lineNum
    
    'clear the form
    cboProjectID.Value = ""
    TextBox2.Value = ""
    TextBox3.Value = ""
    cboFieldCrew.Value = ""
    cboAzimuth.Value = ""
    
    'reset all SPP combos
    For Each con In Me.Controls
        If con.Name Like "cboSPP*" Then con.Value = ""
    Next con
    
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.