设置dynamic范围vba

我一直在寻找networking的原因,为什么我的范围后来提到,将不会工作,但仍然是一个损失。 任何帮助是极大的赞赏!

我正试图做的是设置一个基于潜在移动最后一行的范围(我导入数据,每个星期增长)。 但是,当我到达设置ExpenseNameRange时,出于某种原因,它并不认为它是一个范围。

我需要这个以后用于一个产品配方的范围。

以下是我的代码。 任何帮助是极大的赞赏!

Dim Profitability As Worksheet Dim Time As Worksheet Dim Expense As Worksheet Dim ExpenseValueRange As Range Dim ExpenseNameRange As Range Dim ExpenseDateRange As Range Dim e As Integer Dim d As Integer Set Carryover = ThisWorkbook.Worksheets("2016 Carryover Forecast") Set Profitability = ThisWorkbook.Worksheets("Profitability") Set Time = ThisWorkbook.Worksheets("SYNC Time") Set Expense = ThisWorkbook.Worksheets("SYNC Expense") finalrowexpense = Expense.Range("A100000").End(xlUp).Row **Set ExpenseNameRange = Expense.Range(Cells(2, 12), Cells(finalrowexpense, 12))** Set ExpenseDateRange = Expense.Range(Cells(2, 19), Cells(finalrowexpense, 19)) Set ExpenseValueRange = Expense.Range(Cells(2, 23), Cells(finalrowexpense, 23)) For e = 37 To 63 employeename = Carryover.Cells(e, 33).Value For d = 34 To 41 If employeename <> "" Then ExpenseSum = Application.WorksheetFunction.SumProduct(Month(ExpenseDateRange) = Month(Cells(35, d)), ExpenseNameRange = employeename) ExpenseSum = employeename.Offset(0, d).Value 

考虑:

 With Expense Set ExpenseNameRange = Range(.Cells(2, 12), .Cells(finalrowexpense, 12)) Set ExpenseDateRange = Range(.Cells(2, 19), .Cells(finalrowexpense, 19)) Set ExpenseValueRange =Range(.Cells(2, 23), .Cells(finalrowexpense, 23)) End With 

因为Cells()本身就是指ActiveSheet。

编辑#1:

你也必须修复与SUMPRODUCT()行中的Cells() ()

编辑#2:

如果Cells()是合格的,则Range()不需要是:

 Sub dural() Dim r As Range Sheets("Sheet1").Activate Sheets("Sheet1").Select With Sheets("Sheet2") Set r = Range(.Cells(1, 1), .Cells(2, 2)) MsgBox r.Parent.Name End With End Sub 

感谢真棒的答案! 我设法跟踪了兔子洞,并且find了一些可行的东西。 它看起来像Sumifs是一个更好的select,而不是基于我做的阅读。 Sumifs不要求数组或其他特殊因素。

如果有人感兴趣,这是我的循环代码。

 Sub Organize_Expenses() Dim Carryover As Worksheet Dim Profitability As Worksheet Dim Time As Worksheet Dim Expense As Worksheet Dim ExpenseValueRange As Range Dim ExpenseNameRange As Range Dim ExpenseMonthRange As Range Dim ExpenseYearRange As Range Dim VendorNameRange As Range Dim e As Integer Dim d As Integer Dim a As Integer Dim b As Integer Set Carryover = ThisWorkbook.Worksheets("2016 Carryover Forecast") Set Profitability = ThisWorkbook.Worksheets("Profitability") Set Time = ThisWorkbook.Worksheets("SYNC Time") Set Expense = ThisWorkbook.Worksheets("SYNC Expense") finalrowexpense = Expense.Range("A100000").End(xlUp).Row Set ExpenseNameRange = Expense.Range("L2:L" & finalrowexpense) Set ExpenseMonthRange = Expense.Range("AC2:AC" & finalrowexpense) Set ExpenseValueRange = Expense.Range("w2:w" & finalrowexpense) Set ExpenseYearRange = Expense.Range("AD2:AD" & finalrowexpense) For d = 1 To 8 For e = 37 To 56 Employeename = Carryover.Cells(e, 33).Value If Employeename <> "" Then ExpenseSum = Application.WorksheetFunction.SumIfs(ExpenseValueRange, ExpenseNameRange, Employeename, ExpenseMonthRange, d, ExpenseYearRange, "2016") Carryover.Cells(e, 33).Offset(0, d).Value = ExpenseSum End If Next e Next d End Sub