Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 更新字体类型不匹配的Word vb_Vba_Powershell_Fonts_Ms Word - Fatal编程技术网

Vba 更新字体类型不匹配的Word vb

Vba 更新字体类型不匹配的Word vb,vba,powershell,fonts,ms-word,Vba,Powershell,Fonts,Ms Word,我有一个问题,在word文档中有随机空格,但没有相同的格式字体,我正在尝试找到一种方法将字体更改为周围的字体 我找到了一些我测试过的VB,它选择文本并用彩色文本替换: Sub ChangeFont() With ActiveDocument.Content.Find .ClearFormatting .Text = " " Dim fontName As String fontName = "Calibri" With .R

我有一个问题,在word文档中有随机空格,但没有相同的格式字体,我正在尝试找到一种方法将字体更改为周围的字体

我找到了一些我测试过的VB,它选择文本并用彩色文本替换:

Sub ChangeFont()
    With ActiveDocument.Content.Find
      .ClearFormatting
      .Text = " "

      Dim fontName As String
      fontName = "Calibri"

      With .Replacement
        .ClearFormatting
        .Font.Name = fontName
      End With
      .Forward = True
      .Wrap = wdFindContinue
      .Format = True
      .MatchCase = False
      .MatchWholeWord = False
      .MatchWildcards = False
      .MatchSoundsLike = False
      .MatchAllWordForms = False
      .Execute Replace:=wdReplaceAll
    End With
End Sub
现在,我正试图找到一种方法来代替替换字体文本和颜色,在字符之前获取字符的字体,并应用该字符上存在的字体。有没有办法获取索引值并将字体名称拉入replace命令?有没有更简单的方法

理想情况下,我希望在powershell中执行此操作,但上面的代码在VB中工作,但当我尝试调整它时,我显然搞砸了一些事情,所以我只是尝试在调整之前编写函数代码。。。这是我尝试构建的powershell:

$app = New-Object -ComObject Word.application
$app.Visible = $True
$doc = $app.Documents.Open($FileName,$null) #Open FileName, ConfirmConversions , ReadOnly -1 = MSOTrue

$Content = $doc.Content.Find
$Content.ClearFormatting
$Content.Text = " "

$Content.Replacement.ClearFormatting
$Content.Replacement.Text = "TEST"
$Content.Replacement.Font.Name = "Georgia"

$Content.Forward = -1 #true
$Content.Wrap = 1 #wdFindContinue
$Content.Format = -1
$Content.MatchCase = 0 #false
$Content.MatchWholeWord = 0
$Content.MatchWildcards = 0
$Content.MatchSoundsLike = 0
$Content.MatchAllWordForms = 0
$Content.Execute.Replace("2") #wdReplaceAll


$doc.Close() | out-null
$app.Quit() | out-null

不需要替换任何内容,只需找到每个空格,并将其字体设置为“字体”之前的字符的字体

$Word = New-Object -ComObject Word.Application
$Doc = $Word.Documents.Open($FilePath)
$DocFind = $Doc.Content.Find
Do{
    $DocFind.ClearFormatting()
    $DocFind.Text = " "
    $NextSpace = $DocFind.Execute()

    $DocFind.Parent.Font = $DocFind.Parent.Previous(1,1).Font

}Until(!$NextSpace)

它在文档中查找第一个空格,并将其字体设置为前面字符的任何字体,然后尝试查找下一个空格。它会一直这样做,直到找不到其他空间。

我怀疑你的标签错了。VB.NET不是VBAYup,输入错误,抱歉。无论如何,我宁愿在powershell中做这件事,但我只是想了解如何做到第一次完美!!谢谢这要简单得多。