Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.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
使用VBA和表单按钮在Excel 2013中复制和粘贴_Vba_Excel_Copy Paste - Fatal编程技术网

使用VBA和表单按钮在Excel 2013中复制和粘贴

使用VBA和表单按钮在Excel 2013中复制和粘贴,vba,excel,copy-paste,Vba,Excel,Copy Paste,我希望有人能帮助我,我需要Excel 2013中的一个按钮来执行以下命令: 在“表1”中,复制范围“A2:I2” 查找A2中的值以确定适当的工作表,该工作表将被激活,复制的范围将粘贴到B:J范围内的下一个可用行中 粘贴数据后,激活工作表粘贴行A列中单元格的值将返回给用户 例如: 当我输入Sheet1.A2“技术报告”并单击我的按钮时,它将复制Sheet1.A2:I2,然后查找名为“TEC”的工作表,激活它,并将数据粘贴到TEC.B2:I2中 在我的“TEC”表中,a列中有一个预先存在的数字列表。

我希望有人能帮助我,我需要Excel 2013中的一个按钮来执行以下命令:

  • 在“表1”中,复制范围“A2:I2”
  • 查找A2中的值以确定适当的工作表,该工作表将被激活,复制的范围将粘贴到B:J范围内的下一个可用行中
  • 粘贴数据后,激活工作表粘贴行A列中单元格的值将返回给用户
  • 例如:

    当我输入Sheet1.A2“技术报告”并单击我的按钮时,它将复制Sheet1.A2:I2,然后查找名为“TEC”的工作表,激活它,并将数据粘贴到TEC.B2:I2中

    在我的“TEC”表中,a列中有一个预先存在的数字列表。当数据范围复制到TEC.B5:I5中时,将查找TEC.A5的值并返回给用户(用户被锁定在TEC之外,只能访问表1)

    重要的是,每次发生这种情况时,必须将数据粘贴到新行中,因此会向用户返回一个新的编号


    我知道这是一个很大的要求,但我一直试图使用没有结果的代码位,我不是一个非常先进的VBA用户,所以这里提供的任何帮助将非常感谢

    迄今为止的代码是:

    子按钮()
    Application.CutCopyMode=False
    图纸(“图纸1”)。范围(“A2:I2”)。复制“复制”文件数据
    如果图纸(“图纸1”).范围(“A2”)=技术报告,则
    表格(“TEC”)。激活“检查文件类型”并激活相关文件工作表
    其他表格(“表格1”)。范围(“A2”)=“工程协调备忘录”
    工作表(“ECM”)。激活
    其他图纸(“图纸1”)。范围(“A2”)=“关键设计审查”,然后
    工作表(“CDR”)。激活
    其他图纸(“图纸1”)。范围(“A2”)=“初步设计审查”,然后
    工作表(“PDR”)。激活
    其他表格(“表格1”)。范围(“A2”)=“通过相似性和分析进行鉴定”,然后
    工作表(“QSR”)。激活
    其他表(“表1”)。范围(“A2”)=“通过试验程序进行鉴定”,然后
    工作表(“QTP”)。激活
    其他表格(“表格1”)。范围(“A2”)=“可靠性报告”
    工作表(“REL”)。激活
    其他表(“表1”)。范围(“A2”)=“规范符合性表”
    工作表(“SCT”)。激活
    如果结束
    将sourceCol设置为整数,将rowCount设置为整数,将currentRow设置为整数’代码以选择列B中的下一个空单元格
    将currentRowValue设置为字符串
    sourceCol=2'列B的值为2
    rowCount=单元格(Rows.Count,sourceCol).End(xlUp).Row
    '对于每一行,找到第一个空白单元格并选择它
    对于currentRow=1到rowCount
    currentRowValue=单元格(currentRow,sourceCol).Value
    如果为空(currentRowValue)或currentRowValue=“”,则
    单元格(currentRow,sourceCol)。选择
    退出
    如果结束
    下一个
    粘贴
    ActiveCell.Offset(ColumnCoffset:=-1)。选择
    复制
    工作表(“工作表1”)。激活
    板材(“板材1”)。范围(“A5”)。粘贴
    
    End Sub
    一般来说,我不喜欢在VBA中使用复制/粘贴,而是为范围赋值。这样你就不必在床单之间来回移动。假设要将数据移动到的每个工作表中都有一个标题行(因为rowCount永远不会返回为零),那么下面的操作就可以了


    一般来说,你不会让别人在这个网站上为你写代码。尝试添加到目前为止您已经尝试过的代码,并询问如何改进它的具体问题。嗨@TheEngineer,到目前为止,这就是我得到的:Sub Save_Click()Sheets(“sheet1”).Range(“A2:I2”).Copy IfSheet1.A2=“Technical Report”ActiveSheet.Paste Destination:=Sheets(“TEC”).Range(B,10)Sheets(“sheet3”).Range(“B10:I10”).Paste将该代码作为编辑添加到问题中。在注释中阅读代码会伤到人的头。@Matt已将其添加到注释中。当前正在获取“需要对象”消息。
    Sub button()
    
        Dim sheetName As String
    
        If Sheets("Sheet1").Range("A2") = "Technical Report" Then
        sheetName = "TEC"   ' check for type of document and activate relevant document worksheet
    
        ElseIf Sheets("Sheet1").Range("A2") = "Engineering Coordination Memo" Then
        sheetName = "ECM"
    
        ElseIf Sheets("Sheet1").Range("A2") = "Critical Design Review" Then
        sheetName = "CDR"
    
        ElseIf Sheets("Sheet1").Range("A2") = "Preliminary Design Review" Then
        sheetName = "PDR"
    
        ElseIf Sheets("Sheet1").Range("A2") = "Qualification by Similarity and Analysis" Then
        sheetName = "QSR"
    
        ElseIf Sheets("Sheet1").Range("A2") = "Qualification by Test Procedure" Then
        sheetName = "QTP"
    
        ElseIf Sheets("Sheet1").Range("A2") = "Reliability Report" Then
        sheetName = "REL"
    
        ElseIf Sheets("Sheet1").Range("A2") = "Specification Compliance Tabulation" Then
        sheetName = "SCT"
        End If
    
        Dim rowCount As Integer
        Dim sourceCol As Integer
    
        sourceCol = 2   'column B has a value of 2
    
        With Sheets(sheetName)
            rowCount = .Cells(Rows.Count, sourceCol).End(xlUp).Row
            .Range("B" & rowCount + 1 & ":I" & rowCount + 1) = Sheets("Sheet1").Range("B2:I2").Value
        End With
    
        Sheets("Sheet1").Range("A5") = Sheets(sheetName).Range("A" & rowCount + 1).Value
    
    End Sub