vba - 如何拆分包含“硬回报”的单元格
问题描述
如何拆分包含“硬返回”(段落标记)的单元格,如下图所示?
期望的结果:
这是我的代码
Sub SplitCells()
'
Dim selT As String
Dim arr
Dim i As Integer
selT = selection.Range.Text
arr = Split(selT, ChrW(13))
selection.Range.Cut
selection.Cells.Split NumRows:=UBound(arr) + 1, NumColumns:=1, MergeBeforeSplit:=False
selection.MoveDown wdLine, 1
For i = UBound(arr) To 0 Step -1
selection.MoveUp wdLine, 1
selection.TypeText arr(i)
Next
End Sub
它有效,但我觉得这段代码很笨拙,希望有人能告诉我一个优雅的方式。
解决方案
它没有什么问题,真的。为了在具有拆分/合并单元格的表格中向上/向下移动,您需要Selection
...
这是使用对象模型而不是Selection
尽可能多的代码。但我不确定我会称之为“更优雅”还是“不那么笨拙”。可能,因为它尽可能使用 Word 对象,所以它更具自我记录性。
我所做的一项更改是在执行任何操作之前测试选择是否在表格中。如果用户在没有进行此类测试的情况下忘记选择一个单元格,则会显示一个神秘的错误消息,这总是很烦人......
Sub SplitCells()
'
Dim cel As Word.Cell
Dim selT As String
Dim arr
Dim i As Integer
Dim nrCells As Long
If Selection.Information(wdWithInTable) Then
Set cel = Selection.Cells(1)
selT = cel.Range.Text
arr = Split(selT, ChrW(13))
nrCells = UBound(arr)
cel.Range.Delete
cel.Split NumRows:=nrCells, NumColumns:=1 ', _
'MergeBeforeSplit:=False
cel.Select
Selection.MoveDown wdLine, nrCells - 1
For i = nrCells - 1 To 0 Step -1
Set cel = Selection.Cells(1)
cel.Range.Text = arr(i)
cel.Select
Selection.MoveUp wdLine, 1
Next
Else
MsgBox "Please select a table cell and try again."
End If
End Sub
推荐阅读
- javascript - 将 React Router 与 Express.js 一起使用
- angular - Angular 5(材料表):设置 Mat-row 隐藏
- vba - 激活关闭的工作簿,执行 lRow VBA
- angular - Angular动态设置媒体查询
- php - 未找到 PHPUnit DbUnit 表
- haskell - 具有多种类型的递归方案
- python - 需要在带有滚动条的ttk笔记本中安装鼠标滚轮
- javascript - 使用 Javascript 隐藏具有特定类的 HTML 元素,除非 URL 参数存在
- lua - Checking if an instance *doesn't* exist -> "Not a valid member"
- php - 如何在 php 中使用正则表达式搜索 XML 文件