Vba 从可变单元格复制数据并粘贴到另一个电子表格中的固定单元格

Vba 从可变单元格复制数据并粘贴到另一个电子表格中的固定单元格,vba,excel,copy-paste,Vba,Excel,Copy Paste,我希望在excel 2013中构建一个宏,它可以执行以下操作: 从一个电子表格中的单个单元格复制数据(电子表格1)。列永远不会更改,但行会更改,因为它是一个不断更新的零件数据库 将此数据从电子表格1粘贴到另一个电子表格(电子表格2)的相应单元格中。电子表格2中的单元格永远不会更改 把这份文件打印出来 对电子表格1中的下一行数据重复步骤1-3 注意:理想情况下,宏允许用户突出显示电子表格1中要复制到电子表格2中的数据部分。然后,宏将打印出适用于电子表格1中每个行项目的电子表格2版本 我欢迎任何人给

我希望在excel 2013中构建一个宏,它可以执行以下操作:

  • 从一个电子表格中的单个单元格复制数据(电子表格1)。列永远不会更改,但行会更改,因为它是一个不断更新的零件数据库

  • 将此数据从电子表格1粘贴到另一个电子表格(电子表格2)的相应单元格中。电子表格2中的单元格永远不会更改

  • 把这份文件打印出来

  • 对电子表格1中的下一行数据重复步骤1-3

  • 注意:理想情况下,宏允许用户突出显示电子表格1中要复制到电子表格2中的数据部分。然后,宏将打印出适用于电子表格1中每个行项目的电子表格2版本

    我欢迎任何人给我任何建议

    当前代码:

    Sub SOAutomator()
    '
    ' SOAutomator Macro
    '
    
    '
    Range("A4").Select
    Selection.Copy
    Windows("Job Sheet Templates.xlsx").Activate
    Range("A5").Select
    ActiveSheet.Paste
    Windows("Shop Order Automator Macro.xlsm").Activate
    Range("C4").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("Job Sheet Templates.xlsx").Activate
    Range("A7:D7").Select
    ActiveSheet.Paste
    Windows("Shop Order Automator Macro.xlsm").Activate
    Range("D4").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("Job Sheet Templates.xlsx").Activate
    Range("I5:K5").Select
    ActiveSheet.Paste
    Windows("Shop Order Automator Macro.xlsm").Activate
    Range("E4").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("Job Sheet Templates.xlsx").Activate
    Range("E5:G5").Select
    ActiveSheet.Paste
    Windows("Shop Order Automator Macro.xlsm").Activate
    Range("F4").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("Job Sheet Templates.xlsx").Activate
    Range("H5").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, Collate _
        :=True, IgnorePrintAreas:=False
    Windows("Shop Order Automator Macro.xlsm").Activate
    
    Range("A5").Select
    Selection.Copy
    Windows("Job Sheet Templates.xlsx").Activate
    Range("A5").Select
    ActiveSheet.Paste
    Windows("Shop Order Automator Macro.xlsm").Activate
    Range("C5").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("Job Sheet Templates.xlsx").Activate
    Range("A7:D7").Select
    ActiveSheet.Paste
    Windows("Shop Order Automator Macro.xlsm").Activate
    Range("D5").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("Job Sheet Templates.xlsx").Activate
    Range("I5:K5").Select
    ActiveSheet.Paste
    Windows("Shop Order Automator Macro.xlsm").Activate
    Range("E5").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("Job Sheet Templates.xlsx").Activate
    Range("E5:G5").Select
    ActiveSheet.Paste
    Windows("Shop Order Automator Macro.xlsm").Activate
    Range("F5").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("Job Sheet Templates.xlsx").Activate
    Range("H5").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, Collate _
        :=True, IgnorePrintAreas:=False
    Windows("Shop Order Automator Macro.xlsm").Activate
    
    Range("A6").Select
    Selection.Copy
    Windows("Job Sheet Templates.xlsx").Activate
    Range("A5").Select
    ActiveSheet.Paste
    Windows("Shop Order Automator Macro.xlsm").Activate
    Range("C6").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("Job Sheet Templates.xlsx").Activate
    Range("A7:D7").Select
    ActiveSheet.Paste
    Windows("Shop Order Automator Macro.xlsm").Activate
    Range("D6").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("Job Sheet Templates.xlsx").Activate
    Range("I5:K5").Select
    ActiveSheet.Paste
    Windows("Shop Order Automator Macro.xlsm").Activate
    Range("E6").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("Job Sheet Templates.xlsx").Activate
    Range("E5:G5").Select
    ActiveSheet.Paste
    Windows("Shop Order Automator Macro.xlsm").Activate
    Range("F6").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("Job Sheet Templates.xlsx").Activate
    Range("H5").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, Collate _
        :=True, IgnorePrintAreas:=False
    Windows("Shop Order Automator Macro.xlsm").Activate
    
    Range("A7").Select
    Selection.Copy
    Windows("Job Sheet Templates.xlsx").Activate
    Range("A5").Select
    ActiveSheet.Paste
    Windows("Shop Order Automator Macro.xlsm").Activate
    Range("C7").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("Job Sheet Templates.xlsx").Activate
    Range("A7:D7").Select
    ActiveSheet.Paste
    Windows("Shop Order Automator Macro.xlsm").Activate
    Range("D7").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("Job Sheet Templates.xlsx").Activate
    Range("I5:K5").Select
    ActiveSheet.Paste
    Windows("Shop Order Automator Macro.xlsm").Activate
    Range("E7").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("Job Sheet Templates.xlsx").Activate
    Range("E5:G5").Select
    ActiveSheet.Paste
    Windows("Shop Order Automator Macro.xlsm").Activate
    Range("F7").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("Job Sheet Templates.xlsx").Activate
    Range("H5").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, Collate _
        :=True, IgnorePrintAreas:=False
    Windows("Shop Order Automator Macro.xlsm").Activate
    
    Range("A8").Select
    Selection.Copy
    Windows("Job Sheet Templates.xlsx").Activate
    Range("A5").Select
    ActiveSheet.Paste
    Windows("Shop Order Automator Macro.xlsm").Activate
    Range("C8").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("Job Sheet Templates.xlsx").Activate
    Range("A7:D7").Select
    ActiveSheet.Paste
    Windows("Shop Order Automator Macro.xlsm").Activate
    Range("D8").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("Job Sheet Templates.xlsx").Activate
    Range("I5:K5").Select
    ActiveSheet.Paste
    Windows("Shop Order Automator Macro.xlsm").Activate
    Range("E8").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("Job Sheet Templates.xlsx").Activate
    Range("E5:G5").Select
    ActiveSheet.Paste
    Windows("Shop Order Automator Macro.xlsm").Activate
    Range("F8").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("Job Sheet Templates.xlsx").Activate
    Range("H5").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, Collate _
        :=True, IgnorePrintAreas:=False
    Windows("Shop Order Automator Macro.xlsm").Activate
    
    Range("A9").Select
    Selection.Copy
    Windows("Job Sheet Templates.xlsx").Activate
    Range("A5").Select
    ActiveSheet.Paste
    Windows("Shop Order Automator Macro.xlsm").Activate
    Range("C9").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("Job Sheet Templates.xlsx").Activate
    Range("A7:D7").Select
    ActiveSheet.Paste
    Windows("Shop Order Automator Macro.xlsm").Activate
    Range("D9").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("Job Sheet Templates.xlsx").Activate
    Range("I5:K5").Select
    ActiveSheet.Paste
    Windows("Shop Order Automator Macro.xlsm").Activate
    Range("E9").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("Job Sheet Templates.xlsx").Activate
    Range("E5:G5").Select
    ActiveSheet.Paste
    Windows("Shop Order Automator Macro.xlsm").Activate
    Range("F9").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("Job Sheet Templates.xlsx").Activate
    Range("H5").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, Collate _
        :=True, IgnorePrintAreas:=False
    Windows("Shop Order Automator Macro.xlsm").Activate
    
    Range("A10").Select
    Selection.Copy
    Windows("Job Sheet Templates.xlsx").Activate
    Range("A5").Select
    ActiveSheet.Paste
    Windows("Shop Order Automator Macro.xlsm").Activate
    Range("C10").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("Job Sheet Templates.xlsx").Activate
    Range("A7:D7").Select
    ActiveSheet.Paste
    Windows("Shop Order Automator Macro.xlsm").Activate
    Range("D10").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("Job Sheet Templates.xlsx").Activate
    Range("I5:K5").Select
    ActiveSheet.Paste
    Windows("Shop Order Automator Macro.xlsm").Activate
    Range("E10").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("Job Sheet Templates.xlsx").Activate
    Range("E5:G5").Select
    ActiveSheet.Paste
    Windows("Shop Order Automator Macro.xlsm").Activate
    Range("F10").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("Job Sheet Templates.xlsx").Activate
    Range("H5").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, Collate _
        :=True, IgnorePrintAreas:=False
    Windows("Shop Order Automator Macro.xlsm").Activate
    
    Range("A11").Select
    Selection.Copy
    Windows("Job Sheet Templates.xlsx").Activate
    Range("A5").Select
    ActiveSheet.Paste
    Windows("Shop Order Automator Macro.xlsm").Activate
    Range("C11").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("Job Sheet Templates.xlsx").Activate
    Range("A7:D7").Select
    ActiveSheet.Paste
    Windows("Shop Order Automator Macro.xlsm").Activate
    Range("D11").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("Job Sheet Templates.xlsx").Activate
    Range("I5:K5").Select
    ActiveSheet.Paste
    Windows("Shop Order Automator Macro.xlsm").Activate
    Range("E11").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("Job Sheet Templates.xlsx").Activate
    Range("E5:G5").Select
    ActiveSheet.Paste
    Windows("Shop Order Automator Macro.xlsm").Activate
    Range("F11").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("Job Sheet Templates.xlsx").Activate
    Range("H5").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, Collate _
        :=True, IgnorePrintAreas:=False
    Windows("Shop Order Automator Macro.xlsm").Activate
    
    End Sub
    

    编译正常,但未测试

    Sub SOAutomator()
    
    Dim shtTemplate As Worksheet
    Dim shtMacro As Worksheet
    Dim rw As Range
    
    
        'adjust sheet names as needed...
        Set shtTemplate = Workbooks("Job Sheet Templates.xlsx").Sheets("Sheet1")
        'assumes macro is in "macro" workbook
        Set shtMacro = ThisWorkbook.Sheets("Data")     
    
        Set rw = shtMacro.Rows(4) 'start on row 4
    
        'run until hit an empty cell in the first column...
        Do While Len(rw.Cells(1).Value) > 0
    
            With rw
                .Cells(1).Copy shtTemplate.Range("A5")
                .Cells(3).Copy shtTemplate.Range("A7:D7")
                .Cells(4).Copy shtTemplate.Range("I5:K5")
                .Cells(5).Copy shtTemplate.Range("E5:G5")
                .Cells(6).Copy shtTemplate.Range("H5")
            End With
    
            shtTemplate.PrintOut From:=1, To:=1, Copies:=1, _
                         Collate:=True, IgnorePrintAreas:=False
    
            Set rw = rw.Offset(1, 0) 'next row
    
        Loop
    
        ThisWorkbook.Activate
    
    End Sub
    

    我怀疑你会在这里找到任何人,他们只会给你你需要的代码。。。你最好的办法是开始尝试自己做一点,当你发现自己陷入困境时,在这里发布问题-我们在这里帮助你克服困境/提供建议,而不是提供代码…你可以从打开宏录制器开始,它将为你提供一些代码。它会给你选择,选择,和,文件。+1的伟大建议!谢谢你的评论。我曾经运行过宏记录器。我陷入困境的地方是运行一个命令,该命令只处理宏运行时突出显示的信息?有办法做到这一点吗?很抱歉说得含糊不清,我对VBA非常陌生,我只是想写一段代码来帮助同事。好的,我正在这方面取得进展。我想到了一个解决办法,使宏更容易编写。但是,如果宏遇到空单元格,是否可以结束sub?我已经把我到目前为止的代码粘贴到了上面的主要问题中。非常感谢蒂姆。很好!