标签: word-vba

VBA - 如何将集合添加到集合集合中

我正在尝试使用Word 2007中的VBA创建代表表单文档的代码.我创建了表示Section,QuestionSet和Question的类.

所以我有15个部分.我创建了一个函数来创建每个'Section'对象将它添加到'Sections'集合然后销毁对象,结果是对象在集合中保持持久性(或者其他东西).

是否可以使用相同的方法将集合添加到集合中,或者我是否必须明确定义每个集合?

模块中的代码:

Public Sections As Collection

Function DefineSection(ByVal SectionName As String)

    Set Section = New clsSection
    Section.myName = SectionName
    Sections.Add Section, SectionName

End Function


Function DefineQuestionSet(ByVal SectionName As String, ByVal Name As String, ByVal NoOfQuestions As Integer, ByVal IsMutuallyExclusive As Boolean, Optional ByVal DependentOnSection As String)

    Dim Qsets As Collection

    Set Qsets = New Collection
    Set QuestionSet = New clsQuestionSet

    QuestionSet.Name = Name
    QuestionSet.NoOfQuestions = NoOfQuestions
    QuestionSet.MutuallyExclusive = IsMutuallyExclusive

    If Not (DependentOnSection) = "" Then
        QuestionSet.DependentOnSection = …
Run Code Online (Sandbox Code Playgroud)

collections excel vba excel-vba word-vba

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

从包含合并单元格的表中删除列

我正在尝试从具有水平合并单元格的表中删除列

删除列之前的表

Selection.MoveEnd Unit:=WdUnits.wdCell, Count:=3
Selection.Columns.Delete
Run Code Online (Sandbox Code Playgroud)

尽管列已被删除,但在此过程中将删除合并的单元格,从而留下损坏的表格.

删除列后的表

删除行几乎类似的方法工作正常,如本答案中所述

解决方法

我正在做这样的事情作为解决方法

Selection.MoveEnd Unit:=WdUnits.wdCell, Count:=3
Selection.MoveDown Unit:=WdUnits.wdLine, Count:=2, Extend:=wdExtend
Selection.Cells.Delete
Run Code Online (Sandbox Code Playgroud)

然后将索引1,2处的Cell宽度设置为表行的其余部分.这样就可以避免合并单元格被删除.

vba vsto word-vba

11
推荐指数
1
解决办法
2736
查看次数

如何使用VBA正确设置文档属性?

问题

我在使用Word 2010中的VBA设置文档属性时遇到了一些问题.

我有一个包含几个Heading 1部分的文档,我使用宏来提取所选部分(及其内容)并将其粘贴到新文档中.

这部分工作正常,但最后我需要设置几个文档属性,但没有设置它们.

我正在尝试设置内置和自定义属性,但出于这个问题的目的,我想设置标题,主题类别.

我已经创建了一个函数来设置我想要的属性(如下所示),并且VBA没有抛出任何错误(即使我删除了函数中的错误处理).

有谁知道我做错了什么?


该功能应如何工作

以下是该功能应该做什么的简要总结,但如果您发现更容易检查 - 下面的完整功能 -

  1. 检查该属性是否已存在
    • 它确实是一个default属性
      • 设置默认属性
      • PropertyTypeUsed变量设置为default
    • 它确实是一个custom财产
      • 设置自定义属性
      • PropertyTypeUsed变量设置为custom
    • 它根本不存在
      • 创建一个新的自定义属性
      • 设置自定义属性
      • PropertyTypeUsed变量设置为custom
  2. 检查是否已成功设置值
    • default应该设置一个属性
      • 该物业成功设定?
    • custom应该设置一个属性
      • 该物业成功设定?
  3. 返回结果

我相信这个功能导致了这个问题

Function UpdateDocumentProperty(ByRef doc As Document, _
                                ByVal propertyName As String, _
                                ByVal propertyValue As Variant, _
                                Optional ByVal propertyType As Office.MsoDocProperties = 4)

    '** Set …
Run Code Online (Sandbox Code Playgroud)

vba word-vba word-2010

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

在VBA宏中打开/激活Word文档

