尊敬的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中复制粘贴。
谢谢。
约翰
答案 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