使用Excel宏VBA实现循环用户输入表单并将输出合并到另一个工作表中

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

我在 Excel 中有一个用户输入界面,如下所示:

其中单元格B1、B2是用户输入单元格; A4及以下也是用户输入单元格,但行数不受限制,因此用户可以输入3个帐户(如屏幕截图示例所示),或更多;

我希望添加一个宏,当用户单击“提交”时,结果将合并到另一个工作表中,格式如下:

在“帐户”下输入的数据的显示被分为不同的行,而名字和姓氏条目则成倍增加;

通过VBA,我可以实现Account下一笔数据提交的基本功能,使用的是:

Private Sub data_input() 

ws_output = "Sheet2" 
next_row = Sheets(ws_output).Cells(Rows.Count, 1).End(xlUp).Offset(1).Row 
Sheets(ws_output).Cells(next_row, 1).Value = Range("FN").Value
Sheets(ws_output).Cells(next_row, 2).Value = Range("LN").Value 
Sheets(ws_output).Cells(next_row, 3).Value = Range("A_1").Value 

End Sub

(FN、LN、A_1 是我分配给用户输入单元格的名称)

但是,除非我多次复制并粘贴 Sheets(ws_output).Cells(next_row, 1) 行,否则它无法实现“Account”下的多个数据条目,也不会自行检测用户在“Account”下输入了多少行数据账户;

有哪些方法可以通过 Twitter 发布 VBA 代码来实现此目的;

非常感谢,

excel vba macros
1个回答
0
投票
Option Explicit

Private Sub data_input()
    Dim ws_output As String
    Dim sht_out As Worksheet, c As Range
    Dim ws_in As String, lastRow As Long
    ws_in = "Sheet1"
    ws_output = "Sheet2"
    Set sht_out = Sheets(ws_output)
    ' Locate the first blank cell in Col A on sht_out
    Set c = sht_out.Cells(sht_out.Rows.Count, 1).End(xlUp).Offset(1, 0)
    ' Last row of user input
    lastRow = Sheets(ws_in).Cells(Sheets(ws_in).Rows.Count, 1).End(xlUp).Row
    If lastRow > 3 Then
        With c.Resize(lastRow - 3, 1)
            ' Populate data on sht_out
            .Value = Range("FN").Value
            .Offset(0, 1).Value = Range("LN").Value
            .Offset(0, 2).Value = Sheets(ws_in).Range("A4:A" & lastRow).Value
        End With
    End If
End Sub

© www.soinside.com 2019 - 2024. All rights reserved.