Excel 将一张图纸中的值插入另一张图纸中

Excel 将一张图纸中的值插入另一张图纸中,excel,vba,Excel,Vba,我把数据放在一张叫做数据存储的纸上。我想在另一个工作表中显示部分数据。代码的第一部分根据用户的输入查找数据,即RPName=范围角色扮演。下一部分根据角色扮演确定一个范围,该范围是一系列将被平均的数字 我在这一行上得到一个错误: Sheets("Data Storage").Range(Cells(RPName_rng1, 5), Cells(RPName_tot, 5)).Name = "Com1avg" 我不明白为什么这会导致错误 ' average Macro Dim RPName As

我把数据放在一张叫做数据存储的纸上。我想在另一个工作表中显示部分数据。代码的第一部分根据用户的输入查找数据,即RPName=范围角色扮演。下一部分根据角色扮演确定一个范围,该范围是一系列将被平均的数字

我在这一行上得到一个错误:

Sheets("Data Storage").Range(Cells(RPName_rng1, 5), Cells(RPName_tot, 5)).Name = "Com1avg"
我不明白为什么这会导致错误

' average Macro
Dim RPName As String, RPName_rng1 As Integer, RPName_rng2 As Integer, RPName_tot As Integer
'get value from Role_Play cell
RPName = Range("Role_Play")
'    MsgBox ("Variable RPNam is selected in Macro average" & RPName)

' Find first instance of RPName
RPName_rng1 = Sheets("Data Storage").Cells.Find(What:=RPName, After:=Cells(1, 1), SearchOrder:=xlByRows).Row
'    MsgBox RPName_rng1

'Count number of RPname
RPName_rng2 = Application.WorksheetFunction.CountIf(Sheets("Data Storage").Range("A:A"), RPName)
'    MsgBox RPName_rng2
RPName_tot = RPName_rng1 + RPName_rng2 - 1
'    MsgBox RPName_tot

'Name range here
Sheets("Data Storage").Range(Cells(RPName_rng1, 5), Cells(RPName_tot, 5)).Name = "Com1avg"
Sheets("Data Storage").Range(Cells(RPName_rng1, 7), Cells(RPName_tot, 7)).Name = "Com2avg"
Sheets("Data Storage").Range(Cells(RPName_rng1, 9), Cells(RPName_tot, 9)).Name = "Com3avg"
Sheets("Data Storage").Range(Cells(RPName_rng1, 11), Cells(RPName_tot, 11)).Name = "Com4avg"
Sheets("Data Storage").Range(Cells(RPName_rng1, 13), Cells(RPName_tot, 13)).Name = "Com5avg"
Sheets("Data Storage").Range(Cells(RPName_rng1, 15), Cells(RPName_tot, 15)).Name = "Com6avg"
Sheets("Data Storage").Range(Cells(RPName_rng1, 17), Cells(RPName_tot, 17)).Name = "Com7avg"


'    Range("RPData").Select
    Application.CutCopyMode = False
    Range("CA_Com1").FormulaR1C1 = "=AVERAGE(Com1avg)"
    Range("CA_Com2").FormulaR1C1 = "=AVERAGE(Com2avg)"
    Range("CA_Com3").FormulaR1C1 = "=AVERAGE(Com3avg)"
    Range("CA_Com4").FormulaR1C1 = "=AVERAGE(Com4avg)"
    Range("CA_Com5").FormulaR1C1 = "=AVERAGE(Com5avg)"
    Range("CA_Com6").FormulaR1C1 = "=AVERAGE(Com6avg)"
    Range("CA_Com7").FormulaR1C1 = "=AVERAGE(Com7avg)"
'    Sheets("Data View").Activate
End Sub

您需要完全限定单元格的位置,否则它将默认为ActiveSheet。使用With块,这将变得更加容易和可读

请注意.Cells如何在With块中使用。完成此操作后,单元格范围将与with语句中定义的工作表相关

如果要在不使用With块的情况下执行相同操作,您的呼叫将如下所示:

Sheets("Data Storage").Range(Sheets("Data Storage").Cells(RPName_rng1, 5), Sheets("Data Storage").Cells(RPName_tot, 5)).Name = "Com1avg"

谢谢Jason,但是SheetsData存储的te给了我一个下标超出范围的错误。@aoswald-当您得到错误时,RPName_rng1和RPName_tot的值是多少?RPName_rng1是6,RPName_tot是9@aoswald-我更新了答案,以显示在没有With块的情况下呼叫的内容。这是完全限定语句。试试这个,看看是否会出现同样的错误。
Sheets("Data Storage").Range(Sheets("Data Storage").Cells(RPName_rng1, 5), Sheets("Data Storage").Cells(RPName_tot, 5)).Name = "Com1avg"