我在第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
答案 0 :(得分:4)
我怀疑你拼错了"Quanity"
- 它应该是"Quantity"
。因此,找不到元素,并且被认为是“超出范围”。
刚看到编辑。您有一个名为strActiveWorksheet
的变量,但您正在寻找名为"strActiveWorksheet"
的工作表。您需要删除引号:
ActiveWorkbook.Worksheets(strActiveWorksheet).Sort.SortFields.Clear
和下一行中相同,可能还有代码中的其他位置。只是为了解释(因为你说你在VBA中有点新手):
"hello"
之类的东西是一个字符串(常量)。您可以将字符串分配给变量
Dim goodbye
goodbye = "hello"
MsgBox goodbye
将显示“你好”
但是
MsgBox "goodbye"
将显示“再见”。
有意义吗?