Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 使用userform和listbox运行宏后无法关闭工作簿_Excel_Vba - Fatal编程技术网

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

Excel 使用userform和listbox运行宏后无法关闭工作簿,excel,vba,Excel,Vba,我使用下面的代码使在工作簿中导航更容易。但是,运行宏后,光标移动是奇怪的(限制范围和跳跃)。此外,单击红色“x”关闭窗口时,工作簿不会关闭。此外,组和取消组图标(用于隐藏或扩展行和列)不起作用。似乎“控件”仍在VBA中,就像正常的Excel一样。非常感谢所有的帮助 用户表单代码: Option Explicit Option Base 1 Private Sub UserForm_Initialize() Dim ShList() Dim ShCount As Integer

我使用下面的代码使在工作簿中导航更容易。但是,运行宏后,光标移动是奇怪的(限制范围和跳跃)。此外,单击红色“x”关闭窗口时,工作簿不会关闭。此外,组和取消组图标(用于隐藏或扩展行和列)不起作用。似乎“控件”仍在VBA中,就像正常的Excel一样。非常感谢所有的帮助

用户表单代码:

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
Option Explicit

Sub WorksheetSelect_Click()
    UserForm1.Show
End Sub
单击按钮激活代码:

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
Option Explicit

Sub WorksheetSelect_Click()
    UserForm1.Show
End Sub

抱歉,没有使用注释,因为注释太长,只是分析代码

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

所以最重要的是,删除Preserve,并为数组添加擦除操作

我遇到了同样的问题,必须删除以下代码: 第(1)页。激活


删除后,我可以像往常一样关闭Excel。

我也遇到了同样的问题。通过将活动工作表上任何单元格中的任何单元格值更改为我的VBA代码中的最后一行来解决此问题。在我的例子中,我添加了VBA代码:Range(“A1”)=“\u1”,但您也可以将任何其他单元格更改为任何其他值。

我对此没有问题。做“控制中断”有什么作用吗?看看任务管理器/性能图如何?(Ctl Alt Del)“Ctrl Break”没有任何影响,并且在任务管理器中没有任何意义,性能稳定。我使用的是Excel 2013,Windows 64位。我在一本全新的工作簿中测试了这一点,同样的结果。我甚至运行了Microsoft Office修复,但问题仍然存在。它似乎是在我运行了几次宏之后开始的。感谢您花时间回顾上面的内容。我采纳了你所有的建议,但问题仍然存在。我后来发现,如果我选择了另一个选项卡(不是活动的工作表),然后选择了预期的工作表,那么问题就会消失。感谢您抽出时间查看上述代码。我采纳了你所有的建议,但问题仍然存在。我随后发现,如果(在宏运行完成后)手动选择另一个工作表(不是活动工作表),然后选择所需的工作表,问题就会消失。然后,我添加了代码来模拟选择不同的工作表,然后选择所需的工作表,但问题并没有消失。问题可能存在于activesheet的内容中。尝试使用以下命令重置usedrange:
只要a=activesheet.usedrange.rows.count,就将a变暗。如果不工作,请循环到工作簿中的每个工作表:
用于此工作簿中的每个sh。工作表
并将
=activesheet.
替换为
=sh。
我记得有一次工作簿出现问题,在Excel中使用文本语音功能时,必须将其删除,因为它使每个VBA代码都不稳定。(application.speech或range().speak,诸如此类):不要使用!此外,如果您有复杂的公式或其他内容(命名范围…),请在代码开始时将application.enableevents=false和same应用于.calculation=xlmanual,并在代码结束时重置为normal