我希望VB/VBA专家可以帮助我.请考虑以下事项:用户在Word 2003中打开文档,在Normal.dot AutoOpen宏中,我们查看当前文档,如果已通过单击网页上的链接打开它,并满足某些其他应用程序特定条件,关闭流式"复制"并打开源文档(在共享驱动器上找到我们可以假设用户有权访问):

Documents.Open origDoc
Documents(ActiveDocument.FullName).Close SaveChanges:=wdDoNotSaveChanges
Documents(origDoc).Activate

With ActiveDocument
    ''# Do work
End With
Run Code Online (Sandbox Code Playgroud)

我的想法是我需要打电话Activate以确保原始文件是ActiveDocument,但我在电话中收到4160'错误的文件名'错误.Activate.如果我注释掉调用.Activate,它似乎ActiveDocument设置为origDoc文档,即使已经打开了其他文档(我不确定如何管理文档集合,以及Word如何确定下一步ActiveDocument将是什么如果你以编程方式关闭当前的ActiveDocument)

那么,调用.Open文档是否明确将Document设置为ActiveDocument?另外,调用.Activate已经存在的文档会导致错误吗?

我真的没有找到很多关于此的文档,所以提前感谢任何建议和见解!

ms-word word-vba

10
推荐指数
2
解决办法
9万
查看次数

重复Microsoft Word VBA,直到找不到搜索结果

我创建了一个MS Word宏来搜索某些文本(由标记代码表示),剪切文本并将其插入到新的脚注中,然后从脚注中删除标记代码.现在我希望宏重复,直到它在文本中找不到任何更多的标记代码.
这是下面的宏

Sub SearchFN()

'find a footnote
Selection.Find.ClearFormatting
With Selection.Find
    .Text = "&&FB:*&&FE"
    .Replacement.Text = ""
    .Forward = True
    .Wrap = wdFindContinue
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchKashida = False
    .MatchDiacritics = False
    .MatchAlefHamza = False
    .MatchControl = False
    .MatchByte = False
    .MatchAllWordForms = False
    .MatchSoundsLike = False
    .MatchFuzzy = False
    .MatchWildcards = True
End With
Selection.Find.Execute

'cut the footnote from the text
Selection.Cut

'create a proper Word footnote
With Selection
    With .FootnoteOptions
        .Location = …
Run Code Online (Sandbox Code Playgroud)

vba ms-word word-vba

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

更改Word文档中的所有链接源 - 范围的错位

我处理此代码以将Word模板中所有链接的字段/图表/ ...的源更改为从其启动的工作簿.

我有通常的字段图表(存储在其中InlineShapes),因此每个模板都有2个循环.


这些循环有时会一直停留在For Each,并且不停止地继续循环Fields/ InlineShapes(甚至不会增加索引...).(我添加了DoEvents它,它似乎减少了发生的频率... 如果你有一个解释,它将是非常受欢迎的!)

并且For i = ... to .Count,现在它的工作非常完美,除了将Pasted Excel Range其更改为相同大小的范围,从A1每次开始,并在工作簿的活动工作表上.


为避免出现问题InlineShapes,我添加了一个测试,以了解是否LinkFormat.SourceFullName可以访问,从而避免出现会阻止进程的错误:

Function GetSourceInfo(oShp As InlineShape) As Boolean
Dim test As Variant
    On Error GoTo Error_GetSourceInfo
    test = oShp.LinkFormat.SourceFullName
    GetSourceInfo = True
    Exit Function
Error_GetSourceInfo:
   GetSourceInfo = False
End Function
Run Code Online (Sandbox Code Playgroud)

我注意到InlineShapes我的模板中有两种链接类型:

图表

粘贴为Microsoft Office Graphic …

excel vba ms-word excel-vba word-vba

10
推荐指数
1
解决办法
3563
查看次数

可自动更新的链接

有没有办法为超链接应用"自动更新"样式?

我相信,这个问题并非无足轻重.

当您通常单击超链接时,它会将其颜色更改为紫色.接下来,如果您保存,关闭然后重新打开文档,该链接将更新回蓝色.这是Word的默认行为,不需要使用任何宏.

我试图用VBA复制这种行为.这是代码:

Sub Test1()
    Selection.Range.Hyperlinks(1).Range.Fields(1).Result.Style = Word.WdBuiltinStyle.wdStyleHyperlinkFollowed
