标签: word-vba

不使用剪贴板(VBA)复制Word文档内容

我想知道如何避免使用Windows剪贴板,当你想"复制"Word文档的多个部分时(在宏中使用VBA)

为什么要避免?因为我们在服务器上使用Word,在多用户环境中(我知道它是正式的不赞成)

否则,使用Selection.Copy和Selection.Paste方法可以轻松完成.

谢谢.

vba ms-word word-vba

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

在Microsoft Word文档中存储任意元数据

我需要在Word文档中存储自定义元数据.'文档属性'限制为255个字节,但我的数据是>> 10k

我们正在使用VBA编写一个单词扩展来与我们的应用程序进行交互,并希望将我们的应用程序数据存储在word文档中.这个想法是用户可以只共享word文档而不共享我们应用程序的任何其他数据文件.

有没有人想过如何在Office 2003+文档中有效存储任意元数据?

vba ms-word ms-office word-vba

6
推荐指数
1
解决办法
3814
查看次数

正则表达式Word宏,在一个范围内找到两个单词,然后将这些单词斜体化?

所以,我刚刚开始理解正则表达式,我发现学习曲线相当陡峭.但是,stackoverflow在我的实验过程中非常有用.我想写一个特定的单词宏,但我还没有想出办法.我希望能够在一个文档中找到彼此10个左右的单词中的两个单词,然后将这些单词用斜体字表示,如果这些单词的间隔超过10个单词或者顺序不同,我希望宏不要斜体那些话.

我一直在使用以下正则表达式:

\bPanama\W+(?:\w+\W+){0,10}?Canal\b
Run Code Online (Sandbox Code Playgroud)

然而,它只允许我操纵整个字符串作为一个整体,包括其间的随机单词.此外,.Replace函数只允许我用不同的字符串替换该字符串而不更改格式样式.

有经验的人是否知道如何使这项工作?它甚至可以吗?


编辑:这是我到目前为止.我有两个问题.首先,我不知道如何仅从匹配的正则表达式中选择单词"Panama"和"Canal",并仅替换那些单词(而不是中间单词).其次,我只是不知道如何替换与不同格式匹配的正则表达式,只有不同的文本字符串 - 可能只是因为对单词宏不熟悉.

Sub RegText()
Dim re As regExp
Dim para As Paragraph
Dim rng As Range
Set re = New regExp
re.Pattern = "\bPanama\W+(?:\w+\W+){0,10}?Canal\b"
re.IgnoreCase = True
re.Global = True
For Each para In ActiveDocument.Paragraphs
  Set rng = para.Range
  rng.MoveEnd unit:=wdCharacter, Count:=-1
  Text$ = rng.Text + "Modified"
  rng.Text = re.Replace(rng.Text, Text$)
Next para
End Sub
Run Code Online (Sandbox Code Playgroud)

好的,感谢蒂姆·威廉姆斯的帮助下面我得到了以下解决方案,它在某些方面有点笨拙并且它绝不是纯粹的正则表达式,但它确实完成了工作.如果有人有更好的解决方案或想法如何解决这个问题,我会很高兴听到它.再一次,我的粗暴强迫搜索和替换功能的变化是一个有点令人尴尬的粗糙,但至少它的工作原理...

Sub RegText()
Dim re As regExp
Dim para As Paragraph
Dim rng As Range
Dim txt …
Run Code Online (Sandbox Code Playgroud)

regex search vba word-vba

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

从一个Word文档中选择一系列文本并复制到另一个Word文档中

我正在尝试使用VBA在一个Word文档中提取句子并将其放入另一个Word文档中.因此,例如,如果我们需要找到组织的标题,我们将遵循以下算法:

搜索"标题"
在"标题"之后执行(获取)每个字符并且(停止)直到"地址"

ms-word word-vba

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

如何通过单击Word 2010复选框运行VBA宏?

当我单击Word 2010中的复选框时,我想运行宏.

请注意,我既不想要"Legacy Forms"复选框也不想要"ActiveX"复选框!它们只能在一些"受保护的文档模式"下工作并且看起来很难看,但是我想要在编写文档时可以选择和取消选择的新文件,这对我来说看起来更好.

我知道,使用遗留表单,您可以在输入表单元素时直接插入宏,而在离开表单元素时可以直接插入宏,您可以在VBA中捕获事件,如

Sub CheckboxXY_Click()
Run Code Online (Sandbox Code Playgroud)

