Excel中Richtextbox执行Ctrl-C复制或拖放操作时崩溃求助
Excel使用Richtx32.ocx的RichTextBox控件执行复制/剪切/拖放后10秒崩溃
环境
- 操作系统:Windows 11 Pro 23H2
- 使用控件:Richtx32.ocx
- Office版本:Office 365
操作步骤
- 新建Excel工作簿
- 创建UserForm1
- 在UserForm1中插入RichTextBox控件
- 执行以下VBA代码显示窗体:
Sub RTBX() With Userform1 .Richtextbox.Show 0 End With End Sub
- 在RichTextBox中输入任意文本
- 尝试执行复制/剪切或拖放文本操作
问题现象
完成上述操作后,Excel会在10秒左右无响应并崩溃,且操作过程中RichTextBox的KeyPress或KeyDown事件完全未触发。已尝试Office 365的两种官方修复(快速修复、联机修复),问题仍存在。
解决方案尝试
1. 替换兼容性更好的控件
Richtx32.ocx是老旧的ActiveX控件,对Windows 11和现代Office 365的适配性很差,优先考虑替换:
- 如果不需要富文本格式,直接改用Office原生的
TextBox控件,完全规避兼容性问题 - 若必须使用富文本,可以尝试第三方的.NET富文本控件(需通过COM互操作在VBA中调用,需注意控件注册)
2. 手动接管复制/剪切逻辑,绕过控件默认行为
通过拦截鼠标和键盘事件,自己实现复制/剪切的逻辑,避免触发控件自带的崩溃流程:
' 粘贴到UserForm的代码模块中 Private Sub RichTextBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) ' 处理右键复制 If Button = 2 Then If RichTextBox1.SelLength > 0 Then Clipboard.SetText RichTextBox1.SelText End If End If End Sub Private Sub RichTextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) ' 处理Ctrl+C复制、Ctrl+X剪切 If Shift = 2 Then Select Case KeyCode Case vbKeyC If RichTextBox1.SelLength > 0 Then Clipboard.SetText RichTextBox1.SelText End If KeyCode = 0 ' 阻止控件默认处理 Case vbKeyX If RichTextBox1.SelLength > 0 Then Clipboard.SetText RichTextBox1.SelText RichTextBox1.SelText = "" End If KeyCode = 0 ' 阻止控件默认处理 End Select End If End Sub
注意:这个方法只能覆盖右键复制、Ctrl+C/X的场景,拖放操作的处理需要额外拦截相关事件,且无法彻底解决控件本身的底层兼容性问题,只能作为临时 workaround。
3. 重新注册适配版本的控件
如果一定要用Richtx32.ocx,尝试重新注册适配Windows 11的版本:
- 下载与你的Office位数(32/64位)匹配的Richtx32.ocx兼容版本
- 以管理员身份打开命令提示符,执行注册命令:
regsvr32 "C:\你的控件路径\Richtx32.ocx"
- 重启Excel后测试问题是否缓解
内容的提问来源于stack exchange,提问作者JoshuaR
相关产品推荐
相关产品推荐

