Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.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
Excel 如何将单元格中的值作为输入传递给范围函数?_Excel_Vba_Macos - Fatal编程技术网

Excel 如何将单元格中的值作为输入传递给范围函数?

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

我有一个Excel电子表格,里面有3张表格,我需要从
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
)。