一个Excel宏,可以使用两列中的数据将新行添加并填充到单独的工作表中

时间:2014-04-22 16:41:58

标签: database excel vba excel-vba

我想做的就是这个。

我有一份客户信息表,信息存储在第一张纸上两列,范围是F5:F38,M5:M33

我在工作表2上有一个空数据库,我想填充这些数据,从C5开始到BM5

我希望能够将宏分配给“添加”。按钮,让宏自动为数据插入一个新行并将其复制,使用户能够使用工作表1来填充!

马特

目前为止,大卫的建议已经更新。唯一突出的问题是,在运行脚本时,列M具有行进的蚂蚁,但数据本身不会复制。为了进一步清晰起见,工作表有数据验证和一些条件格式(一些下拉选项和Y / N答案的一些颜色编码),我不确定这是否是一个因素。

Dim wsDB As Worksheet
Dim wsInfo As Worksheet

Sub Main()
Set wsDB = Worksheets("DATABASE")
Set wsInfo = Worksheets("INPUT")

insertnewrow
addcolumnf
addcolumnm

End Sub
Sub insertnewrow()
'
' insertnewrow Macro

    wsDB.Rows("6:6").Insert _
        Shift:=xlDown, _
        CopyOrigin:=xlFormatFromLeftOrAbove
End Sub
Sub addcolumnf()
'
' addcolumnf Macro

    wsInfo.Range("F5:F38").Copy
    wsDB.Range("C6:AJ6").PasteSpecial _
            Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
            False, Transpose:=True


End Sub
Sub addcolumnm()
'
' addcolumnm Macro
'
    Application.CutCopyMode = False
    wsInfo.Range("M5:M33").Copy
    wsDB.Range("AK6:BM6").PasteSpecial _
            Paste:=xlAllExceptBorders, Operation:=xlNone, _
            SkipBlanks:=False, Transpose:=True

End Sub

2 个答案:

答案 0 :(得分:0)

我建议您开始使用Microsoft Excel中包含的名为“Data Form”的工具。将其添加到菜单中并使用它。重要的是你需要重新组织你的数据:在第一行中将标题(例如从A1开始到A ...)和下一行中的数据。此组织将帮助您使用数据透视表来利用您的信息。

如果您更喜欢使用按钮来调用表单,则可以使用分配给按钮的宏:

Sub Macro1() Sheets("worksheet1").Select Range("A1").Select ActiveSheet.ShowDataForm End Sub

此链接将向您展示有关该工具的更多信息:

http://www.homeandlearn.co.uk/excel2007/excel2007s8p1.html

如果您对编程有所了解,我可以向您展示如何在Excel中使用VBA(for,while等)。这有点复杂。

这里是您需要的代码。但是必须要求sheet2中的C5为空:

Sub Macro6()
Dim Count As Long

'Copy first column
Sheets("worksheet1").Select
Range("F5:F38").Select
Selection.Copy

'Search the next row empty
Sheets("worksheet2").Select
Range("C5").Select
Selection.End(xlDown).Select
Count = ActiveCell.Cells.Row + 1

'Copy in the next empty row
Range("C" & Count).Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
    False, Transpose:=True

'Again with the next column
'Copy second column
Sheets("worksheet1").Select
Range("M5:M33").Select
Application.CutCopyMode = False
Selection.Copy

'Copy in the same row in the second sheet
Sheets("worksheet2").Select
Range("AK" & Count).Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
    False, Transpose:=True

End Sub

答案 1 :(得分:0)

行。我不确定你的问题是什么,但可能与非限定对象变量有关。当你做类似的事情时:

Range("A1").Select

Excel始终将其解释为属于ActiveSheet对象。由于您依赖于Selection方法,因此很难跟踪正在发生的事情,您需要不断选择新对象以适当地确定所有内容的范围等。

通过将代码修改为:

,可以避免这种情况
Dim wsDB As Worksheet
Dim wsInfo As Worksheet

Sub Main()
Set wsDB = Worksheets("Database")
Set wsInfo = Worksheets("Sheet3") 'MODIFY AS NEEDED

insertnewrow
addcolumnf
addcolumnm

End Sub
Sub insertnewrow()
'
' insertnewrow Macro

    wsDB.Rows("6:6").Insert _
        Shift:=xlDown, _
        CopyOrigin:=xlFormatFromLeftOrAbove
End Sub
Sub addcolumnf()
'
' addcolumnf Macro

    wsInfo.Range("F5:F38").Copy
    wsDB.Range("C6:AJ6").PasteSpecial _
            Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
            False, Transpose:=True


End Sub
Sub addcolumnm()
'
' addcolumnm Macro
'
    Application.CutCopyMode = False
    wsInfo.Range("M5:M33").Copy
    wsDB.Range("AK6:BM6").PasteSpecial _
            Paste:=xlAllExceptBorders, Operation:=xlNone, _
            SkipBlanks:=False, Transpose:=True

End Sub

运行几次后,我的“数据库”工作表如下图所示。只需调用Main例程即可激活其他三个例程。它总是在第6行插入一个空行,它总是将F和M列复制到该新行。

enter image description here