我在每个工作表的 VBA 循环中搞砸了什么?

2023-12-13

目前,我必须一次发送多封信件,并且通常只替换单元格中的一两个单词。问题是我需要将这些单词加粗,并且在 150 个工作表上单独使用这个宏会很乏味。我对编码非常陌生,并尝试在线搜索以编辑此代码以循环所有工作表,但我尝试的所有操作似乎只会更改我所在的当前工作表。下面是我当前的代码,其中我认为会导致循环,但它不是循环遍历工作表,而是似乎只循环遍历我所在的单个工作表,询问我是否想在该工作表上加粗另一个单词。

原始代码:

Sub FindAndBold()
Dim ws As Worksheet
Dim sFind As String
Dim rCell As Range
Dim rng As Range
Dim lCount As Long
Dim iLen As Integer
Dim iFind As Integer
Dim iStart As Integer

On Error Resume Next
Set rng = ActiveSheet.UsedRange. _
  SpecialCells(xlCellTypeConstants, xlTextValues)
On Error GoTo ErrHandler
If rng Is Nothing Then
    MsgBox "There are no cells with text"
    GoTo ExitHandler
End If

sFind = InputBox( _
  Prompt:="What do you want to BOLD?", _
  Title:="Text to Bold")
If sFind = "" Then
    MsgBox "No text was listed"
    GoTo ExitHandler
End If

iLen = Len(sFind)
lCount = 0

For Each rCell In rng
    With rCell
        iFind = InStr(.Value, sFind)
        Do While iFind > 0
            .Characters(iFind, iLen).Font.Bold = True
            lCount = lCount + 1
            iStart = iFind + iLen
            iFind = InStr(iStart, .Value, sFind)
        Loop
    End With
Next

If lCount = 0 Then
    MsgBox "There were no occurrences of" & _
      vbCrLf & "' " & sFind & " '" & _
      vbCrLf & "to bold."
ElseIf lCount = 1 Then
    MsgBox "One occurrence of" & _
      vbCrLf & "' " & sFind & " '" & _
      vbCrLf & "was made bold."
Else
    MsgBox lCount & " occurrences of" & _
      vbCrLf & "' " & sFind & " '" & _
      vbCrLf & "were made bold."
End If

ExitHandler:
    Set rCell = Nothing
    Set rng = Nothing
    Exit Sub

ErrHandler:
    MsgBox Err.Description
    Resume ExitHandler
End Sub

我最近的尝试:

Sub FindAndBold()
Dim ws As Worksheet
Dim sFind As String
Dim rCell As Range
Dim rng As Range
Dim lCount As Long
Dim iLen As Integer
Dim iFind As Integer
Dim iStart As Integer
For Each ws In ActiveWorkbook.Worksheets

   On Error Resume Next
    Set rng = ActiveSheet.UsedRange. _
      SpecialCells(xlCellTypeConstants, xlTextValues)
    On Error GoTo ErrHandler
    If rng Is Nothing Then
        MsgBox "There are no cells with text"
        GoTo ExitHandler
    End If

    sFind = InputBox( _
      Prompt:="What do you want to BOLD?", _
      Title:="Text to Bold")
    If sFind = "" Then
        MsgBox "No text was listed"
        GoTo ExitHandler
    End If

    iLen = Len(sFind)
    lCount = 0

    For Each rCell In rng
        With rCell
            iFind = InStr(.Value, sFind)
            Do While iFind > 0
                .Characters(iFind, iLen).Font.Bold = True
                lCount = lCount + 1
               iStart = iFind + iLen
               iFind = InStr(iStart, .Value, sFind)
           Loop
       End With
   Next

    If lCount = 0 Then
        MsgBox "There were no occurrences of" & _
          vbCrLf & "' " & sFind & " '" & _
          vbCrLf & "to bold."
    ElseIf lCount = 1 Then
        MsgBox "One occurrence of" & _
          vbCrLf & "' " & sFind & " '" & _
          vbCrLf & "was made bold."
    Else
        MsgBox lCount & " occurrences of" & _
          vbCrLf & "' " & sFind & " '" & _
         vbCrLf & "were made bold."
    End If
Next ws
ExitHandler:
    Set rCell = Nothing
    Set rng = Nothing
    Exit Sub

ErrHandler:
    MsgBox Err.Description
    Resume ExitHandler
End Sub

由YowE3K提供的更正的工作代码:

