Excel ';范围';对象的'_全球';失败的VBA
设置了两个日期范围。设置此范围后,我单击我的刷新数据宏,该宏将从这两个日期范围内提取数据。(即日期1-2017年1月1日。日期2-2017年1月31日)但是,我注意到,一旦我超出日期范围2017年1月19日,它将抛出一个错误,指示对象的范围已失败。我似乎无法理解这个日期的意义 我已检查我的范围是否不合格,因为我已将工作表设置为“大修计划->”,并且我没有更改工作表名称 有人知道为什么会这样吗Excel ';范围';对象的'_全球';失败的VBA,excel,vba,Excel,Vba,设置了两个日期范围。设置此范围后,我单击我的刷新数据宏,该宏将从这两个日期范围内提取数据。(即日期1-2017年1月1日。日期2-2017年1月31日)但是,我注意到,一旦我超出日期范围2017年1月19日,它将抛出一个错误,指示对象的范围已失败。我似乎无法理解这个日期的意义 我已检查我的范围是否不合格,因为我已将工作表设置为“大修计划->”,并且我没有更改工作表名称 有人知道为什么会这样吗 Sub SortFinalTable(numRows As Long) Dim sht As
Sub SortFinalTable(numRows As Long)
Dim sht As Worksheet
Dim rng As Range
Set sht = Worksheets("Outage Schedule ->")
Set rng = sht.Range("A5").Resize(numRows + 1, 52)
sht.AutoFilterMode = False
rng.AutoFilter
On Error Resume Next
sht.AutoFilter.Sort.SortFields.Clear
On Error GoTo 0
sht.AutoFilter.Sort.SortFields.Add Key:=Range("A5:A" & numRows - 4), SortOn:=xlSortOnValues, Order:=xlDescending, _
DataOption:=xlSortNormal
sht.AutoFilter.Sort.SortFields.Add _
Key:=Range("B5:B" & numRows - 4), SortOn:=xlSortOnValues, Order:=xlAscending, _
DataOption:=xlSortNormal
With sht.AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
问题是numRows变量记录的是0或负值,这意味着当我尝试设置以下范围时:
sht.range("A5")>Resize(numRows +1, 52)
....
....
....
sht.AutoFilter.Sort.SortFields.Add Key=Sht.Range("A5:A" & numRows - 4),...
由于数字为负数,该范围将始终失败。我通过确保numRows始终保持+ve来解决这个问题,因此该范围内的最小值可能会降到1
这似乎已经解决了问题。哪一行出现故障<代码>设置rng=sht.Range(“A5”)。调整大小(numRows+1,52)?如果是这样--当它失败时,
numRows
的值是多少?可能是Key:=sht.Range
而不是Key:=Range
。如果numRows-4
小于1或大于该行,则该操作将失败limit@JohnColeman:代码在'sht.AutoFilter.Sort.SortFields.Add Key:=Range(“A5:A”&numRows-4)、SortOn:=xlSortOnValues、Order:=xlDescending、u数据选项:=xlSortNormal'行失败。行数也等于4,这对我来说没有意义,因为我认为我的数组会自动调整大小……我又看了一眼,似乎NumRows开始时是4,在我们得到+1之后,它仍然是4。该值没有改变,因此当它达到A5时,仍然是4。我不知道这是为什么。大家好,我已经解决了这个问题。实际上,我已经拿出了我的分类声明作为临时措施,一切都很好。谢谢大家的帮助!