首页 文章

使用userform和listbox运行宏后无法关闭工作簿

提问于
浏览
0

我正在使用下面的代码更轻松地导航工作簿 . 但是,运行宏光标后运动是奇数(限制范围和跳跃) . 此外,单击红色“x”关闭窗口时,工作簿不会关闭 . 此外,组和取消组合图标(用于隐藏或扩展行和列)不起作用 . 似乎某种程度上“控制”仍然在VBA中,因为它应该是正常的Excel . 所有帮助都非常感谢 .

Userform code:

Option Explicit
Option Base 1

Private Sub UserForm_Initialize()
    Dim ShList()
    Dim ShCount As Integer
    Dim x As Integer
    Dim ListPos As Integer

    ShCount = ActiveWorkbook.Sheets.Count
    ReDim Preserve ShList(1 To ShCount)

    For x = 1 To ShCount
        If Sheets(x).Name = ActiveSheet.Name Then
            ListPos = x - 1
        End If
        ShList(x) = Sheets(x).Name
    Next x

    With ListBox1
        .List = ShList
        .ListIndex = ListPos
    End With

End Sub

Private Sub CommandButton1_Click()
    Sheets(ListBox1.Value).Activate
    Unload UserForm1
End Sub

Click button to activate code:

Option Explicit

Sub WorksheetSelect_Click()
    UserForm1.Show
End Sub

3 回答

  • 0

    我遇到了同样的问题,不得不删除以下代码:Sheets(1).Activate

    删除后,我可以一如既往地关闭Excel .

  • -1

    我有同样的问题 . 它是通过将活动工作表上任何单元格中的任何单元格值更改为我的VBA代码中的最后一行来解决的 . 在我的情况下,我添加了VBA代码:Range(“A1”)=“_”,但您也可以将任何其他单元格更改为任何其他值 .

  • 0

    抱歉没有使用评论,因为它太长了,只是分析你的代码

    Option Explicit
    Option Base 1 'someone tell me what's this ? i might be noob at this point
    
    Private Sub UserForm_Initialize()
    Dim ShList() 'as variant
    Dim ShCount As Integer 'as Long
    Dim x As Integer 'as long
    Dim ListPos As Integer 'as Long
    
    ShCount = ActiveWorkbook.Sheets.Count 
    ReDim Preserve ShList(1 To ShCount) 'remove preserve
    
    For x = 1 To ShCount
        If Sheets(x).Name = ActiveSheet.Name Then
            ListPos = x - 1
        End If
        ShList(x) = Sheets(x).Name
    Next x
    
    With ListBox1 'i usually write : with Me.Listbox1, but i guess its ok
        .List = ShList
        .ListIndex = ListPos
    End With
    
    'add erase ShList (free memory)
    End Sub
    

    所以主要的,删除保留,并为您的阵列添加一个擦除

相关问题