使用 VBA 识别并删除电子表格中的不间断空格字符

2023-12-13

好吧,我已经创建了(在 StackOverflow 的最佳帮助下)一个用户定义函数,它标识给定单元格内特定的(不可见的)、不可打印的控制字符。然后,UDF 创建一个消息框,告诉用户已找到并删除了哪些字符。

这些函数不会费心去定位 32 个 ASCII 控制字符中的每一个,它只会查找在 Excel 中没有图形表示的字符。

这是当前状态的函数:

     Function findInvisChar(sInput As String) As String
        Dim sSpecialChars As String
        Dim i As Long
        Dim sReplaced As String
        Dim ln As Integer


        sSpecialChars = "" & Chr(1) & Chr(2) & Chr(3) & Chr(4) & Chr(5) & Chr(6) & Chr(7) & Chr(8) & Chr(9) & Chr(10) & Chr(11) & Chr(12) & Chr(13) & Chr(14) & Chr(15) & Chr(16) & Chr(17) & Chr(18) & Chr(19) & Chr(20) & Chr(21) & Chr(22) & Chr(23) & Chr(24) & Chr(25) & Chr(26) & Chr(27) & Chr(28) & Chr(29) & Chr(30) & Chr(31) & Chr(32) 'This is your list of characters to be removed
        'For loop will repeat equal to the length of the sSpecialChars string
        'loop will check each character within sInput to see if it matches any character within the sSpecialChars string
        For i = 1 To Len(sSpecialChars)
            ln = Len(sInput) 'sets the integer variable 'ln' equal to the total length of the input for every iteration of the loop
            sInput = Replace$(sInput, Mid$(sSpecialChars, i, 1), "")
            'If ln <> Len(sInput) Then sReplaced = sReplaced & Mid$(sSpecialChars, i, 1)
            If ln <> Len(sInput) Then sReplaced = sReplaced & IIf(Mid$(sSpecialChars, i, 1) = Chr(10), "<Line Feed>", Mid$(sSpecialChars, i, 1)) & IIf(Mid$(sSpecialChars, i, 1) = Chr(1), "<Start of Heading>", Mid$(sSpecialChars, i, 1)) & IIf(Mid$(sSpecialChars, i, 1) = Chr(9), "<Character Tabulation, Horizontal Tabulation>", Mid$(sSpecialChars, i, 1)) & IIf(Mid$(sSpecialChars, i, 1) = Chr(13), "<Carriage Return>", Mid$(sSpecialChars, i, 1)) & IIf(Mid$(sSpecialChars, i, 1) = Chr(28), "<File Separator>", Mid$(sSpecialChars, i, 1)) & IIf(Mid$(sSpecialChars, i, 1) = Chr(29), "<Group separator>", Mid$(sSpecialChars, i, 1)) & IIf(Mid$(sSpecialChars, i, 1) = Chr(30), "<Record Separator>", Mid$(sSpecialChars, i, 1)) & IIf(Mid$(sSpecialChars, i, 1) = Chr(31), "<Unit Separator>", Mid$(sSpecialChars, i, 1)) & IIf(Mid$(sSpecialChars, i, 1) = ChrW(A0), "<Non-Breaking Space>", Mid$(sSpecialChars, i, 1)) 'Currently will remove all control character but only tell the user about invisible characters which were removed        

Next

        MsgBox sReplaced & "These were removed"
        sInput = UCase(sInput)
        findSpecial = sInput


    End Function 'end of function

我想做的就是让这个函数识别不间断的空格字符。它们的 unicode 值为 U+00A0。这是我创建的代码部分,用于识别不间断空格(如果它确实出现在目标单元格中​​):

IIf(Mid$(sSpecialChars, i, 1) = ChrW(A0), "<Non-Breaking Space>", Mid$(sSpecialChars, i, 1))

我在使用 ChrW() 函数时遇到问题。据我了解,它接受 unicode 字符的十六进制值,在这种情况下,该值将是A0, 如果我没有记错的话。

我在Excel文档中放置了一个不间断的空格来测试该功能,但是当我这样做时,该功能不起作用。消息框只是显示为空白,而不是告诉用户“...这些字符已被删除。