Sub FindAndBold()
Dim ws As Worksheet
Dim sFind As String
Dim rCell As Range
Dim rng As Range
Dim lCount As Long
Dim iLen As Integer
Dim iFind As Integer
Dim iStart As Integer

   For Each ws In ActiveWorkbook.Worksheets
    Set rng = Nothing
    Set rng = ws.UsedRange.SpecialCells(xlCellTypeConstants, xlTextValues)
    If rng Is Nothing Then
        MsgBox "There are no cells with text"
        GoTo ExitHandler
    End If

    sFind = InputBox( _
      Prompt:="What do you want to BOLD?", _
      Title:="Text to Bold")
    If sFind = "" Then
        MsgBox "No text was listed"
        GoTo ExitHandler
    End If

    iLen = Len(sFind)
    lCount = 0

    For Each rCell In rng
        With rCell
            iFind = InStr(.Value, sFind)
            Do While iFind > 0
                .Characters(iFind, iLen).Font.Bold = True
                lCount = lCount + 1
               iStart = iFind + iLen
               iFind = InStr(iStart, .Value, sFind)
           Loop
       End With
   Next

    If lCount = 0 Then
        MsgBox "There were no occurrences of" & _
          vbCrLf & "' " & sFind & " '" & _
          vbCrLf & "to bold on worksheet '" & ws.Name & "'."
    ElseIf lCount = 1 Then
        MsgBox "One occurrence of" & _
          vbCrLf & "' " & sFind & " '" & _
          vbCrLf & "was made bold on worksheet '" & ws.Name & "'."
    Else
        MsgBox lCount & " occurrences of" & _
          vbCrLf & "' " & sFind & " '" & _
         vbCrLf & "were made bold on worksheet '" & ws.Name & "'."
    End If
Next ws
ExitHandler:
    Set rCell = Nothing
    Set rng = Nothing
    Exit Sub

End Sub

您正在设置一个循环来遍历每个工作表(使用ws作为对当前正在处理的工作表的参考),然后处理ActiveSheet. Use ws代替ActiveSheet.

你还应该设置rng to Nothing在尝试将其设置为UsedRange.SpecialCells否则,如果崩溃了,你的If rng Is Nothing Then声明不起作用(因为rng仍将被设置为在循环的上一次迭代中设置的值)。

'...
For Each ws In ActiveWorkbook.Worksheets
    Set rng = Nothing
    On Error Resume Next
    Set rng = ws.UsedRange.SpecialCells(xlCellTypeConstants, xlTextValues)
    On Error GoTo ErrHandler
    If rng Is Nothing Then
