标签: word-vba

在MS Word中打印字体的所有字符

对于某些自动化测试,我需要创建一个Word Doc,其中包含字体的所有字符(适用于几种不同的字体)。有没有一种简单的方法来创建一个宏,该宏循环遍历字体中的所有可用字符(并将它们插入文档中)?

fonts ms-word word-vba

5
推荐指数
1
解决办法
4219
查看次数

使用自定义HTML代码替换Outlook下的文本选择的替代方法

我需要在使用自定义HTML代码编辑Outlook电子邮件时替换用户选择.

我尝试了两种方法:

使用剪贴板

  1. 在HTML模式下.
  2. Word.Range从中获取Word.Selection.
  3. 做一个range.Copy()把它放在剪贴板中
  4. 转换inputStringoutputString
  5. outputStringwith 替换选择range.PasteSpecial(...)

使用Open XML格式

  1. 在HTML模式下.
  2. Word.Range从中获取Word.Selection.
  3. 做一个range.Copy()把它放在剪贴板中.
  4. 转换inputStringoutputString(以Office Open XML格式,知道如何制作它以生成特定的HTML).
  5. outputStringwith 替换选择range.InsertXML(...)

问题是:

  1. 使用剪贴板时,它有时会崩溃.有关于检查剪贴板状态的参考,但我想我已经尝试了已知的替代方案.
  2. 要使用insertXML您需要安装Microsoft Word.insertXML单独安装Outlook 无法执行此操作.请看:没有Word 2007部署Outlook 2007的影响,以获取更多信息.

你知道更多的选择吗?我可以想到自己添加元素就像使用InsertParagraph,但我不确定我是否可以添加超链接或将遇到类似的问题.

vba word-vba outlook-vba outlook-addin

5
推荐指数
1
解决办法
939
查看次数

如何在VBA中的范围/选择中替换Microsoft Word字符样式?

我正在使用带有宏的Word 2007模板,该宏会将字符样式应用于所选文本。似乎“查找/替换”功能将是一个不错的起点,但是我认为我发现了一个错误/限制,该错误/限制使宏无法按预期工作。

这是我的vba代码:

Sub restyleSelection()
    Dim r As Range
    Set r = Selection.Range
    With r.Find
        .Style = ActiveDocument.Styles("Default Paragraph Font")
        .Text = ""
        .Replacement.Text = ""
        .Replacement.Style = ActiveDocument.Styles("Emphasis")
        .Forward = True
        .Wrap = wdFindStop
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
        .Execute Replace:=wdReplaceAll
    End With
End Sub
Run Code Online (Sandbox Code Playgroud)

如果我创建一个包含几个段落的测试文档,并在其中一个段落中选择了几个单词,然后运行宏,则“ Emphasis”样式不仅适用于所选内容,而且适用于所选内容的结尾文件。

使用实际的GUI查找/替换工具,此行为是相同的。

我的问题是:如何克服这个错误/限制,在选择/范围内应用字符样式?

更多信息:
我真正需要宏做的是将某种格式应用于整个选区,同时保持选区中的现有字符样式。例如,如果所选文本包含粗体,斜体,其余为默认段落字体,则宏应将粗体替换为“ Revised Bold”,将“ Italic”替换为“ Revised Italic”,并且用“修订”替换“默认段落字体”。这样,当我使用伴随宏“撤消”此宏的操作时,可以替换原始字符样式(粗体,斜体,默认段落字体)。

解决:
这是我最终得出的解决方案:

Sub applyNewRevisedText
    Dim r As …
Run Code Online (Sandbox Code Playgroud)

vba ms-word word-vba

5
推荐指数
1
解决办法
1万
查看次数

这段VBA代码有什么问题?

 If TextBox1.Text = "" Or TextBox1.Text = "False" Then
        msgbox("Filename invalid. Try again.",vbOKOnly)
Run Code Online (Sandbox Code Playgroud)

我收到"编译器错误:预期:="错误消息.

word-vba

5
推荐指数
1
解决办法
9369
查看次数

不使用VBA代码将文档另存为.docx

我用VBA代码和用户窗体创建了一个模板。我将其另存为.dotm(启用宏的模板)。

我想打开模板,使用该界面在文档中进行更改,然后将文档另存为.docx,而不引用模板/代码。当我打开docx并打开可视化基本编辑器时,在其中找到了代码。

这是我从界面退出的代码

Private Sub Sair_Click()
ActiveDocument.Bookmarks("NomeProj").Range.text = Nomeproj.Value
ActiveDocument.TablesOfContents(1).Update
Application.Quit

End Sub
Run Code Online (Sandbox Code Playgroud)

vba word-vba

5
推荐指数
1
解决办法
2万
查看次数

文档中链接对象的文件路径的VBA列表

我有许多大型Microsoft Word文档,其中包含许多Microsoft Excel电子表格中的许多链接文件.打开Word文档时,即使未选中"打开时更新链接文件"选项:

在此输入图像描述

Word仍会通过打开和关闭每个链接的相关Excel电子表格来检查其源头的每个链接(因此,对于x个链接,即使来自同一个电子表格,Word也会打开并关闭电子表格x次).这意味着打开文档需要很长时间.

我发现如果包含链接对象源的电子表格已经打开,文档打开得更快,因此Word不会保持打开,关闭,重新打开它们.

到目前为止,我所拥有的解决方案的开头是创建链接对象的所有文件路径的列表,通过以下VBA代码完成:

Sub TypeArray()

Dim List(), Path As String
Dim i, x As Integer
Dim s As InlineShape
Dim fso As FileSystemObject, ts As TextStream

