Excel VBA Userform实现多行数据录入的代码解决方案需求
需求完全可行
以下是修改后的代码,实现多行录入、固定字段重复填充、自动生成meter distance的功能:
Private Sub CommandButton2_Click() Dim ws As Worksheet Dim erow As Long Dim i As Integer Dim fixedProjectID As String Dim fixedPlotID As String Dim fixedDate As String Dim fixedFieldCrew As String Dim fixedAzimuth As String Dim currentMeter As Integer ' 用于自动生成meter distance,可按需调整规则 ' 指定目标工作表,避免操作错误工作表 Set ws = ThisWorkbook.Sheets("sheet1") ' 获取数据区域最后一行行号 erow = ws.Range("A" & ws.Rows.Count).End(xlUp).Row ' 一次性读取固定字段值,减少控件访问次数 fixedProjectID = cboProjectID.Value fixedPlotID = TextBox2.Value ' 假设TextBox2对应Plot ID fixedDate = TextBox3.Value ' 假设TextBox3对应Date fixedFieldCrew = cboFieldCrew.Value fixedAzimuth = cboAzimuth.Value ' 初始化meter distance起始值,可根据调查规则修改(比如从0开始或按固定间隔递增) currentMeter = 1 ' 循环处理所有物种下拉框 For i = 1 To 8 Dim sppValue As String sppValue = Me.Controls("cboSPP" & i).Value ' 仅当物种非空时写入数据 If sppValue <> "" Then erow = erow + 1 ' 写入固定字段 ws.Range("A" & erow).Value = fixedProjectID ws.Range("B" & erow).Value = fixedPlotID ws.Range("C" & erow).Value = fixedDate ws.Range("D" & erow).Value = fixedFieldCrew ws.Range("E" & erow).Value = fixedAzimuth ' 自动填入meter distance ws.Range("F" & erow).Value = currentMeter ' 写入当前物种 ws.Range("G" & erow).Value = sppValue ' meter distance递增,可按需调整步长(比如间隔2米就改为currentMeter + 2) currentMeter = currentMeter + 1 End If Next i ' 清空所有物种控件,保留固定字段方便同一样地后续录入 For i = 1 To 8 Me.Controls("cboSPP" & i).Value = "" Next i ' 若需要每次提交后清空所有字段,取消以下注释 'cboProjectID.Value = "" 'TextBox2.Value = "" 'TextBox3.Value = "" 'cboFieldCrew.Value = "" 'cboAzimuth.Value = "" End Sub
关键功能说明:
- 多行录入:通过循环遍历8个物种下拉框,每个非空物种单独生成一行数据
- 固定字段重复填充:提前读取Project ID、Plot ID、Date等固定值,循环中重复写入每一行,避免重复操作控件
- 自动meter distance:通过
currentMeter变量实现自动递增,可根据实际调查规则调整起始值或递增步长 - 操作优化:用动态控件访问简化代码,提交后保留固定字段,方便野外团队连续录入同一样地的多个调查点
内容的提问来源于stack exchange,提问作者M_Perez
相关产品推荐
相关产品推荐