但这对Word 2010复选框不起作用,即使我给它们描述和标记名称.

重复:这些是我想要使用的形式(以防万一有人建议我使用Legacy的形式):

Word 2010复选框

这就是它们在文档中的样子(鼠标悬停):

在此输入图像描述

我不敢相信我是第一个试过这个的人......

checkbox vba ms-word word-vba word-2010

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

Word VBA .SaveAs2弹出消息(在某​​些情况下)

  • SharePoint 2010
  • Word 2010
  • Windows 7企业版

我有一个存在于SharePoint文档库中的.docm文件.打开时,宏会触发并提示用户输入新的文件名和文件夹,然后使用.SaveAs2将指定位置的文件副本保存为不带宏的.docx.

我不能使用具有正确.dotm的SP内容类型作为模板,因为库中有超过30种不同的文件模板.我必须在SharePoint库中使用.docm,然后确保用户将该文件的副本保存到其个人驱动器中.

所以我在open事件中使用了一些代码.我让用户指定一个文件夹和一个文件名.然后.SaveAs2获取这些参数并将当前文件保存在新路径中,新名称为不带宏的普通.docx文件.我就饶你如何的细节strFolderstrDoc聚集.请放心,他们存在.我有一个带有完整文件名的debug.print,它是正确的.

With o
    .SaveAs2 strFolder & strDoc & ".docx", wdFormatDocumentDefault
End With
Run Code Online (Sandbox Code Playgroud)

问题是此代码会显示一条消息,指出无法找到该文件. 在此输入图像描述

好吧,呃,我正在尝试将文件保存在这个位置.当然它不存在.这才是重点.(请注意,该文件夹确实存在.)

消息框关闭后,Word愉快地将文件保存到指定的位置.

此外,如果从SharePoint以读取模式打开原始文件并且新文件路径位于网络驱动器上,则仅弹出消息.

如果,则不会弹出该消息

  • 文件在"编辑"模式下打开(单击SharePoint文件,在下一个对话框中选择"编辑"),或者是否
  • 该文件保存到本地驱动器(C :)或如果
  • 从File> Recent Backstage对话框打开该文件.

在生产系统中,用户将无法选择"编辑"或"只读".它们将默认为只读.此外,用户将无法保存到本地C:\驱动器,因为业务系统将其配置文件和"我的文档"放在网络驱动器(H :)上.

我试过了

  • 使用不同的方法保存文件:使用msoFileDialogSaveAs - 相同的消息
  • 抑制消息Application.DisplayAlert = False(我知道,但我很绝望)或wdAlertsNone. - 不起作用.消息仍显示
  • 使用Application.ScreenUpdating = False抑制消息.不行.消息仍然显示.
  • 抑制与错误处理的消息On Error Resume NextOn Error Goto MyHandler没有错误处理程序的消息弹出,但被解雇.该消息具有蓝色的"i"图标,因此可能不会将其解释为错误,而是作为一条信息.

如何让消息消失?

此外,虽然这不是必不可少的,但我们很高兴知道:

  • 当文件保存到新位置时,为什么读取或编辑模式很重要?
  • 为什么文件的新位置(网络路径或本地路径)在保存时很重要?
  • 为什么在文件正确保存之后会出现消息?

sharepoint vba ms-word word-vba

6
推荐指数
1
解决办法
2326
查看次数

检测何时将数据添加到文档中,例如.一个角色或白色空间

有没有办法检测用户何时使用VBA在Microsoft Word中按键.我已经搜索过这样做的方法.我还搜索了一些方法,这些方法可以解决这个问题,例如检测插入点何时移动,或者检测到新单词放在word文档中的时间,但我一直没看.我目前正在使用,appWord_WindowSelectionChange(ByVal Sel As Selection)但在您键入时无法检测到.

我很感激有人向我展示如何检测按键,或者能够向我展示一个可以实现相同目标的解决方法.

编辑

如果上面我想要的内容摘要不清楚,我道歉.我所拥有的是一个使用它的子appWord_WindowSelectionChange(ByVal Sel As Selection).然而,我想要的是,只要在word文档中输入任何数据,就会触发此子目录,例如.一个字母或一个空白字符.例如,如果单词文档的页脚中存在字符计数,并且我已更新此字符计数,则字符计数字段应在用户键入文档时更新.

vba ms-word word-vba

6
推荐指数
1
解决办法
826
查看次数

VBA中引用/指针的一个很好的替代品?