我是否错误地使用了 ChrW() 函数?或者我的代码或测试方法是否存在我可能遗漏的其他问题?


我会回答我自己的问题,这样它就不会在没有答案的情况下徘徊。

问题是我之前没有告诉函数在要删除的字符串变量列表 sSpecialChars 中查找并删除不间断空格。我添加了ChrW(&HA0)到那根弦,现在一切都进展顺利。

感谢 Portland Runner 向我展示了使用 ChrW() 函数的正确方法。

作为参考,我的最终代码如下:

Function findInvisChar(sInput As String) As String
Dim sSpecialChars As String
Dim i As Long
Dim sReplaced As String
Dim ln As Integer


sSpecialChars = "" & Chr(1) & Chr(2) & Chr(3) & Chr(4) & Chr(5) & Chr(6) & Chr(7) & Chr(8) & Chr(9) & Chr(10) & Chr(11) & Chr(12) & Chr(13) & Chr(14) & Chr(15) & Chr(16) & Chr(17) & Chr(18) & Chr(19) & Chr(20) & Chr(21) & Chr(22) & Chr(23) & Chr(24) & Chr(25) & Chr(26) & Chr(27) & Chr(28) & Chr(29) & Chr(30) & Chr(31) & Chr(32) & ChrW(&HA0) 'This is your list of characters to be removed
'For loop will repeat equal to the length of the sSpecialChars string
'loop will check each character within sInput to see if it matches any character within the sSpecialChars string
For i = 1 To Len(sSpecialChars)
    ln = Len(sInput) 'sets the integer variable 'ln' equal to the total length of the input for every iteration of the loop
    sInput = Replace$(sInput, Mid$(sSpecialChars, i, 1), "")
    If ln <> Len(sInput) Then sReplaced = sReplaced & Mid$(sSpecialChars, i, 1)
    If ln <> Len(sInput) Then sReplaced = sReplaced & IIf(Mid$(sSpecialChars, i, 1) = Chr(10), "<Line Feed>", Mid$(sSpecialChars, i, 1)) & IIf(Mid$(sSpecialChars, i, 1) = Chr(1), "<Start of Heading>", Mid$(sSpecialChars, i, 1)) & IIf(Mid$(sSpecialChars, i, 1) = Chr(9), "<Character Tabulation, Horizontal Tabulation>", Mid$(sSpecialChars, i, 1)) & IIf(Mid$(sSpecialChars, i, 1) = Chr(13), "<Carriage Return>", Mid$(sSpecialChars, i, 1)) & IIf(Mid$(sSpecialChars, i, 1) = Chr(28), "<File Separator>", Mid$(sSpecialChars, i, 1)) & IIf(Mid$(sSpecialChars, i, 1) = Chr(29), "<Group separator>", Mid$(sSpecialChars, i, 1)) & IIf(Mid$(sSpecialChars, i, 1) = Chr(30), "<Record Separator>", Mid$(sSpecialChars, i, 1)) & IIf(Mid$(sSpecialChars, i, 1) = Chr(31), "<Unit Separator>", Mid$(sSpecialChars, i, 1)) & IIf(Mid$(sSpecialChars, i, 1) = ChrW(&HA0), "<Non-Breaking Space>", Mid$(sSpecialChars, i, 1)) 'Currently will remove all control character but only tell the user about Bell and Line Feed
Next

MsgBox sReplaced & " These were identified and removed"
findInvisChar = sInput