End Sub
Run Code Online (Sandbox Code Playgroud)

要使其工作,只需将插入符号放入链接,运行宏,然后查看结果:

在此输入图像描述

这样可以正常工作,但在保存,关闭然后重新打开文档后,这些访问过的链接将不会自动更新.请参见下图中的差异.正常打开"Google"链接,使用鼠标Ctrl键单击; 使用宏打开了"StackOverflow"链接:

在此输入图像描述

正如我已经说过的,我想让我的VBA打开链接(StackOverflow)也可以自动更新(如谷歌).

是的,我理解,有一个解决方法 - 只需创建另一个宏,每次打开文档时都会启动它,并将所有紫色超链接更改回蓝色.但是,这只是解决方法,我不喜欢它.使用它,我们使用从"永久紫罗兰"到"永久蓝"的转换,而不是使用"临时紫"(这意味着,可以自动更新而无需任何额外的努力).

希望一切都清楚.提前致谢.

更新(已经发布了几个答案后添加).

是的,我明白,这会奏效:

Sub Test1()
    On Error Resume Next 'To avoid an error in case if the link isn't reachable
    Selection.Hyperlinks(1).Follow
End Sub
Run Code Online (Sandbox Code Playgroud)

但我想要模拟以下内容,而不是在浏览器中真正打开链接.这就是为什么,我不能使用Selection.Hyperlinks(1).Follow.

vba ms-word ms-office word-vba

10
推荐指数
1
解决办法
280
查看次数

使用C#中的宏创建新的Word文档

我在visual studio 2010(C#)中为Word 2010添加了一个插件,它动态地将新按钮添加到新的功能区选项卡(来自sql数据库的数据).现在当我点击一个按钮时,需要打开一个带有宏的新文档.我在文档(.docm)中有所需的宏,并且它的路径在数据库中.

如何使用其他文档中的宏创建新文档?

c# vba ms-word word-vba

9
推荐指数
1
解决办法
2640
查看次数

突出显示(不删除)单词文档中的重复句子或短语

我得到的印象是,这是不可能的,但我想如果你正在寻找任何3-4个单词,在一个很长的论文中的任何地方出现相同的序列,我可以找到相同短语的重复.

我从过去的论文中复制并粘贴了大量文档,并希望找到一种简单的方法来查找这个40多页文档中的重复信息有很多不同的格式,但我愿意暂时摆脱格式化顺序找到重复的信息.

vba ms-word word-vba

9
推荐指数
2
解决办法
3万
查看次数

如何在Excel VBA中访问Word公共变量

我正在尝试自动化Excel VBA正在完成所有工作的一些报告生成.我的雇主有一套标准化的模板,所有文件都应该从中生成.我需要从Excel VBA填充其中一个模板.Word模板广泛使用VBA.

这是(部分)我的Excel VBA代码:

Sub GenerateReport() ' (Tables, InputDataObj)
  ' code generating the WordApp object (works!)

  WordApp.Documents.Add Template:="Brev.dot"

  ' Getting user information from Utilities.Userinfo macro in Document
  Call WordApp.Run("Autoexec") ' generating a public variable
  Call WordApp.Run("Utilities.UserInfo")
  ' more code
End sub
Run Code Online (Sandbox Code Playgroud)

在Word VBA Autoexec模块中,user定义并声明了一个名为的公共变量.模块中的UserinfoUtilities组件填充user.这两个例程都是在没有任何VBA投诉的情况下运行的.我希望能够访问user我的Excel VBA中的变量,但我收到以下错误

编译错误:尚未在此上下文中创建的变量.

如何在Excel VBA中访问Word VBA变量?我认为它或多或少是一样的?

编辑:user变量是Type仅使用String属性定义的用户.复制填充user变量的Word VBA函数绝对可行,只需要比我更多的工作......

excel vba ms-word excel-vba word-vba

9
推荐指数
1
解决办法
1166
查看次数

标签 统计

word-vba ×10

vba ×9

ms-word ×7

excel ×3

excel-vba ×3

c# ×1

collections ×1

ms-office ×1

vsto ×1

word-2010 ×1