Excel 如何将单元格中的值作为输入传递给范围函数?
我有一个Excel电子表格,里面有3张表格,我需要从Excel 如何将单元格中的值作为输入传递给范围函数?,excel,vba,macos,Excel,Vba,Macos,我有一个Excel电子表格,里面有3张表格,我需要从Sheet1复制某些单元格范围,然后将其复制到Sheet2 我试图得到要复制的单元格范围,作为第3页中可用单元格的输入。就像单元格中有值A4:X6。但是我无法在宏代码中获得传递给Range函数的输入值 下面是我的代码,当我执行时,它只在表2中输入一个空行 Sub CopyData() Sheet3.Select Set Range1 = Range(Cells(3, 3).Value) Sheet1.Select
Sheet1
复制某些单元格范围,然后将其复制到Sheet2
我试图得到要复制的单元格范围,作为第3页中可用单元格的输入。就像单元格中有值A4:X6
。但是我无法在宏代码中获得传递给Range函数的输入值
下面是我的代码,当我执行时,它只在表2中输入一个空行
Sub CopyData()
Sheet3.Select
Set Range1 = Range(Cells(3, 3).Value)
Sheet1.Select
Range1.Copy
Sheet2.Select
Range("A2").Select
Range("A2").EntireRow.Insert Shift:=xlShiftDown
End Sub
我希望Range1
中表示的单元格内容从Sheet1
复制并粘贴到Sheet2
中
提前谢谢你 John Coleman是对的,您可以避免对整个子例程使用Select。但是,这里的问题是,当您定义范围时,它是专门为Sheet3而不是Sheet1定义的。另一种方法是,可以将地址存储在传递给Range()函数的字符串中,但指定希望范围反映的工作表。其余的代码可以在不使用Select的情况下进行大致相同的处理
Sub CopyData()
Dim range1 as Range
dim strRange as String
strRange = Sheet3.Cells(3, 3).Value
Set range1 = Sheet1.Range(strRange)
range1.Copy Sheet2.Range("A2")
Sheet2.Range("A2").EntireRow.Insert Shift:=xlShiftDown
End Sub
使用
Set Range1=Sheet3.Range(单元格(3,3.Value)
而不是Set Range1=Range(单元格(3,3.Value)
或从sheet1
中选择范围,因为sheet1.Select
执行时,它只会在表2中输入一个空行,当然它会这样做。您的代码正是这样做的。行范围(“A2”).EntireRow.Insert Shift:=xlShiftDown
创建行。您的代码中没有任何内容可以粘贴单元格中任何输入的范围A4:X6
ot的内容
实际上,如果您删除代码并将其保留如下:
Sub CopyData()
Range("A2").EntireRow.Insert Shift:=xlShiftDown
End Sub
Sub CopyData()
Dim Range1 As Range
Set Range1 = Sheet1.Range(Sheet3.Cells(3, 3).Value)
Range1.Copy
Sheet2.Range("A2").PasteSpecial (xlPasteAll) 'this command will paste the contents
End Sub
Sub CopyFromSheet1toSheet2()
Dim thisBook As Workbook: Set thisBook = ThisWorkbook
Dim sheetOne As Worksheet: Set sheetOne = thisBook.Worksheets("Sheet1")
Dim sheetTwo As Worksheet: Set sheetTwo = thisBook.Worksheets("Sheet2")
Dim copyFromRange As Range: Set copyFromRange = sheetOne.Range("A4:X6")
Dim lastRow As Long: lastRow = sheetTwo.Cells(Rows.Count, 1).End(xlUp).Row
Dim pasteToRange As Range: Set pasteToRange = sheetTwo.Range("A" & lastRow)
copyFromRange.Copy Destination:=pasteToRange
End Sub
您将得到相同的结果,插入一个新行
我想将Range1中表示的单元格内容从Sheet1复制并粘贴到Sheet2中
我想你是想复制一个特定的范围,而不是一整行并粘贴它,你需要这样的东西:
Sub CopyData()
Range("A2").EntireRow.Insert Shift:=xlShiftDown
End Sub
Sub CopyData()
Dim Range1 As Range
Set Range1 = Sheet1.Range(Sheet3.Cells(3, 3).Value)
Range1.Copy
Sheet2.Range("A2").PasteSpecial (xlPasteAll) 'this command will paste the contents
End Sub
Sub CopyFromSheet1toSheet2()
Dim thisBook As Workbook: Set thisBook = ThisWorkbook
Dim sheetOne As Worksheet: Set sheetOne = thisBook.Worksheets("Sheet1")
Dim sheetTwo As Worksheet: Set sheetTwo = thisBook.Worksheets("Sheet2")
Dim copyFromRange As Range: Set copyFromRange = sheetOne.Range("A4:X6")
Dim lastRow As Long: lastRow = sheetTwo.Cells(Rows.Count, 1).End(xlUp).Row
Dim pasteToRange As Range: Set pasteToRange = sheetTwo.Range("A" & lastRow)
copyFromRange.Copy Destination:=pasteToRange
End Sub
此示例显示如何在第2行上方插入一行,复制为向下行(第3行)的格式并从标题行开始
Range("2:2").Insert CopyOrigin:=xlFormatFromRightOrBelow
正如您所理解的,.Insert
将始终插入空行
我猜您希望在工作表中粘贴一个区域,而不是为此插入新行。您应该这样做:
Sheets("SheetName").Range("A2").PasteSpecial (xlPasteAll)
还要注意的是,xlPasteAll
是一种XlPasteType
,如xlPasteFormats
,xlPasteValues
等
xlPasteAll
将粘贴所有
xlPasteFormats
将粘贴源格式
xlPasteValues
将粘贴该值
因此,您的代码如下所示:
Sub CopyData()
Dim Range1 As Range
Dim Range2 As Range
Set Range1 = Sheet1.Range(Sheet3.Cells(3, 3).Value)'Will define the range you want to copy
Range1.Copy 'here you copy the range
Set Range2 = Sheet2.Range("A2") 'Set the range where you want to paste data
Range2.PasteSpecial (xlPasteValues) 'then you will paste your range
End Sub
单击以获取那些XlPasteType
奖金
Sheet2.Select
Range("A2").Select
与
Set Range2 = Sheet2.Range("A2")
但最后一种方法更好,因为它避免了
Select
,这会降低性能 是否有在顶部插入复制数据的特定要求,或者您是否愿意将其添加到“列表”的末尾?如果是这样,您可以找到最后使用的行并将其添加到底部,如下所示:
Sub CopyData()
Range("A2").EntireRow.Insert Shift:=xlShiftDown
End Sub
Sub CopyData()
Dim Range1 As Range
Set Range1 = Sheet1.Range(Sheet3.Cells(3, 3).Value)
Range1.Copy
Sheet2.Range("A2").PasteSpecial (xlPasteAll) 'this command will paste the contents
End Sub
Sub CopyFromSheet1toSheet2()
Dim thisBook As Workbook: Set thisBook = ThisWorkbook
Dim sheetOne As Worksheet: Set sheetOne = thisBook.Worksheets("Sheet1")
Dim sheetTwo As Worksheet: Set sheetTwo = thisBook.Worksheets("Sheet2")
Dim copyFromRange As Range: Set copyFromRange = sheetOne.Range("A4:X6")
Dim lastRow As Long: lastRow = sheetTwo.Cells(Rows.Count, 1).End(xlUp).Row
Dim pasteToRange As Range: Set pasteToRange = sheetTwo.Range("A" & lastRow)
copyFromRange.Copy Destination:=pasteToRange
End Sub
“lastRow”返回给定列中最后使用的行的数值。如果您有A1:A4中的数据,那么此代码将添加下一批复制到A5及以下的数据。似乎您可以从阅读中获益,谢谢您的回答!!这段代码确实帮助我快速解决了问题。我认为行
Set Range1=Sheet3.Range(单元格(3,3.Value)
将生成一个错误(error 1004 method Range of object _globalfailed
),因为您正试图将变量中的值声明为Range
)。