用户输入的源工作表名称,从源工作表复制数据,粘贴到目标工作表
Name of source worksheet entered by user, copy data from source worksheet, paste to target worksheet
尊敬的 Whosebug 专家,
我是 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"。也就是说,当我输入 "ORANGE" 到工作表 CALCULATIONS 上的单元格 I1 和 运行 宏时,来自工作表 ORANGE 的数据被复制粘贴,而当我输入 "LEMON" 到单元格 I1 时工作表 CALCULATIONS 和 运行 宏,工作表 LEMON 中的数据将被复制粘贴。
谢谢。
约翰
因为只想复制值,所以可以使用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
尊敬的 Whosebug 专家,
我是 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"。也就是说,当我输入 "ORANGE" 到工作表 CALCULATIONS 上的单元格 I1 和 运行 宏时,来自工作表 ORANGE 的数据被复制粘贴,而当我输入 "LEMON" 到单元格 I1 时工作表 CALCULATIONS 和 运行 宏,工作表 LEMON 中的数据将被复制粘贴。
谢谢。
约翰
因为只想复制值,所以可以使用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