End Function 'end of function
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 VBA 识别并删除电子表格中的不间断空格字符 的相关文章

  • 无法使用 Excel JavaScript API 设置 NumberFormat

    我正在使用 Excel Javascript API 在搜索文档后 仍然找不到我想要实现的解决方案 因此 我想将所有内容设置为数字格式 文本 这样 Excel 的自动格式设置就不会与任何单元格的内容混淆 不会删除前导零或更改日期格式 文档建
  • 在 Django(Python) 中向用户提供 Excel(xlsx) 文件下载

    我正在尝试使用 Django 创建和提供 Excel 文件 我有一个 jar 文件 它获取参数并根据参数生成 excel 文件 并且它可以正常工作 但是 当我尝试获取生成的文件并将其提供给用户下载时 文件损坏了 它的大小为 0kb 这是我用
  • alasql 需要已包含的 xlsx

    我正在尝试使用将数据导出到 Excel 工作表alasql and xlsx 我已遵循此处的所有准则 https github com agershun alasql wiki Xlsx https github com agershun
  • 关闭工作簿时删除范围,xls vba

    我想要范围 Range A2 G z 关闭工作簿时删除 有人可以帮我处理代码吗 谢谢 凯 这就是我尝试过的 Option Explicit Sub Makro1 insert clipboard Workbooks Pfl SchutzSt
  • Excel 中使用通配符 {*} 进行 Vlookup

    我有下表 现在 我想检查主题是否具有数据中存在的任何文本 col F I used VLOOKUP A2 F F 1 0 但它正在给予 N A Try 公式为B2 SUM COUNTIF A2 F 2 F 3 gt 0 Edit SUM C
  • 二维数组作为字典的项目

    我想用一个项目的几个属性填充字典 例子 我正在考虑拥有Item 1 and Item 2 as Dictionary键与array这将保留其属性 我需要能够单独访问项目的每个属性 因此将它们连接为一个字符串不是一种选择 我正在考虑类似下面的
  • Excel VBA 用户窗体 - 当发生变化时执行 Sub

    我有一个包含很多文本框的用户表单 当这些文本框的值发生变化时 我需要通过调用子例程 AutoCalc 根据文本框值重新计算最终结果值 我有大约 25 个框 我不想向每个调用上述子例程的文本框单独添加 Change 事件 当某些值发生变化时调
  • 导入到 SQL Server 时忽略 Excel 文件中的列

    我有多个具有相同格式的 Excel 文件 我需要将它们导入 SQL Server 我当前遇到的问题是 有两个文本列我需要完全忽略 因为它们是自由文本 并且某些行的字符长度超出了服务器允许我导入的长度 这会导致截断错误 因为我的分析不需要这些
  • VBA全局类变量

    我的障碍是试图让多个子程序识别类变量 当我尝试全局声明它们时 出现编译错误 无效的外部过程 然后 当我运行公共函数或子函数来声明变量时 它们在其他子函数中保持未定义状态 我希望多个子程序能够识别变量 因为它们的值应该通过用户窗体进行更改 然
  • 打开 Excel 工作簿时自动运行 VBA 代码

    我有 VBA 代码 我想在打开 Excel 工作簿时运行 我尝试在代码应该运行的工作表中创建一个公共过程 Public Sub Workbook Open Some code here End Sub 工作簿打开时它不会运行 它应该在其中一
  • 当存储在集合中时,如何更改类属性的值

    我想将一个类存储在集合中 并且能够更改该类的属性 而不必删除集合项并再次将其添加回来 我的研究表明 如果不进行删除 替换操作 则无法更改项目本身 但是项目的属性又如何呢 下面的代码展示了如何执行此操作 当您运行宏时 调试窗口将显示存储对象的
  • 如何获取 Word 应用程序的 Hwnd/进程 ID,并将其设置为前台窗口

    我希望我的 Word 应用程序在自动化完成后进入前台 Excel 中的等效项很简单 Excel Application 对象有一个 Hwnd 属性 您可以将其与 Windows API 结合使用 SetForegroundWindow In
  • excel使用单元格引用作为逻辑运算符并查找值

    我有一个表来查找这样的值 logical test points lt 0 1 lt 10 2 lt 20 4 gt 20 5 如果我的单元格 例如 A1 如果我的单元格 如果我的单元格 gt 20 则结果为 5 我可以为此使用多个 if
  • Excel,多个 IF AND 更高效的公式

    我正在制作一个电子表格 如下所示 Index Diff Exc Sym Sec Result Criteria Met 3 42 2 07 0 86 0 92 1 83 1 95 0 38 2 93 0 87 0 23 2 01 0 09
  • 在单元格更改时循环遍历一系列单元格,以将序列中的下一个数字显示为单元格的新值

    我了解如何循环范围 For Each cell In Range A1 A5 If condition Then End If Next 我知道 OnChange 事件 Private Sub Worksheet Change ByVal
  • Excel,循环遍历 XLSM 文件并将行复制到另一个工作表

    我现在遇到的此代码的主要问题是处理我打开的 xlsm 文件的错误 我对这些文件的 VB 代码没有编辑权限 如果 vb 出错 有没有办法跳过文件 我有一个包含大约 99 个 xlsm 文件的文件夹 我希望循环遍历每个文件并复制每个工作簿中的第
  • VB FFT - 难以理解结果与频率的关系

    试图理解我正在使用的 fft 快速傅里叶变换 例程 窃取 回收 输入是 512 个数据点的数组 它们是样本波形 测试数据生成到该数组中 fft 将该数组变换到频域 尝试理解频率 周期 采样率和 fft 数组中位置之间的关系 我用例子来说明
  • 如何锁定特定单元格但允许过滤和排序

    我使用以下代码来锁定某些单元格的内容 Sub LockCell ws As Worksheet strCellRng As String With ws Unprotect Cells Locked False Range strCellR
  • 如何根据文本框值过滤列表框值

    我在用户窗体上有一个文本框和一个列表框 我想根据我在文本框中输入的值过滤列表框中的值 名为 TMP 的工作表具有值 我根据文本框更改事件对其进行过滤 但在将该值添加到列表框中时它 会自动退出 Private Sub Textbox1 Cha
  • VBA 写入文件时对数值进行四舍五入 - 如何防止?

    在下面的代码中 我在确保文件编写器不会将我的数字四舍五入到一定的小数位数时遇到问题 我需要使用变体 因为有时该值是字符串 有时它是数字 我怎样才能强制它准确地写出变量是什么 例如 下面的代码可能显示 0 00038 我想显示确切的值 Dim

