You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Excel VBA咨询:Form提交后按指定次数批量复制数据到OSP工作表

解决方案

基础功能实现(按输入固定数值批量复制行)

首先确认Form表中「Number of Strands」对应的单元格位置,假设该值存放在Range("C20")(可根据你的实际布局修改单元格地址),修改后的代码如下:

Sub data_input()
    Dim ws_output As String
    Dim next_row As Long
    Dim strand_count As Long
    Dim i As Long
    ' 定义输出工作表名
    ws_output = "OSP"
    ' 读取输入的股数,注意修改后面的单元格地址为你实际的Number of Strands位置
    strand_count = Val(Sheets("Form").Range("C20").Value)
    ' 股数合法性校验
    If strand_count < 1 Then
        MsgBox "请输入有效的股数,值需大于等于1", vbExclamation
        Exit Sub
    End If
    ' 获取OSP表的首个空行位置
    next_row = Sheets(ws_output).Range("A" & Rows.Count).End(xlUp).Offset(1).Row
    ' 循环写入对应行数的表单数据
    For i = 1 To strand_count
        ' 填充Form表C列对应的字段
        Sheets(ws_output).Cells(next_row + i - 1, 1).Value = Sheets("Form").Range("C6").Value
        Sheets(ws_output).Cells(next_row + i - 1, 2).Value = Sheets("Form").Range("C8").Value
        Sheets(ws_output).Cells(next_row + i - 1, 3).Value = Sheets("Form").Range("C10").Value
        Sheets(ws_output).Cells(next_row + i - 1, 4).Value = Sheets("Form").Range("C12").Value
        Sheets(ws_output).Cells(next_row + i - 1, 5).Value = Sheets("Form").Range("C14").Value
        Sheets(ws_output).Cells(next_row + i - 1, 6).Value = Sheets("Form").Range("C16").Value
        Sheets(ws_output).Cells(next_row + i - 1, 7).Value = Sheets("Form").Range("C18").Value
        ' 填充Form表G列对应的字段
        Sheets(ws_output).Cells(next_row + i - 1, 8).Value = Sheets("Form").Range("G6").Value
        Sheets(ws_output).Cells(next_row + i - 1, 9).Value = Sheets("Form").Range("G8").Value
        Sheets(ws_output).Cells(next_row + i - 1, 10).Value = Sheets("Form").Range("G10").Value
        Sheets(ws_output).Cells(next_row + i - 1, 11).Value = Sheets("Form").Range("G12").Value
        Sheets(ws_output).Cells(next_row + i - 1, 12).Value = Sheets("Form").Range("G14").Value
        Sheets(ws_output).Cells(next_row + i - 1, 13).Value = Sheets("Form").Range("G16").Value
        Sheets(ws_output).Cells(next_row + i - 1, 14).Value = Sheets("Form").Range("G18").Value
    Next i
    ' 可选功能:提交后清空表单内容,按需取消注释即可使用
    ' Sheets("Form").Range("C6,C8,C10,C12,C14,C16,C18,G6,G8,G10,G12,G14,G16,G18,C20").ClearContents
    MsgBox "提交成功,共新增" & strand_count & "行记录", vbInformation
End Sub

注意说明

代码中强制指定取值来源为Form表,避免了当前活动表不是Form时取值错误的问题。


进阶功能实现(支持范围输入+自动填充Strand Number)

你提到的进阶功能实现逻辑非常简单,仅需增加字符串拆分逻辑即可实现。假设OSP表的「Strand Number」列是第15列(即O列,可根据实际布局修改列号),完整代码如下:

Sub data_input_advanced()
    Dim ws_output As String
    Dim next_row As Long
    Dim strand_input As String
    Dim start_num As Long, end_num As Long
    Dim i As Long, strand_count As Long
    ws_output = "OSP"
    ' 读取Number of Strands输入值,修改后面的单元格地址为实际位置
    strand_input = Trim(Sheets("Form").Range("C20").Value)
    ' 解析输入内容
    If InStr(strand_input, "-") > 0 Then
        ' 范围输入格式
        start_num = Val(Split(strand_input, "-")(0))
        end_num = Val(Split(strand_input, "-")(1))
        If start_num > end_num Then
            MsgBox "范围输入错误,起始值不能大于结束值", vbExclamation
            Exit Sub
        End If
        strand_count = end_num - start_num + 1
    Else
        ' 单数值输入格式
        start_num = 1
        end_num = Val(strand_input)
        strand_count = end_num
    End If
    ' 合法性校验
    If strand_count < 1 Then
        MsgBox "请输入有效的股数/股数范围", vbExclamation
        Exit Sub
    End If
    next_row = Sheets(ws_output).Range("A" & Rows.Count).End(xlUp).Offset(1).Row
    ' 循环写入数据
    For i = start_num To end_num
        ' 填充通用表单字段
        Sheets(ws_output).Cells(next_row + i - start_num, 1).Value = Sheets("Form").Range("C6").Value
        Sheets(ws_output).Cells(next_row + i - start_num, 2).Value = Sheets("Form").Range("C8").Value
        Sheets(ws_output).Cells(next_row + i - start_num, 3).Value = Sheets("Form").Range("C10").Value
        Sheets(ws_output).Cells(next_row + i - start_num, 4).Value = Sheets("Form").Range("C12").Value
        Sheets(ws_output).Cells(next_row + i - start_num, 5).Value = Sheets("Form").Range("C14").Value
        Sheets(ws_output).Cells(next_row + i - start_num, 6).Value = Sheets("Form").Range("C16").Value
        Sheets(ws_output).Cells(next_row + i - start_num, 7).Value = Sheets("Form").Range("C18").Value
        Sheets(ws_output).Cells(next_row + i - start_num, 8).Value = Sheets("Form").Range("G6").Value
        Sheets(ws_output).Cells(next_row + i - start_num, 9).Value = Sheets("Form").Range("G8").Value
        Sheets(ws_output).Cells(next_row + i - start_num, 10).Value = Sheets("Form").Range("G10").Value
        Sheets(ws_output).Cells(next_row + i - start_num, 11).Value = Sheets("Form").Range("G12").Value
        Sheets(ws_output).Cells(next_row + i - start_num, 12).Value = Sheets("Form").Range("G14").Value
        Sheets(ws_output).Cells(next_row + i - start_num, 13).Value = Sheets("Form").Range("G16").Value
        Sheets(ws_output).Cells(next_row + i - start_num, 14).Value = Sheets("Form").Range("G18").Value
        ' 填充Strand Number,末尾的15改为你实际的列号即可
        Sheets(ws_output).Cells(next_row + i - start_num, 15).Value = i
    Next i
    MsgBox "提交成功,共新增" & strand_count & "行记录", vbInformation
End Sub

内容的提问来源于stack exchange,提问作者Mike Rider

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 20:06:03