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