用户输入的源工作表的名称,从源工作表复制数据,粘贴到目标工作表

时间:2020-01-12 06:27:46

标签: excel vba copy-paste

尊敬的stackoverflow专家

我是vba的新手,并且想要一个用于某些复制和粘贴任务的简单宏。我有一个xlsm文件,其中包含多个工作表,名称如下 计算方式 柠檬 橙子 香蕉

我只知道一个非常简单且流行的外行宏。

Sub copyandpasterawdata()

  Workbooks("trymacro.xlsm").Worksheets("ORANGE").Range("A1:H2000").Copy

  Workbooks("trymacro.xlsm").Worksheets("CALCULATIONS").Range("A1").PasteSpecial Paste:=xlPasteValues

End Sub

我想使源工作表名称为“ dynamic”。也就是说,当我在工作表CALCULATIONS上的单元格I1中输入“ ORANGE”并运行宏时,来自工作表ORANGE的数据被复制-粘贴,而当我在工作表CALCULATIONS上的单元格I1中输入“ LEMON”时并运行宏,数据而是从工作表LEMON中复制粘贴。

谢谢。

约翰

1 个答案:

答案 0 :(得分:0)

因为只想复制值,所以可以使用Range.value2 = RangeCopy.value2

请注意,I1位于数据的粘贴区域,请尝试:

 Option Compare Text
 Sub copyandpasterawdata()
        If ActiveSheet.Name <> "CALCULATIONS" Or Not (ThisWorkbook.Name Like "*trymacro*") Then Exit Sub

        ''check if sheetname
        'Dim sheetsname As Variant
        ' sheetsname = Array("LEMON", "ORANGE", "BANANA")
        'If IsEmpty(Filter(sheetsname, [I1].Value2, True, vbTextCompare)) Then Exit Sub
        '---------------------------------------
        Dim ws As Worksheet
        Dim isSheetname As Boolean
        For Each ws In Worksheets
            If [I1].Value2 Like ws.Name Then
                isSheetname = True
                Exit For
            End If
        Next ws
        If Not (isSheetname) Then Exit Sub

       'assign value
        Range("A1:H2000").Value = Worksheets([I1].Value2).Range("A1:H2000").Value
    End Sub

以下是较短的代码:

 Sub copyandpasterawdata()
        If ActiveSheet.Name <> "CALCULATIONS" Or Not (ThisWorkbook.Name Like "*trymacro*") Then Exit Sub
 On Error Resume Next
       ' assign value
        Range("A1:H2000").Value = Worksheets([I1].Value2).Range("A1:H2000").Value
End Sub