VBA:引用范围在不同的选项卡时应用程序定义的错误

在这个小节里,我只是做了一些计算。 在不同的工作表中,我已经存储了一些临时数据,并且正在尝试将以下内容定义为一个范围(在代码最底部):

MeanVector = Worksheets("TempSheet").Range(Cells(2, 2), Cells(Stocks + 1, 2)) 

我得到以下错误:1004应用程序定义或对象定义的错误

尽pipe如此,这是我从一个不同的模块复制的一行代码,所以我知道这个方法本身是可行的。

我认为问题是与床单的激活,我试图在开始时都激活,但没有运气。 我在evry行代码中指定了工作表,所以我不确定为什么它仍然是一个问题?

我也尝试select范围:

 Set MeanVector = Worksheets("TempSheet").Range(Cells(2, 2), Cells(Stocks + 1, 2)) 

所有代码:

 Sub CalculateOwnPortfolio() Application.ScreenUpdating = False Application.DisplayAlerts = False Application.StatusBar = "Calculating..." Dim MeanVector As Range Dim WeightsVector As Range Worksheets("TempSheet").Activate Worksheets("Own Portfolio").Activate 'Count the amount of stock Stocks = 0 For i = 1 To 20 If Worksheets("MainSheet").Cells(i + 2, 2) <> 0 Then Stocks = Stocks + 1 Else Stocks = Stocks End If Next 'Amount of each stock EmptyAmount = 0 For i = 1 To Stocks If Worksheets("Own Portfolio").Cells(1 + i, 7) = Value Then Else EmptyAmount = EmptyAmount + 1 End If Next If EmptyAmount = 0 Then MsgBox ("Error: Enter stock amounts") Exit Sub End If 'Calcualte amount of observations Observations = 0 For j = 2 To 15000 If Worksheets("Own Portfolio").Cells(j, 1) <> 0 Then Observations = Observations + 1 Else Observations = Observations End If Next Worksheets("Own Portfolio").Range(Cells(2, 2), Cells(Observations, 2)) _ .ClearContents Worksheets("Own Portfolio").Range(Cells(2, 5), Cells(3 + Stocks, 5)) _ .ClearContents 'Total Value For i = 2 To Observations + 1 Value = 0 For j = 1 To Stocks Symbol = Worksheets("Own Portfolio").Cells(1 + j, 4) Amount = Worksheets("Own Portfolio").Cells(1 + j, 7) AdjClose = Worksheets(Symbol).Cells(i, 7) Value = Value + (Amount * AdjClose) Worksheets("Own Portfolio").Cells(i, 2) = Value Next Next 'Weights TotalValue = 0 For j = 1 To Stocks Symbol = Worksheets("Own Portfolio").Cells(1 + j, 4) Amount = Worksheets("Own Portfolio").Cells(1 + j, 7) AdjClose = Worksheets(Symbol).Cells(2, 7) TotalValue = TotalValue + (Amount * AdjClose) Next For j = 1 To Stocks StockValue = 0 Symbol = Worksheets("Own Portfolio").Cells(1 + j, 4) Amount = Worksheets("Own Portfolio").Cells(1 + j, 7) AdjClose = Worksheets(Symbol).Cells(2, 7) StockValue = Amount * AdjClose Worksheets("Own Portfolio").Cells(1 + j, 5) = StockValue / TotalValue Next 'Mean,Variance,Std Dev and Sharp Ratio '------------------------------------------------------------------------- '----------------This is where I get the error message-------------------- MeanVector = Worksheets("TempSheet").Range(Cells(2, 2), Cells(Stocks + 1, 2)) '----------------------------------------------------------------------- WeightsVector = Worksheets("Own Portfolio").Range(Cells(2, 5), Cells(Stocks + 1, 2)) Mean = Application.WorksheetFunction.SumProduct(MeanVector, WeightsVector) Call OwnPortfolioGraph(Symbol) Application.ScreenUpdating = True Application.DisplayAlerts = True Application.StatusBar = False End Sub 

“TempSheet”的图片

在这里输入图像说明

改变这个:

 MeanVector = Worksheets("TempSheet").Range(Cells(2, 2), Cells(Stocks + 1, 2)) 

对此:

 set MeanVector = Worksheets("TempSheet").Range(Cells(2, 2), Cells(Stocks + 1, 2)) 

看看它是否有效

然后做相同的

 WeightsVector = Worksheets("Own Portfolio").Range(Cells(2, 5), Cells(Stocks + 1, 2)) 

编辑:我很确定,在您的公式工作表(“TempSheet”)范围(单元格(2,2),单元格(股票+ 1,2))

除非当前的工作表是临时表,那么单元格(2,2)将不会成为您期望的值,单元格(股票+ 1,2)也不会。 你可以尝试:

 With Worksheets("TempSheet") WeightsVector = .Range(.Cells(2, 5), .Cells(Stocks + 1, 2)) end with 

虽然看看你添加的屏幕截图不会出现单元格(2,5)来自临时表