请耐心等待我尝试解释这一点。我正在尝试开发一个数据输入表格,以便与我们的工作人员一起进入现场,该表格将自动下载到我们所需的 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
看起来您的第一行组合框遵循
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