首页 > 解决方案 > VBA下标超出范围和Excel的默认变量

问题描述

这是我在这里的第一篇文章,我几乎没有接受过正式的编码培训,所以这可能是一个非常简单的问题。

在运行由以下代码定义的宏时,我遇到了错误 9,VBA 下标超出范围。具体来说,它是 Sub Select_Last() 函数。Excel 不喜欢随后的表达式,但是如果在单独的 Excel 文件中单独使用它,那么它可以正常工作。

我认为问题在于 Excel 的默认变量(Activesheet 等)相互冲突。但我不确定如何解决这个问题。其他潜艇工作正常。任何人都可以帮忙吗?谢谢你。

Public lastsheet As String

Sub Select_Last()
   Sheets(lastsheet).Select
End Sub

Sub Protect()
   For i = 1 To Sheets.Count
      Sheets(i).Protect
   Next i
End Sub

Sub UnProtect()
   For i = 1 To Sheets.Count
      Sheets(i).UnProtect
   Next i
End Sub

Sub SelectUnlockedCells()
   Dim WorkRng As Range
   Dim OutRng As Range
   Dim Rng As Range
   On Error Resume Next
   Set WorkRng = Application.ActiveSheet.UsedRange
   Application.ScreenUpdating = False

   For Each Rng In WorkRng
     If Rng.Locked = False Then
        If OutRng.Count = 0 Then
          Set OutRng = Rng
        Else
          Set OutRng = Union(OutRng, Rng)
        End If
     End If
   Next
   If OutRng.Count > 0 Then OutRng.Select
     Application.ScreenUpdating = True
   End Sub

其他功能正常。

标签: excelvba

解决方案


考虑:

Public lastsheet As String

Sub Select_Last()
    lastsheet = Sheets(Sheets.Count).Name
    Sheets(lastsheet).Select
End Sub

关键问题是在使用变量之前为其赋值。


推荐阅读