'...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我在每个工作表的 VBA 循环中搞砸了什么? 的相关文章

  • 我可以用文本框设置变量名称吗? excel

    我可以使用 TextBox Vba Excel 设置变量的名称吗 我必须以在文本框中写入组名称并单击命令按钮的方式输入新的产品组 代码必须从文本框中获取字符串 并将该字符串设置为新创建的数组的名称 我只想在运行时创建一个新变量 或数组 据信
  • 在组合框中显示可见工作表

    您好 我有以下代码来在组合框中显示工作表 创建工作表后 工作表会自动添加到列表中 我不希望隐藏的工作表在保管箱中可见 我怎么做 Option Explicit Private Sub ComboBox1 Change If ComboBox
  • 在 MS Word 中运行外部 vba 代码

    我可以将外部代码链接到 Word 文档吗 我有很多带有宏的 Word 文档 VBA 代码 全部使用相同的代码 我希望代码从外部源运行 而不是从所有这些文档中运行 这样 如果我必须更新代码 我只有一个地方需要更新 您可以创建一个模板并将其放入
  • Excels COUNTIFS 函数中的数组作为条件,混合 AND 和 OR [重复]

    这个问题在这里已经有答案了 我已经在谷歌上搜索了一段时间 但似乎无法让它发挥作用 我使用 Excel 2010 希望混合使用 AND 和 OR 运算符来计算行数 我想做的是这样的 COUNTIFS A A string1 B B strin
  • 当使用公式生成超链接时,VBA 打开 Excel 超链接不起作用

    使用公式生成的 Excel 超链接似乎存在错误 我使用的是 Excel 2010 我有一个电子表格 其中的单元格包含 URL 我的目标是执行以下两件事 将这些单元格变成超链接 创建一个键盘快捷键来打开这些超链接 这样我就不必使用鼠标了 为了
  • 在 Node.js 中解析 Json(带有数组和对象)并将数据导出到 Excel 文件中

    我是 Node js 新手 我的要求是 我需要解析 JSON 并将数据导出到 Excel 文件中 其中包含 JSON 中的所有字段 我的 JSON 如下 id 1255 title The Brain and Nervous System
  • 如何将 MySQL 查询输出保存到 Excel 或 .txt 文件? [复制]

    这个问题在这里已经有答案了 如何将 MySQL 查询的输出保存到 MS Excel 工作表 即使只能将数据存储在 txt文件 就可以了 From 将 MySQL 查询结果保存到文本或 CSV 文件中 http www tech recipe
  • SpreadsheetML 文件扩展名被 IE 和 FF 更改 - 内容类型错误?

    我正在 PHP 中生成 SpreadsheetML 文件 当用户下载文件并保存时 默认情况下文件会另存为 Report xml 并在 Excel 中打开 但是 如果选择在 Excel 中打开文件而不是保存文件 则文件名将更改为 Report
  • VBA中的字符串是可以迭代的数组吗?

    VBA中字符串是数组吗 例如 我可以像在 C C 中那样迭代它吗 做这样的事情 char myArray 10 for int i 0 i lt length i cout lt lt myArray i VBA 中的等价物是什么 它的行为
  • Java Microsoft Excel API [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Excel VBA - 添加自定义数字格式

    我有一个在 Excel 外部生成的文件 其中包含许多百分比 所有这些百分比都有一位小数 当导入到 Excel 中时 Excel 会在百分比中添加第二位小数 这似乎是 Excel 中百分比的某种默认格式 它只是添加了一个 0 我想将所有两位小
  • numpy NPV 和 Excel NPV 有区别吗?

    我的 Excel 中有一行包含 11 个值 TotalSavings 0 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 贴现率为 0 08 我在 Excel 中使用 计算 NPVNPV
  • VSTO 替代方案 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 VSTO 有哪些替代方案 ManagedXll 能做什么而 VSTO 不能 你什么时候使用其中一个而不
  • 如何通过电子邮件发送 Excel 文件?

    我有一个 excel 文件 Excel 2003 xls 格式 我想用 c 通过电子邮件发送它 我的代码成功发送它 但是当我尝试打开响应文件时 它似乎编码错误 例如 这里是响应文件名 utf 8 B RWxzesOhbW9sw6FzXzIw
  • 使用 ClosedXML 创建数据透视表

    我正在尝试使用 ClosedXML V0 91 1 创建数据透视表 但我不断遇到问题 因为我的 Excel 文件包含不可读的内容 然后 Excel 工作簿在单击时删除了我的数据透视表Yes below 下面是我击中时的显示Yes 它正在删除
  • 通过 Excel / VBA 调用 DLL 中的 C++ 函数在传递双参数时生成异常

    我试图通过 DLL 在 Excel VBA 中使用 C C 静态函数 我在 VS17 中调试时遇到异常 我怀疑这是参数传递方式的问题 它是双精度 EXCEL EXE 中 0x00007FFA28BBA14F kernel32 dll 处抛出
  • 替换字符串变量中的多个字符 (VBA)

    如何替换字符串变量中的多个内容 这是我在 VBA 中的示例函数 Private Function ExampleFunc ByVal unitNr As String If InStr unitNr OE gt 0 Then unitNr
  • 跳过行:将数据从 SSIS 导出到 Excel 文件

    我正在尝试使用 SSIS 将数据从 SQL Server 数据库导出到 Excel 文件中 我希望从第 6 行插入数据 第 5 行有标题 我可以映射标题名称Excel 目标编辑器 通过编写 SQL 命令到 SQL 表头 SELECT FRO
  • 如何使用 php 将 *.xlsb 转换为数组或 *.csv

    我正在尝试转换 xlsb文件到php array or csv文件 或至少 xls 我尝试使用PHPExcel 但看起来它无法识别该文件中的内容 我注意到 你可以重命名 xlsb文件到 zip文件 然后使用命令行解压缩unzip zip 之
  • Access / Word 2010 VBA 邮件合并尝试打开 [文件夹名称].mdb 而不是 ACCDB 源

    我们正在尝试从 Access 中自动执行邮件合并过程 单击按钮后 VBA 将运行指定当前数据库 accdb 作为数据源并运行 SQL 具体代码如下 Set up Word Dim objWord As Object Set objWord

随机推荐

  • C# MVC 视图之间没有提交传递对象

    我对我的拼写错误感到抱歉 我正在开发概念验证 C ASP NET MVC 应用程序 其中我需要在没有 post 和 get 的情况下在两个视图之间传递数据 一个视图启动一个模式对话框 我需要它们之间的通信 我们正在使用 JQuery 我有一
  • Android ListView 使用 SimpleCursorAdapter 更新

    嘿 我使用列表视图来演示存储在数据库中的条目 我还有一个 EditText 元素和一个将 EditText 的内容添加到数据库中的按钮 要将视图绑定到数据库内容 我使用 SimpleCursorAdapter 和以下填充函数 private
  • 如何更改 Java Swing TextArea 中的突出显示颜色?并且,更改与突出显示位置相对应的文本开头

    问题 1 通过使用默认荧光笔 我可以使聚焦线变为蓝色 现在我想把它改成其他颜色 有谁知道如何更改这个参数 解决了 问题 2 pos 是我想要突出显示的子字符串的开始索引 我使用 setCaretPosition pos 更新显示内容 但它始
  • 在Python中使用继承

    这是我的作业 我之前在网站上看到过它 但看起来它尚未解决 并且我收到的错误消息与之前提出该问题的人不同 问题的第一部分是定义从 Employee 继承的子类 Worker 并包含一个引用另一个员工 该员工的经理 的属性 您应该定义一个方法
  • JMeter:如何知道为什么 JMeter 中的正则表达式提取器没有提取数据

    我想知道为什么 JMeter 中的正则表达式提取器在参数化后不提取数据 响应消息 内部服务器错误 添加的表达式有 名称 EVENTVALIDATION id EVENTVALIDATION 值 名称 VIEWSTATE id VIEWSTA
  • 将 ASP.NET 应用程序连接到 QuickBooks Online Edition

    我正在尝试创建一个连接到 QuickBooks Online Edition 的 ASP NET 页面 读取几个值并显示结果 到目前为止 我已经下载了 QuickBooks SDK 但我无法找到有关如何创建 asp net 页面以连接到 Q
  • 如何将 IN 与块而不是对象一起使用?

    Rebol 中的 IN 函数查找字段是否在对象中 USAGE IN object word DESCRIPTION Returns the word or block in the object s context IN is a nati
  • 如何检测来电和去电结束状态? iPhone

    我有一个要求 即应用程序应在安装后消失 并且在来电或去电时 在通话后不久应用程序应提示并显示屏幕 安装后如何消失应用程序 如何检测来电和去电 来电和去电结束后如何显示屏幕 最主要的是我是为个人而不是应用商店制作这个 因此 如果您有任何想法
  • SVN如何解决在两个分支上添加文件时的新树冲突

    当合并几个分支 使用 SVN 1 6 1 时 两个分支上都添加了一个文件 然后在这些单独的分支中处理 我遇到了新的树冲突之一 C foo txt gt local obstruction incoming add upon merge 我需
  • 通过替换字符重命名文件并覆盖

    在 Windows XP 上 在文件文件夹中 我需要重命名一些文件 将文件名中的一个字符替换为另一个字符 并覆盖任何已具有该名称的文件 例如 该文件夹包含以下 2 个文件 fileA xml fileb xml 我需要重命名fileA xm
  • 如何设置鼠标位置?

    我需要设置鼠标在屏幕上的位置 在其他一些类似的问题中 建议使用CGDisplayMoveCursorToPoint CGDirectDisplayID display CGPoint point 但我不知道如何获得CGDirectDispl
  • 两个有序可观察量的完全外连接

    假设我们有两个可观察量Observable
  • Javascript - 通过键值从数组中删除对象

    我有一个对象数组 let people Name Bob Age 45 Name Jim Age 45 let person people filter person gt person Name Bob 这会返回 Bob 但我如何删除他呢
  • 根据值将一列转换为多列

    In Python I am wondering if there is a way to transform a one column dataframe from this 进入这个 来源DF In 204 df Out 204 Cou
  • R 在 Lime 上解释 - 存储在“object”和“newdata”中的特征名称不同

    您好 我正在研究在 LIME 模型上使用 R 解释 当我运行这部分时一切都很好 Library library tm library SnowballC library caTools library RWeka library caret
  • 将 localStorage 值获取到 php [重复]

    这个问题在这里已经有答案了 我在 localStorage 中设置了一个变量 我想将它放入 php 中 当php执行时 该值已经在本地存储中设置 但是我应该如何进入php 我尝试过这样的事情 myvar 但这由于某些原因给出了Uncaugh
  • 当传递给函数时,如何强制警告使用错误大小的数组?

    假设您有一个以字符串作为参数的函数 void foo char arg 如果我们确定数组 不要与字符串长度混淆 谢谢 chux 将始终具有一定的大小 假设为 8 那么我们可以这样做 void bar char arg 8 然后这样称呼它 c
  • 聚合物 3 - 谷歌地图

    我想知道如何将 Google 地图包含在 Polymer 3 中 我刚刚从 Polymer 2 升级到 Polymer 3 这是我的示例 不是入门套件的工作基础 import PolymerElement html from polymer
  • 构建 QGIS 时未解析的符号

    我已经能够从这一步取得进展 在 Windows 7 上构建 QGIS 源代码 不工作 我正在尝试使用 Visual Studio 10 Express 构建最新的 QGIS 2 10 1 但在构建 ALL BUILD 时获取这些未解析的符号
  • 我在每个工作表的 VBA 循环中搞砸了什么?

    目前 我必须一次发送多封信件 并且通常只替换单元格中的一两个单词 问题是我需要将这些单词加粗 并且在 150 个工作表上单独使用这个宏会很乏味 我对编码非常陌生 并尝试在线搜索以编辑此代码以循环所有工作表 但我尝试的所有操作似乎只会更改我所