Set fso = New FileSystemObject
Set ts = fso.OpenTextFile("C:\MyFolder\List.txt", 8, True)

With ts
    .WriteLine (ActiveDocument.InlineShapes.Count)
End With

For Each s In ActiveDocument.InlineShapes
        Path = s.LinkFormat.SourcePath & "\" _
        & s.LinkFormat.SourceName
        With ts
            .WriteLine (Path)
        End With
Next s
End Sub

'-------------------------------------------------------------------------------------- …
Run Code Online (Sandbox Code Playgroud)

excel vba ms-word excel-vba word-vba

5
推荐指数
1
解决办法
3548
查看次数

将事件添加到UI按钮单击

我在Microsoft Word中创建了一个自定义功能区,但是我在将事件附加到功能区中的按钮时遇到问题.以下是我的代码:

UI XML:

<mso:cmd app="Word" dt="1" />
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
  <ribbon startFromScratch="true" >
    <tabs>
      <tab id="CustomTab" label="MyTasks" >
           <group id="Group1" label="Details Labels">
             <menu id="Menu1" label="Details" size="large">
                <menu id="Menu21" label="Dates">
                   <button id="my_date" onAction="foo_eventhandler" label="Some Date" />
                </menu>
             </menu>
         </group>
      </tab>
    </tabs>
  </ribbon>
</customUI>
Run Code Online (Sandbox Code Playgroud)

然后我在Modules/NewMacros VBA代码中有以下VBA代码:

Sub foo_eventhandler(control As IRibbonControl)

End Sub
Run Code Online (Sandbox Code Playgroud)

注意:

我通过打开Word - >转到文件 - >选项 - >自定义功能区 - >导入/导出来导入XML.然后我选择我的XML文件并导入它.

但是,当运行此代码时,我收到错误"Argument Not Optional".如果我运行相同的代码没有"控制为IRibbonControl"它没关系,但我需要能够获得Sender对象.有人有什么建议吗?

贾森

vba ms-word ms-office word-vba

5
推荐指数
1
解决办法
1443
查看次数

复制并粘贴带有VBA宏的Excel图表

我知道我的问题可能听起来很简单,但我无法在任何地方找到解决方案......而且我已经筋疲力尽了.

我正在编写一个宏来自动生成Word中的报告生成.在某个阶段,我需要插入一些图表,它位于excel的图表表中......但没办法.这是我的代码

Sub copy_pic_excel()
Dim xlsobj_2 As Object
Dim xlsfile_chart As Object
Dim chart As Object

Set xlsobj_2 = CreateObject("Excel.Application")
xlsobj_2.Application.Visible = False
Set xlsfile_chart = xlsobj_2.Application.Workbooks.Open("path_to_file.xlsx")

Set chart = xlsfile_chart.Charts("sigma_X_chart")
chart.Select
chart.Copy
With Selection
.PasteSpecial Link:=False, DataType:=wdPasteEnhancedMetafile, _
Placement:=wdInLine, DisplayAsIcon:=False
End With
End Sub
Run Code Online (Sandbox Code Playgroud)

但它一直显示错误消息:"运行时错误'5342':指定的数据类型不可用."

我不知道为什么它没有粘贴图表.我想通过'MSForms.DataObject'使用剪贴板,但我似乎只适用于文本(或字符串).据我所知,我拥有所需的一切,但显然缺少一些东西.

任何的想法?

excel vba excel-vba word-vba

5
推荐指数
1
解决办法
2万
查看次数

在docx文件的宏中通过索引以编程方式删除重复节项目?

我有一个单词模板,内容控件包含在重复部分内容控件中.我需要创建一个按钮来删除项目转发器,例如添加.

我想弄清楚如何删除重复的部分项目.但在这种情况下 - 我总是删除最后一项.但是,我希望能够删除用户选择的项目.

Sub delete()
    Dim cc As ContentControl
    Dim Index
    Set cc = ThisDocument.SelectContentControlsByTag("ResolRepeater").Item(1)
    With cc
        .LockContentControl = False
        .LockContents = False
        .AllowInsertDeleteSection = True

        For Index = 1 To cc.RepeatingSectionItems.Count
        If Selection.Range.InRange(cc.RepeatingSectionItems(Index).Range) Or cc.RepeatingSectionItems(Index).Range.InRange(Selection.Range) Then
           Exit For
        End If
        Next Index

        'can't delete, get Run-Time Error '5904': "you can not change the range"
        cc.RepeatingSectionItems(Index).Range.delete

        'this lines always delete last element:
        'cc.RepeatingSectionItems(Index).Range.Select 
        'Selection.Delete

    End With 
End Sub
Run Code Online (Sandbox Code Playgroud)

单词模板

我很乐意回答任何问题.

vba ms-word docx word-vba

5
推荐指数
1
解决办法
403
查看次数

在打印word文档之前运行宏

我在Word 2010中有一个宏,它在打印时为文档添加页脚(即在打印预览屏幕中单击"最终"打印按钮后).

目前,为了填充文档,用户需要首先运行宏,并且只有在运行它之后,当他们打印文档时,才会添加页脚.

我想自动运行宏的部分,因此选择打印选项(Ctrl + P /文件>打印)将自动运行宏并打开打印预览屏幕进行最终打印.

如何才能做到这一点?

先感谢您

word-vba

5
推荐指数
1
解决办法
1422
查看次数

标签 统计

word-vba ×10

vba ×7

ms-word ×5

excel ×2

excel-vba ×2

docx ×1

fonts ×1

ms-office ×1

outlook-addin ×1

outlook-vba ×1