我想做的就是这个。
我有一份客户信息表,信息存储在第一张纸上两列,范围是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
答案 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列复制到该新行。