InkEdit控件向Excel单元格添加多余换行问题求助
换行重复增多的原因及解决办法
问题原因
- 换行符格式不兼容:Excel单元格里的换行用的是换行符(vbLf),但InkEdit控件粘贴内容后,会把这个换行符转换成回车+换行(vbCrLf)。写回单元格时,Excel不会自动删掉多余的回车符(vbCr),下次打开窗体加载内容时,InkEdit又会把已有的vbCrLf再转一遍,循环往复就导致换行越来越多。
- 复制粘贴带冗余内容:用
Copy+PasteToObj的方式传递内容,会把剪贴板里的格式信息或隐藏控制字符也带进来,加重换行符重复生成的问题。
操作前
操作后
解决办法
方法1:直接赋值+统一换行符(推荐)
换掉复制粘贴的方式,初始化时直接读取单元格文本并转换换行格式;写回时再转成Excel兼容的格式,代码修改如下:
窗体初始化代码
Private Sub UserForm_Initialize() ' 把Excel的vbLf换成InkEdit认的vbCrLf InkEdit1.Text = Replace(Sheets("Comments").Range("B1").Text, vbLf, vbCrLf) End Sub
关闭窗体代码
Private Sub CMDExit_Click() ' 把InkEdit的vbCrLf换回Excel的vbLf再写入单元格 Sheets("Comments").Range("B1").Value = Replace(InkEdit1.Text, vbCrLf, vbLf) Unload Me End Sub
方法2:写回时清理多余回车符
如果不想改加载方式,就在写回单元格前把InkEdit内容里的回车符删掉,只留换行符:
Private Sub CMDExit_Click() Dim cleanedText As String ' 移除所有回车符,只保留换行符 cleanedText = Replace(InkEdit1.Text, vbCr, "") Sheets("Comments").Range("B1").Value = cleanedText Unload Me End Sub
内容的提问来源于stack exchange,提问作者Olly Walker
相关产品推荐
相关产品推荐

