【问题标题】:How can I loop macro?如何循环宏?
【发布时间】:2019-03-29 08:02:37
【问题描述】:

为什么这个 VBA 代码不起作用?这些文档使用了一种称为 rage, wait, arial 的特殊字体。我想遍历文档的每个字母,并且每当.Font = "*rage*" 我想遍历十几个字母时。 (我的中风 - 耐心。)

 Sub grandma()

 Dim doc As Document
 Set doc = ActiveDocument
 Dim Counter As Integer

 For i = 1 To 6
      doc.Range.Characters.Count
      If doc.Range.Characters(i).Font.Name = "*rage*" Then
         doc.Range.Characters(i).Font.Name = "Waiting for the Sunrise"
      End If
      If doc.Range.Characters(i).Font.Name = "*wait*" Then
         doc.Range.Characters(i).Font.Name = "Rage Italic"
      End If
      If doc.Range.Characters(i).Font.Name = "*arial*" Then
         doc.Range.Characters(i).Font.Name = "Arial Nova Cond Light"
      End If
      j = i

 MsgBox "Hi! " & i
 Next i

 End Sub

【问题讨论】:

  • 您将Counter 声明为整数类型,但使用了未声明的变量i?不是问题,而是您应该在每个模块的顶部使用Option Explicit的更多理由。
  • 如果foo等于字符串文字"abc*"If foo = "abc*" 将为真。相等/比较运算符 = 不使用通配符。
  • 这些字体名称是否真的包含星号 - *?请注意,使用 Word 的内置查找/替换功能可能会更快、更高效。

标签: vba loops fonts ms-word


【解决方案1】:

在使用通配符时使用Like 运算符而不是=

 Option Explicit

 Sub grandma()

     Dim doc As Document
     Set doc = ActiveDocument
     Dim i As Integer

     For i = 1 To 6

        With doc.Range.Characters(i).Font
            Select Case True
            Case .Name like "*rage*"
                .Name = "Waiting for the Sunrise"
            Case .Name Like "*wait*"
                .Name = "Rage Italic"
            Case .Name Like "*arial*"
                .Name = "Arial Nova Cond Light"
            End Select
        End With

        MsgBox "Hi! " & i

     Next i

 End Sub

旁注:我个人倾向于避免使用数据类型Integer,而是使用Long - 除非处理会溢出Long 的遗留应用程序或某些因为我不想放弃那两个额外的内存字节(讽刺)。尤其是在处理单个 word 文档 characters 时 - 一个文档可以包含数千个字符,您可以快速溢出 Integer。

查看Why Use Integer Instead of Long? 了解更多信息。

【讨论】:

  • 我应该在此处添加/调整什么,以便在整个文档中循环更改字体,而不会弹出每次更改的提示?
  • 如果你想保持你正在使用的相同方法,那么我相信你应该能够做类似For i = 1 to doc.Range.Characters.Count而不是... To 6
  • 回到原来的场景。我在 excel 中有表格数据,其中 1 列指定字符串,另一列指定字符串的字体。我的最终目标是使用指定字体中的字符串填充 word 文件中的表格框。
猜你喜欢
  • 2014-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多