随机推荐

  • 如何在 Java 6 中使用为 Java 7 编译的库?

    我正在开发一个 Java 应用程序 我需要使用一个名为myBeans jar This myBeans jar包含许多类文件 这些文件是用jdk 1 7 我没有这些类文件的源代码 我的整个应用程序正在使用jdk 1 6 我无法将其编译器更改
  • SLComposeViewController 有屏幕截图但没有图像附件

    我注意到 Mobile Safari 的 Twitter 和 Facebook 共享添加了当前页面的屏幕截图 但并未实际共享它 例如 我试图通过 SLComposeViewController 复制此内容 但是调用添加图片 实际上将 UII
  • 如何限制 Open JDK 11 上的非堆大小

    我们正在 AWS 中运行基于 openjdk 11 slim 的 docker 容器 我们通常使用两种实例类型 一个有 1G 另一个有 2G 可用内存 在 1G 实例上 我开始使用这些参数来限制堆大小 XX MaxRAM 1g XX Max
  • Angular2 - 将 ngFor item 作为参数传递到管道中?

    我尝试将 ngFor 项目作为参数传递到管道中 但收到错误 异常 调用节点模块失败并出现错误 错误 模板 解析错误 TypeError 无法读取属性 toUpperCase undefined name ng container 错误 gt
  • 生成自定义字母数字序列

    我正在尝试生成自定义字母数字序列 顺序如下 AA0 AA9 AB0 AB9 AC0 AC9 等等 简而言之 有3个地方需要填补 On the first place the values can go from A to Z On the
  • Python如何延迟子弹射击

    预先感谢您抽出时间 如果我用空格键发射子弹 则会创建一串子弹 如果我在 if keys pygame K SPACE 中使用 time sleep 设置延迟 它也会将循环冻结设定的秒数 我怎样才能做到一次只发射一颗子弹 这是我的游戏循环的副
  • 以另一个用户身份运行 jenkins 作业

    我使用指南安装了 jenkins 该指南在服务器中创建了一个 jenkins 用户 并且显然在其下运行了 jenkins 服务器 我在服务器上的所有设置 虚拟环境 python 包安装 都是针对不同的用户 ci user 的 有什么办法让我
  • 什么是 WPF 预览事件?

    我一直在寻找事件 Preview 的描述 就像每个元素都有事件 KeyDown 和 PreviewKeyDown 一样 有什么区别 不是一个是附加事件一个不是 真正的约定的区别和编程方式的区别 在任何从 Control 派生的类中 您都可以
  • 当映射到相同类型时,Scala 的 map() 的行为是否应该不同?

    在Scala Collections框架中 我认为使用时存在一些违反直觉的行为map 我们可以区分 不可变 集合的两种转换 那些其实现调用newBuilder重新创建结果集合 以及那些经历隐式CanBuildFrom获得建造者 第一类包含所
  • 覆盖默认的 Android 消息应用程序

    我想覆盖默认的 Android 消息应用程序 如果我收到短信或彩信 我想将其发送到电子邮件 但我不希望在电话上收到任何通知 所以基本上我想替换默认的消息应用程序 如何使我的应用程序成为接收短信 的默认应用程序 多谢 这正是我所需要的 但我还
  • 如何在 SQL 中创建临时表以在多个 ADF 活动中使用?

    我需要在执行 Azure 数据工厂管道时在 SQL Server 中创建全局临时表 该表将在多项活动中使用 我已经尝试了几种方法 包括一种使用针对以下目标的存储过程活动sys sp executesqlSP 和CREATE TABLE语句作
  • 如何使用 AVCapturePhotoOutput

    我一直致力于使用自定义相机 最近我升级到 Xcode 8 beta 以及 Swift 3 我最初有这个 var stillImageOutput AVCaptureStillImageOutput 但是 我现在收到警告 AVCaptureS
  • 如何在不禁用 WinForms TextBox 的情况下使文本不可选择?

    是否可以在不禁用 TextBox 的情况下使 TextBox 中的文本不可选择 它是一个 RichTextBox 我需要它的格式设置和选择功能 我无法禁用它 因为我想处理 MouseMove 和 MouseDown 事件 到目前为止 我已经
  • 对实体数组进行迭代,并根据“其他键”匹配的值获取某个键的值

    我有一个实体类数组 例如 SubmittedAnswer 它的 JSON 格式如下所示 submittedAnswers submittedQuestionId C7B3C4BE CC3C 438F A118 E798884A5FE0 se
  • Strapi 在用户注册时返回错误代码 400

    每次我尝试注册测试用户时 Strapi 用户注册都会返回错误 400 Bad Request 但用户确实是在 Users 集合中创建的 我使用的是标准的 Strapi 电子邮件插件 不是发送网格插件 每次我注册用户时 该插件不会发送电子邮件
  • 如何在 Pandas 中绘制条形堆栈?

    目标是使用 Pandas 内置绘图模块绘制如下所示堆叠的条形图 然而 我找不到任何试图实现类似目标的类似例子 我正在工作的示例代码如下 import pandas as pd import matplotlib import matplot
  • 语法错误:JSON 中出现意外的标记

    我正在使用 http get 执行 GET 请求 响应采用 JSON 格式 但某些字符采用 HTML 编码 示例如下 编码为 quot quot description quot quot invalid quot quot errorCo
  • iCloud 会同步所有应用程序的 Document 文件夹中的文件吗?

    我有一个关于 iCloud 的问题 希望您能帮助我 我已阅读iCloud 文档好几次了 我从该文档中得到的是 iCloud 不会将应用程序的文档文件夹更新到 iCloud 服务器 除非该应用程序有配置的 iCloud 权利 但是 我总是看到
  • C 错误“可变大小的对象可能未初始化”[重复]

    这个问题在这里已经有答案了 可能的重复 C 编译错误 可变大小的对象可能未初始化 我遇到了一个问题 因为我的编译器仍然给我一个错误 可变大小的对象可能未初始化 我的代码有什么问题吗 int x y n i printf give me th
  • 使用 VBA 识别并删除电子表格中的不间断空格字符

    好吧 我已经创建了 在 StackOverflow 的最佳帮助下 一个用户定义函数 它标识给定单元格内特定的 不可见的 不可打印的控制字符 然后 UDF 创建一个消息框 告诉用户已找到并删除了哪些字符 这些函数不会费心去定位 32 个 AS