- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 Excel 中有一个 VBA 脚本,它在 MS Word 中生成一个简单的报告。它遍历一个二维数组,并将每一行打印为一条线(带有一些转换和检查)。
我的问题是:每行以 2 个制表符开头,每当一行太长而无法容纳时,它就会换到下一行。这个新行从页面的开头开始,但是,我需要与上一行对齐并从 2 个选项卡开始。
这是代码:
Sub Macro()
Dim i As Long
Dim szLine As String
szLine = "EXAMPLE STRING DATA, EXAMPLE STRING DATA, EXAMPLE STRING DATA, EXAMPLE STRING DATA"
'Header information
Selection.TypeText Text:="1. PARA 1"
Selection.TypeText Text:=vbCrLf
Selection.TypeText Text:=vbTab & "(a) SUB PARA"
Selection.TypeText Text:=vbCrLf
For i = 1 To 5
'Create String Line to Print
szLine = "EXAMPLE STRING DATA, EXAMPLE STRING DATA, EXAMPLE STRING DATA, EXAMPLE STRING DATA"
szLine = vbTab & vbTab & i & "." & vbTab & szLine
'Print
Selection.TypeText Text:=szLine
Selection.TypeText Text:=vbCrLf
Next i
End Sub
Here is an image showing an example of the document as is.
Public Function FixTabs(sz As String) As String
FixTabs = "NULL"
Dim numTabs As Long
Dim numSplit As Long
Dim sepSplit As String
Dim szReturn As String
Dim i As Long
Dim j As Long
Dim hasSplit As Boolean
Dim charLimit As Long
numTabs = 2
numSplit = 3
sepSplit = ","
'Determined by trial and error. Tabs are 5 chars long-ish
charLimit = (numTabs * 5) + 10
'Return the string as is if its not too big
If LenB(sz) < charLimit Then
MsgBox LenB(sz)
FixTabs = sz
Exit Function
End If
'Otherwise iterate through, and split the line by the sep char.
hasSplit = False
szReturn = ""
j = 0
For i = 1 To LenB(sz)
'Build the return string
szReturn = szReturn & Mid(sz, i, 1)
If Mid(sz, i, 1) = sepSplit Then
'Seperator found
j = j + 1
Else
'Check when to insert the new line
If j >= numSplit And hasSplit = False Then
hasSplit = True 'Only do this once.
szReturn = szReturn & vbCrLf & vbTab & vbTab 'Add newline and more tabs
End If
End If
Next i
FixTabs = szReturn
End Function
如您所见,这不太理想。它仅在 90% 的时间内有效,因为实际数据不太一致,字符并不总是相同。
.Paragraphs.LeftIndent = 72
是我最终使用的。不完美,但似乎正是我所需要的是不可能的。
最佳答案
您确实需要花一些时间学习 Word 工作原理的基础知识。使用选项卡等蛮力布局是非常糟糕的做法。
学习使用段落缩进(第一行,悬挂,左右)而不是制表符,更好的是段落样式 - 因为与 Word 中的段落格式有关的一切都基于段落样式。
此外,您需要学习使用 Word 模板。使用模板,您的所有样板文本、基本格式和段落样式都可以就位,因此您只需在相关位置插入相应的内容。
最后,学习如何使用 Range 对象。使用选择效率低且容易出错。
为了让您了解可能的情况,请在新的空文档中运行以下宏。这个宏只需要一次来配置模板。
Sub ApplyMultiLevelHeadingNumbers()
Dim LT As ListTemplate, i As Long
Set LT = ActiveDocument.ListTemplates.Add(OutlineNumbered:=True)
For i = 1 To 3
With LT.ListLevels(i)
.NumberFormat = Choose(i, "%1.", "(%2)", "%3.")
.TrailingCharacter = wdTrailingTab
.NumberStyle = Choose(i, wdListNumberStyleArabic, wdListNumberStyleLowercaseLetter, _
wdListNumberStyleArabic)
.NumberPosition = 0
.Alignment = wdListLevelAlignLeft
.TextPosition = InchesToPoints(0.5 + i * 0.5)
.ResetOnHigher = True
.StartAt = 1
.LinkedStyle = "Heading " & i
End With
With ActiveDocument.Styles("Heading " & i)
.ParagraphFormat.LeftIndent = InchesToPoints(i * 0.5 - 0.5)
.ParagraphFormat.FirstLineIndent = InchesToPoints(-0.5)
.ParagraphFormat.Alignment = wdAlignParagraphLeft
.Font.Name = "Times New Roman"
.Font.Bold = False
End With
Next
End Sub
然后运行以下宏:
Sub Demo()
Dim Rng As Range
With ActiveDocument
Set Rng = .Range(0, 0)
With Rng
.Text = "Para 1" & vbCr
.Paragraphs(1).Range.Style = wdStyleHeading1
.Start = .Paragraphs(1).Range.End
.Text = "Sub Para" & vbCr
.Paragraphs(1).Range.Style = wdStyleHeading2
.Start = .Paragraphs(1).Range.End
.Text = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas porttitor congue massa." & vbCr & _
"Fusce posuere, magna sed pulvinar ultricies, purus lectus malesuada libero, sit amet commodo magna eros quis urna." & vbCr & _
"Nunc viverra imperdiet enim. Fusce est. Vivamus a tellus." & vbCr & _
"Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Proin pharetra nonummy pede. Mauris et orci. Aenean nec lorem." & vbCr
.Style = wdStyleHeading3
.Start = .Paragraphs(4).Range.End
.Text = "Sub Para" & vbCr
.Paragraphs(1).Range.Style = wdStyleHeading2
.Start = .Paragraphs(1).Range.End
.Text = "In porttitor. Donec laoreet nonummy augue. Suspendisse dui purus, scelerisque at, vulputate vitae, pretium mattis, nunc." & vbCr & _
"Mauris eget neque at sem venenatis eleifend. Ut nonummy. Fusce aliquet pede non pede. Suspendisse dapibus lorem pellentesque magna. Integer nulla." & vbCr & _
"Donec blandit feugiat ligula. Donec hendrerit, felis et imperdiet euismod, purus ipsum pretium metus, in lacinia nulla nisl eget sapien." & _
"Donec ut est in lectus consequat consequat. Etiam eget dui. Aliquam erat volutpat." & vbCr & _
"Sed at lorem in nunc porta tristique. Proin nec augue. Quisque aliquam tempor magna. " & _
"Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nunc ac magna." & vbCr
.Style = wdStyleHeading3
.Start = .Paragraphs(4).Range.End
.Text = "Para 2" & vbCr
.Paragraphs(1).Range.Style = wdStyleHeading1
.Start = .Paragraphs(1).Range.End
.Text = "Sub Para" & vbCr
.Paragraphs(1).Range.Style = wdStyleHeading2
.Start = .Paragraphs(1).Range.End
.Start = .Paragraphs(1).Range.End
.Text = "Maecenas odio dolor, vulputate vel, auctor ac, accumsan id, felis. Pellentesque cursus sagittis felis." & vbCr
.Style = wdStyleHeading3
End With
End With
End Sub
正如您将看到的,输出的格式与您描述的一样,数据中没有一个选项卡。
关于excel - VBA TypeText Word Wrapping 内联与前一行的缩进,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67643750/
我创建了一个包含社交图标的列表。这些图标应该环绕在小屏幕上。 我使用 flex-wrap: wrap; 它在 Firefox 和 Chrome 中完美运行: 但是 Internet Explorer
我很惊讶地发现我的 white-space: pre-wrap;文本在 > 换行和 "人物。我以为它只会换行,- , 以及一个或多个空格之后。 这是一个fiddle . 它在" 之后换行, 在
我被分配了重新创建以下网站的任务:https://plantanapp.com/learn 我做了一些事情,但是每次我解决一个问题时,都会出现另外两个问题。 我是HTML和CSS的新手,并不真正了解元
我偶然发现了 jQuery 的 wrap() 函数。 当我试图包装两个 div 标签时,它们之间有一些文本,而不是两个 div 之间没有文本时,它的行为不知何故不同。 j查询: var wrapper
我正在尝试在 w3c css 验证器上验证一个 css 文件。当它被测试时,它返回一个错误,指出 “属性 flex-wrap- 不存在:wrap”。这是我 css 验证器认为错误的部分。 .row {
这个问题在这里已经有了答案: Flex items create space between them when they wrap [duplicate] (1 个回答) 关闭 6 年前。 我正在
我正在制作一个网页,其中的标题有一个主要主题和一个描述符,每个都包含在标签中。 我已经查找了 标签,它似乎只在你有长字符串时才有效没有空格。但是我在文本中断断续续地有空格。 我需要的是我可以在两个元
我听到很多关于 wrap 面板加载速度较慢的消息,因此我们需要一个虚拟化面板。 有人可以给我一个小的环绕面板示例,它可以证明加载速度较慢等它需要一个虚拟面板。 我设置了一个环绕面板作为列表框的面板控件
我需要用 sinon 多次包装一个方法,以便能够根据参数返回不同的对象。我该怎么做? 我要测试的 Controller 看起来像这样: const servicePackagesOfferingRep
我在运行测试时收到了上述错误消息。下面是我的代码(我正在使用 Backbone JS 和 Jasmine 进行测试)。有谁知道为什么会这样? $(function() { describe("Ca
问题是关于.text-wrapper,它有display:flex; flex-wrap:wrap 应用于它。使用 flex-wrap:wrap 的原因是,否则 .text-wrapper 和 .ta
我有三个带有 Bootstrap 3 的 DIV 容器,其中前两个在第一行,第三个在下一行,直到浏览器宽度直到 991 px。高于 992 px,所有三个容器应排成一行。每行容器的高度应该是最高的 (
(我使用的是 Chrome v.39+) 我正在尝试使用 flex-wrap 属性水平和垂直堆叠子 div,但我看到了一些非常奇怪的行为。例如,如果有 3 个子 div,最后一个的宽度为 100%(使
我必须这样做。适用于宽屏、中屏和小屏 https://pp.vk.me/c629328/v629328337/21bd7/izp9QG8Qcg4.jpg 这是我的代码 .section-items-c
我想要一个每行 3 个元素的容器 flex div,问题是当我添加第四个元素时(它应该自动换行到第二行),而不是它停留在一行并缩小其他元素。我启用了 flex-wrap: wrap; 这是我的代码:
假设我正在使用一个带有 flex-direction:row 和 flex-wrap:wrap 的 flexbox 容器。 根据浏览器窗口的大小,每行中可能有 2、3、4 或更多项。 我想在每隔一行的
我已经添加了所有属性。当我更改浏览器宽度时,它们开始相互粘连,这是因为我有太多图像而无法正常工作? 无法将图像换行: #skills>div { margin-top: 80px; displ
我想制作一个网格,其中每行有两张图片。我正在使用 flex-wrap: wrap;它在 android 4.4+ 上运行良好,但不适用于低于 android 4.4 的系统。我想在不使用 flex-w
我的网站出现异常行为。我最近在网站管理员工具上发现,它发现我网站上的许多网页都出现抓取错误 404。我无法理解这些页面是如何创建的,因为所有 404 页面最后都包含这几个字 wrap-function
我正在使用 MongoDB C# 驱动程序构建一些更新语句。 The C# API在 Builder 命名空间中包括 Wrapped 和“Un-Wrapped”方法。 从表面上看,这些似乎因泛型不同而
我是一名优秀的程序员,十分优秀!