Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database Excel宏,可以使用两列中的数据将新行添加并填充到单独的工作表中_Database_Vba_Excel - Fatal编程技术网

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

Database Excel宏,可以使用两列中的数据将新行添加并填充到单独的工作表中,database,vba,excel,Database,Vba,Excel,我想做的就是这样 我有一个客户信息表,第一张表上的信息分两列存储,范围是F5:F38,M5:M33 我在工作表2中有一个空数据库,我想用这个数据填充它,从C5到BM5 我希望能够将宏指定给“添加”按钮,并让宏自动为数据插入新行并进行复制,使用户能够使用工作表1进行填充 马特 迄今为止,根据David的建议进行了更新。唯一悬而未决的问题是,在运行脚本时,M列中有行军蚂蚁,但数据本身不会跨列复制。为了更清楚,该表有数据验证和一些条件格式(一些下拉选项和Y/N答案上的一些颜色编码),我不确定这是否是一

我想做的就是这样

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

我在工作表2中有一个空数据库,我想用这个数据填充它,从C5到BM5

我希望能够将宏指定给“添加”按钮,并让宏自动为数据插入新行并进行复制,使用户能够使用工作表1进行填充

马特

迄今为止,根据David的建议进行了更新。唯一悬而未决的问题是,在运行脚本时,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

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

如果希望使用按钮调用表单,可以使用分配给按钮的宏:

Sub宏1()
工作表(“工作表1”)。选择
范围(“A1”)。选择
ActiveSheet.ShowDataForm
末端接头

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

如果您有编程方面的知识,我可以向您展示如何在Excel中使用VBA(例如,while等)。这有点复杂

这里是您需要的代码。但有必要确保表2中的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

嗯。我不确定您的问题是什么,但可能与非限定对象变量有关。当您执行以下操作时:

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
范围(“A1”)。选择

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

这可以通过将代码修改为以下内容来避免:

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列复制到该新行中


到目前为止,您已经描述了您想要做的事情。为什么不描述一下您实际尝试了什么,包括代码的示例以及代码未能达到预期效果的地方呢。@David。我已经添加了更多信息。我已经更新了代码以反映您的更改,但现在收到一条错误消息。更新以反映上述情况。非常感谢您的帮助。到目前为止,错误信息是什么?错误在哪一行出现?我看不到您的原始问题有任何修改。请检查是否有打字错误,您是指“表1”还是“表1”。我已修改了对“数据库”和“输入”的引用,而不是对表1和表2的引用,脚本现在正在用C列中的信息填充数据库页面!遗憾的是,F列数据没有被复制?我没有更改您更新代码中的任何其他内容。非常感谢你迄今为止的帮助!只是补充一下,当我运行脚本时,从F开始的单元格区域有行进的蚂蚁。所以可以肯定地说它就快到了。。!??