你能推荐我在VBA中作为参考或指针类型的一个很好的替代品吗?我一直在努力与这样的表达:

dblMyArray( i * lngDimension0 + j * lngDimension1 + k * lngDimension2, l * lngDimension3 + m * lngDimension4 ) = dblMyArray( i * lngDimension0 + j * lngDimension1 + k * lngDimension2, l * lngDimension3 + m * lngDimension4 ) + 1
Run Code Online (Sandbox Code Playgroud)

如果我想在例如C++中的多维数组中累积值,我可以这样写:

double& rElement = dblMyArray[ i * lngDimension0 + j * lngDimension1 + k * lngDimension2 ][ l * lngDimension3 + m * lngDimension4 ];
rElement += 1;
Run Code Online (Sandbox Code Playgroud)

要么

double* pElement = &dblMyArray[ i * lngDimension0 …
Run Code Online (Sandbox Code Playgroud)

vba excel-vba access-vba word-vba powerpoint-vba

6
推荐指数
2
解决办法
5569
查看次数

MS-Word VBA宏:转换/替换制表位到逗号

我正在处理几个Word文档,这些文档要求我将制表符转换或替换为逗号.文字可能如下所示:

Hello........world (dot)
Hello------------World (dash)
Hello____World (line)
Hello          world (none)
Run Code Online (Sandbox Code Playgroud)

Word为制表位提供了4种选择:点,短划线,直线和无.但是,我想只将前3个领导者类型替换为逗号.最后一个不会像这样改变:

Hello,world
Hello,World
Hello,World
Hello          world
Run Code Online (Sandbox Code Playgroud)

在Word中查找和替换选项卡功能不起作用.因此,经过大量的谷歌搜索,我试图从各种来源"复制并粘贴"到一个简单的宏来完成这项任务(我是Word宏和VBA的新手):

Sub Macro1()
    For Each para In ActiveDocument.Content.Paragraphs
        For Each aTab In para.TabStops
            If aTab.Leader = wdTabLeaderDots _
            Or aTab.Leader = wdTabLeaderDashes _
            Or aTab.Leader = wdTabLeaderLines Then
               TypeText = ","
               aTab.Clear
            End If
        Next aTab
    Next para
End Sub
Run Code Online (Sandbox Code Playgroud)

参考:https://msdn.microsoft.com/en-us/library/office/ff192806.aspx

Word说行中有错误:TypeText =","我不知道如何纠正它.

你能帮我看一下这个宏吗?

提前致谢.

P/S:Slai有一个解决这个问题的方法.我只是将第二个代码复制到宏中,稍微修改一下以使其工作:

Sub Macro1()
    Dim p As Paragraph, t As TabStop

    For Each p In ActiveDocument.Paragraphs
        For …
Run Code Online (Sandbox Code Playgroud)

ms-word word-vba

6
推荐指数
1
解决办法
990
查看次数

我见过的最奇怪的VBA问题(在布尔条件下VBASigned可能的错误)

在MS Word中,我添加了一些代码来查看文档是否缺少其数字签名,或者至少我认为我做了.我决定在其他系统上测试之前分享.

Sub test()
    If Not ThisDocument.VBASigned Then
        Debug.Print "I am NOT signed"
    End If
End Sub
Run Code Online (Sandbox Code Playgroud)

问题:无论文档是否具有数字签名,上述代码都会产生相同的结果.如果我通过删除我修改代码Not仍然会得到意想不到的结果.

我试图通过以下方式来强迫事情:

If Not CBool(ThisDocument.VBASigned) Then
Run Code Online (Sandbox Code Playgroud)

但更令人惊讶的是,以下代码也失败了:

Sub test()
    Dim isSigned As Boolean
    isSigned = ThisDocument.VBASigned

    If Not isSigned Then
        Debug.Print "I am NOT signed"
    End If
End Sub
Run Code Online (Sandbox Code Playgroud)

即使ThisDocument.VBASignedAND isSigned都是TRUE......
我的代码运行的快照 但如果改变isSigned = ThisDocument.VBASigned,isSigned = True那么一切都按预期工作.

谁能证实这一点?有什么想法吗?


以下编辑回答了一些问题:

  1. 是的,使用Option Explicit,Yes也试过Debug.
    这段代码:

    Option Explicit
    
    Sub test()
        Dim isSigned As Boolean
        isSigned …
    Run Code Online (Sandbox Code Playgroud)

excel vba ms-word excel-vba word-vba

6
推荐指数
1
解决办法
183
查看次数