下标超出范围 - Excel

时间:2013-10-23 15:34:24

标签: excel excel-vba vba

我在第9行收到“下标超出范围”错误。我不是程序员,也不是自称是。出于这个原因,我需要一些帮助,试图让我的Excel按钮工作。我只知道一点VB。我很茫然,因为按钮会执行宏到某一点,然后我收到这个错误......

------Line 9:ActiveWorkbook.Worksheets("strActiveWorksheet").Sort.SortFields.Clear-----

以下是代码:

'
' MakeParetoTable Macro
'
Dim strActiveWorkSheet As String
Sub MakeParetoTable()
strActiveWorkSheet = ActiveSheet.Name
    Range("B6:B31,I6:I31").Select
    Range("Table2[[#Headers],[Total Quanity]]").Activate
    Selection.Copy
    Range("P6").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Columns("P:P").EntireColumn.AutoFit
    ActiveWindow.ScrollColumn = 2
    Application.CutCopyMode = False
    ActiveWorkbook.Worksheets("strActiveWorksheet").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("strActiveWorksheet").Sort.SortFields.Add Key:=Range("Q7:Q31"), _
        SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("strActiveWorksheet").Sort
        .SetRange Range("P6:Q31")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    With Selection.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlInsideVertical)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlInsideHorizontal)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    Application.WindowState = xlMinimized
    Application.WindowState = xlNormal
    Range("Q32").Select
    ActiveCell.FormulaR1C1 = "=SUM(R[-25]C:R[-1]C)"
    Range("Q33").Select
    ActiveWindow.SmallScroll ToRight:=1
    Range("R7").Select
    ActiveCell.FormulaR1C1 = "=RC[-1]/R32C17"
    Range("R7").Select
    Selection.AutoFill Destination:=Range("R7:R31"), Type:=xlFillDefault
    Range("R7:R31").Select
    Range("S7").Select
    ActiveCell.FormulaR1C1 = "=RC[-1]"
    Range("S8").Select
    ActiveCell.FormulaR1C1 = "=R[-1]C+RC[-1]"
    Range("S8").Select
    Selection.AutoFill Destination:=Range("S8:S31"), Type:=xlFillDefault
    Range("S8:S31").Select
End Sub

1 个答案:

答案 0 :(得分:4)

我怀疑你拼错了"Quanity" - 它应该是"Quantity"。因此,找不到元素,并且被认为是“超出范围”。

刚看到编辑。您有一个名为strActiveWorksheet的变量,但您正在寻找名为"strActiveWorksheet"的工作表。您需要删除引号:

ActiveWorkbook.Worksheets(strActiveWorksheet).Sort.SortFields.Clear

和下一行中相同,可能还有代码中的其他位置。只是为了解释(因为你说你在VBA中有点新手):

"hello"之类的东西是一个字符串(常量)。您可以将字符串分配给变量

Dim goodbye
goodbye = "hello"

MsgBox goodbye

将显示“你好”

但是

MsgBox "goodbye"

将显示“再见”。

有意义吗?