VB应用程序中实现“查找和替换”功能

VBA学习笔记7:查找包含某内容的单元格 阅读详情
一、前言

  尽管Visual Basic并不是我最喜欢的开发工具,但我喜欢它简单而又丰富的库集。每当开发一个需要处理大量文本数据的应用程序时,需要具有拼写错误纠正功能,例如,微软的Word程序,当运行"拼写检查"时,将提供给你一个改正错误的机会(尽管是建议),它同时也提供了"查找替换"工具,用以进行用户定义的单词替换。这篇文章我将解释如何在VB应用程序中实现"查找替换"功能。

  二、前提条件

  在解释代码的时候,我假定读者朋友们已经有使用Visual Basic的经验,熟悉Visual Studio开发环境中各种内置的控件及库函数(尽管我使用的不多)。我已经尝试着尽可能地简化程序代码,用不了多久你就可以明白程序的逻辑。如果想对一些库函数(如参数,语法)进一步详细地理解,可以参阅MSDN。图一是程序运行后的效果图:


图一、程序实现"查找替换"功能时的效果图

  三、基础工作

  首先创建一个标准的EXE类型的VB工程,将默认窗体更名为frmMainForm ,在默认窗体上增添一个菜单,具体设置如下(符号"&"用于加速键,单词mnu后的名字用来说明菜单项的名字(在代码中使用)):

&Edit
...&Find and Replace mnuFindandreplace
E&xit mnuExit

  向默认窗体添加一个TextBox控件,命名为txtClientArea。使用鼠标调整控件位置和尺寸,使它覆盖窗体的整个客户区,在属性窗口将这个TextBox控件的 MultiLine属性设置为"True"。

  使用Project > Add Form菜单向工程中添加另外一个窗体,将这个窗体命名为"frmFindReplace",并在属性窗口中将它的BorderStyle属性设置为"4 - FixedToolWindow"。现在,添加两个TextBox控件,并分别命名为"txtSearchTerm"和"txtReplaceWithString"。添加一个复选框,命名为chkCaseSense。最后,添加一个命令按钮控件,命名为"cmdReplace"。

  在frmMainForm窗体中添加如下代码:

Private Sub mnuExit_Click()
 End
End Sub

Private Sub mnuFindandreplace_Click()
 frmFindReplace.FindnReplace txtClientArea
End Sub

  从上面代码中可以非常明显地看出, 当点击Exit菜单时,我们想终结应用程序,当点击"Find and Replace"菜单时,想通过共用接口frmFindReplace及FindnReplace()方法来激活frmFindReplace窗体。这个公用的接口使查找算法具有普遍性,使用这个接口时,需要提供一个TextBox作为参数(在这里面,搜寻将被执行)。通过使用你自己的TextBox的名字来代替txtClientArea的名字,可以在多个文本框内执行"查找替换"功能,而不用更改代码。"查找和替换"的实现代码主要是在frmFindReplace窗体内,这个模块的代码如下:

' This variable is used for making the algorithm generic.
Dim txtClient As TextBox

' This method is the public interface to SnR functionality.

Public Sub FindnReplace(ByRef Tb As TextBox)
 Set txtClient = Tb
 Me.Show , txtClient.Parent
End Sub

Private Sub cmdReplace_Click()
 Dim CaseSense As Integer
 Dim SourceText As String
 Dim SourceTextCopy As String
 Dim Cnt As Integer

 ' Check for the case sensitivity options
 If (chkCaseSense.Value = vbChecked) Then
  CaseSense = 0
 Else
  CaseSense = 1
 End If

 ' One contains the original text and another contains replaced
 ' (updated) one.
 ' Used to check whether a replacement was done or not.
 SourceText = txtClient.Text
 SourceTextCopy = SourceText

 If Len(SourceText) = 0 Then
  Exit Sub
 End If

 On Error GoTo ErrHandler
 Dim SearchTermLen As Integer
 Dim FndPos As Integer

 SearchTermLen = Len(txtSearchTerm.Text)
 ' Search from the begining of the document.
 Cnt = 1

 ' This is endless loop (terminated on a condition checked inside
 ' the loop body).
 While (1)

 FndPos = InStr(Cnt, SourceText, txtSearchTerm.Text, CaseSense)
 
 ' When a match is found, replace it appropriately.
 If (FndPos > 0) Then
  SourceText = ReplaceFun(SourceText, FndPos, Len(txtSearchTerm.Text), txtReplaceWithString.Text)
  Cnt = FndPos + SearchTermLen
 Else
  Cnt = Cnt + 1
 End If

 ' Whether a replacement was done at all or not
 If (Cnt >= Len(SourceText)) Then
  txtClient.Text = SourceText
  If (SourceTextCopy <> SourceText) Then
   MsgBox "Finished replacing all occurrences.", vbInformation + vbOKOnly, "Replaced All"
  Else
   MsgBox "No matching strings found. No text replaced.", vbInformation + vbOKOnly, "No Replacement"
  End If
  Unload Me
  Exit Sub
 End If
 ' Else Restart from henceforth
 Wend
 Exit Sub

ErrHandler:
 Response = MsgBox("An error ocurred while searching. Inform the developer with details.", _
vbExclamation + vbOKOnly, "Error Searching")
End Sub

Private Sub Form_Load()
 ' Default SearchTerm must be the one selected by the user in
 ' MainForm
 If Len(txtClient.SelText) <> 0 Then
  txtSearchTerm.Text = txtClient.SelText
 End If
End Sub

Function ReplaceFun(Source As String, FromPos As Integer, _
Length As Integer, StringTBReplaced _
As String) As String
 ' Replaces a source string with new one appropriately
 Dim ResultStr As String

 ResultStr = Left(Source, FromPos - 1)
 ResultStr = ResultStr & StringTBReplaced
 ResultStr = ResultStr & Right(Source, Len(Source) - FromPos - Length + 1)

 ReplaceFun = ResultStr
End Function

Private Sub txtReplaceWithString_Change()
 Call EnableDisableReplaceButton
End Sub

Private Sub txtReplaceWithString_GotFocus()
 ' Select the contents of the textbox
 If Len(txtReplaceWithString.Text) <> 0 Then
  txtReplaceWithString.SelStart = 0
  txtReplaceWithString.SelLength = Len(txtReplaceWithString.Text)
 End If
End Sub

Private Sub txtSearchTerm_Change()
 Call EnableDisableReplaceButton
End Sub

Private Sub EnableDisableReplaceButton()
 If Len(txtSearchTerm.Text) <> 0 _
  And Len(txtReplaceWithString.Text) <> 0 Then
  cmdReplace.Enabled = True
 Else
  cmdReplace.Enabled = False
 End If
End Sub

Private Sub txtSearchTerm_GotFocus()
 ' Select the contents of textbox
 If Len(txtSearchTerm.Text) <> 0 Then
  txtSearchTerm.SelStart = 0
  txtSearchTerm.SelLength = Len(txtSearchTerm.Text)
 End If
End Sub

  四、代码说明

  公用接口SearchnReplace的"查找替换"算法带有普遍性,使用这种方法,"查找替换"功能可以在任何应用程序中实现,而不用更改frmFindReplace的代码。只是在调用公用接口的地方需要做一些小的改动。

  "查找和替换"代码在cmdReplace_Click()过程与ReplaceFun() 函数下,让我们从cmdReplace_Click()过程开始。

  首先,变量CaseSense用于跟踪用户的选择,是否是大小写敏感,如果用户选择大小写敏感的话,它的值设置为0,否则,设置为1。变量SourceText和SourceTextCopy用于保存frmMainForm窗体中 txtClientArea的内容(或者是用户在主窗体中为TextBox提供的内容,对于本程序来说,它就是txtClientArea),两个变量保存同样的内容将在下面进行解释(一个是临时变量)。变量Cnt用来跟踪文档的结束,当重新从文档开始处进行"查找替换"时它将非常有用。这个变量含蓄地说明了当前光标的位置,下次的"查找替换"将从这个位置开始。

  主要的算法在while循环内,只要替换或是源TextBox被扫描时,这个循环都将被激活。

  第二步,我使用了InStr()库函数,它将从第一个参数规定的位置处开始搜索,如果在第二个参数字符串中发现与第三个字符串相匹配的子串,将返回该子串的位置。最后一个参数是大小写敏感选项。

  InStr()函数的返回值传递给FndPos,如果在源文档中发现了所要查找的字符串,这个值将大于0,否则将返回一个0值。在紧接着的IF语句中,首先替换SourceText变量,然后是通过FndPos + SearchTermLen语句修改Cnt变量,这是必须的, 因为下一次的"查找和替换"要从新的位置开始。另一方面,在Else部分,Cnt变量加一,说名查找和替换要从下一个字符开始。紧接着的几个语句用来通知用户查找结果,它们非常容易理解,也非常容易实现。可以直接跳过它们。

  最后,ReplaceFun()函数进行实际的替换工作,它从源字符串的左边开始,挑选出所有的字符,直到发现所搜索的字符串位置处为止。紧接着,StringTBReplace被添加到结果的后面,它将代替所匹配的源字符串。最后,所有的保留的源字符(排除所要更换的子字符串)被添加到这个结果中去,并作为结果返回。 五、结论

  有很多方法来实现这一功能,但我认为我所使用的方法是最简单也是最直接的,通过例子程序,你可以在应用程序中实现自己的"查找替换"功能。 
VBA中Replace(替换)函数和Split(拆分)函数 可以根据具体的需求和字符串操作来灵活使用这两个函数。 阅读详情

相关推荐

vb6 对文件的写入、替换、删除和插入某行操作

最近用vb在写一个软件,用到了对文件的写入、替换、删除操作,对网友的代码进行了修改,写入模块和函数,能够实现上述功能。 有5个文本框,以前四个文本框的内容为判别条件,即:如果保存的文件中某行前四项(以空格为区分)与文本框中的Text1、Text2、Text3、Text4相同,点击“替换某行”按钮可以将Text1-Text5中的内容替换到原文件中。点击“删除某行”则删除文件中与Text1-

ajunajun的博客 7629

VB应用程序中实现查找和替换功能

 一?前言  尽管Visual Basic并不是我最喜欢的开发工具,但我喜欢它简单而又丰富的库集。每当开发一个需要处理大量文本数据的应用程序时,需要具有拼写错误纠正功能,例如,微软的Word程序,当运行"拼写检查"时,将提供给你一个改正错误的机会(尽管是建议),它同时也提供了"查找替换"工具,用以进行用户定义的单词替换。这篇文章我将解释如何在VB应用程序中实现"查找替换"功能。    二?

PZHan的专栏 5422

VB字符串查找与替换功能实践指南(1KB)

htmltable {th, td {th {pre {简介:字符串处理是编程中的基础技能,尤其在VB中实现字符串查找和替换功能对文本处理非常重要。本文介绍了使用VB中的InStr()和Replace()函数进行查找与替换的基础用法,并提供了如何处理更复杂情况的方法,如大小写敏感查找、全局替换等。此外,还探讨了使用InStrRev()函数进行逆向查找,并通过VB代码示例,如,深化对这些功能的理解。

weixin_42601134的博客 1122

vb 查找word中的字符 单元格坐标_Word天,原来查找和替换功能这么强大

你知道吗?在实际工作中Word查找和替换强大到让你怀疑人生,本期Word妹与大家分享一个在Excel难以解决问题,在Word中却可以轻松搞定的案例。如下图所示,如何将数据中含有汉字的内容删除,只保留非汉字部分或者直接提取汉字部分呢?先来看看在Excel中的解决办法:非汉字的提取:在单元格中输入公式=IFERROR(SUBSTITUTE(A1,MID(A1,MIN(IF(II,50,ROW($1:$...

weixin_39956110的博客 594

VB环境下实现字符串查找与替换的示例项目

本文还有配套的精品资源,点击获取 简介:字符串查找和替换是编程中关键的基础操作,广泛用于文本处理等多个领域。本项目通过VB应用程序,展示了如何在用户界面中输入字符串,并执行查找及替换操作。项目包含四个文件:窗体文件 Form1.frm 、资源文件 Form1.frx 、项目文件 Project1.vbp 和工作区文件 Pro...

weixin_42284380的博客 964

VB查找与替换TextBox功能实践教程[FindTextBox.rar]

在这一章节中,我们将探究如何在TextBox组件中实现查找功能。查找是文本编辑器中不可或缺的功能,它使得用户能够快速定位到特定的文字或字符串。我们将从基础的查找逻辑开始,逐步深入到高级的查找选项与功能扩展。在本章中,我们介绍了查找功能的基本实现方式。通过实际的代码示例,我们可以看到其实现并不复杂。后续章节将详细介绍查找功能的高级选项和优化方法,以及替换功能的实现,以满足更加复杂的用户需求。

weixin_31961675的博客 631

使用 Visual Basic 通过 32 位 地址访问内存(中英对照)

使用 Visual Basic 通过 32 位 地址访问内存2001年7月6日马尼拉,菲律宾作者:Chris Vega [gwapo@models.com]  当我们谈论“真的”指针和内存地址,我们大都会想到 Visual Basic 的局限性,比如,由于 VB 没有作为变量声明的指针数据类型,它不能直接访问内存。当某些场合需要一个变量的“地址”而不是它的值的时候,这一点混淆就显得

PZHan的专栏 2177

VB6.0实现RTF文件打开与查找替换功能的完整源码项目

简介:在VB6.0环境中,开发程序以打开RTF(Rich Text Format)文件并执行文本查找与替换操作,广泛应用于文档自动化和文本处理场景。RTF支持跨平台富文本格式,通过VB6.0的MSWord对象模型或TextStream对象可实现文件读写与编辑。本文介绍如何使用VB6.0调用Word COM组件进行高效查找替换,并涵盖RTF格式解析、FileSystemObject操作、错误处理机制等关键技术。项目包含完整可运行源代码,适用于需要批量处理富文本文档的办公自动化需求。

weixin_30978239的博客 682

VB打印word文件,vb查找替换word文件

   上篇文章提到VB中加入WORD组件并对其进行操作,本文单独对VB打印WORD文件与查找替换功能 进行讨论.  在打印中,很多时候会用到word标准模版,希望对模版进行更改后将其打印,很多网友提出用书签,在书签前进行插入需要内容。 但我认为进行查找替换似乎更为方便些。  由于打印功能简单的不得了,因此先说打印功能,代码如下:dim filename as string         

jomakzhao的专栏 5494

VB 查找函数Find

VB 查找函数Find VB 查找函数Find VB 查找函数Find

VB查找替换文件中的指定字符

内容索引:VB源码,文件操作,查找,替换  VB查找替换文件中的指定字符,浏览你要替换字符的文件,这里主要是文本文件,输入需要查找的字符,设置是否是大小写敏感,程序会帮你查找到你想要的。注意,这个程序实际上是比较简单的,仅供初学VB的朋友参考一下。

vb 字符串替换_学习VB编程第69天 字符串查找与替换

今天学习了VB提升教程4期,学习的主要内容是字符串查找与替换。零基础学VB课程已经结束,但是感觉还是没有太大进步,而且目前也没有确定后续该学什么语言,干脆就继续再学一段时间VB吧反正计划的三个月时间还没有学满呢。1.查找思路:通过字符串的比较来确定是否属于查找的内容,确定后通过设置焦点和光标开始位置,以及查找字符的长度达到定位选择的效果。2补充知识:Instr(参数1,参数2,参数3,参数4)参数...

weixin_39988164的博客 2702

GB28181协议心跳机制:从标准解读到代码实现的保活策略

本文深入解析GB28181协议中的心跳机制,从标准解读到代码实现,详细介绍了保活策略的核心价值和底层逻辑。通过实战案例和技术要点,帮助开发者优化心跳间隔、超时次数等参数配置,提升安防监控系统的可靠性和性能。文章还提供了代码实现的防坑指南和特殊场景处理建议,适用于各类网络环境下的设备在线状态管理。

weixin_29611239的博客 106

用VB实现多文件查找与替换功能

文摘:  文件中特定字符串的寻找与替换是一种极其常见的操作,在Win95中,可以很容易地使用"写字板"、"Word"等软件的"替换"功能在某个文件中完成寻找替换的工作,而如果要在多个文件中进行寻找替换,则需费一翻精力。针对这一问题,笔者用Visual Basic 5.0编制了一个小程序,使用它可以快速地完成在多个文件中查找与替换的任务。 正文:  众所周知,文本文件中特定字符串的寻找与...

aou5782的博客 671

【ShaderToy】开篇

写在前面呜呼,好久没有写博客了,好惭愧。题外话,感觉越大就越想家,希望可以一直和家人在一起,哪怕只是坐在一起不说话也觉得很温暖,一想到要分开眼睛就开始酸,哎。开学还是爬上来老实更新博客学习吧~今天爬上来一看,发现优快云的博客编辑终于更新了!进步总是好的,以前的编辑器实在很捉急。使用这种标记语言的确方便了很多,但好像颜色字体没法设置?程序员果然对美观没什么追求。ShaderToy如果你还没听过Sha

candycat 8万+

Win11笔记本BIOS设置避坑大全:Secure Boot、RST、UEFI引导,一次讲清

本文详细解析了Win11笔记本BIOS设置中的关键问题,包括Secure Boot、Intel RST和UEFI引导的配置方法,帮助用户避开双系统安装中的常见陷阱。特别针对不同品牌笔记本的BIOS界面差异,提供了实用的操作指南和优化建议,确保系统兼容性和启动效率。

weixin_29251131的博客 689

vb控制word的类模块,查找、替换Word文档内容

  在VB6.0中,操作word,使用它强大的查找、替换、删除、复制、翦切功能。还可以把特定字符替换成图片。有了它你就可以使用数据库中的内容或图片文件替换word文件中的特定字符。  只要把下列内容复制到写字板中,另存为SetWord.cls文件,然后在把它添加到工程中,就可以使用了。VERSION 1.0 CLASSBEGIN  MultiUse = -1  True  Persist

e群网络工作室 4410

PADS VX2.7学习记录06-PADS Router软件功能操作

PADS VX2.7学习记录06-PADS Router软件功能操作

qq_31444421的博客 7861

VB查找并替换WORD文档中的字符串

基本要求:需安装WORD Function WordReplace(FileName As String, SearchString As String, ReplaceString As String, Optional SaveFile As String = "", Optional MatchCase As Boolean = False) As Integer On Error Go

小小蚂蚱 2435

Fluent求解器——湍流参数的设置

Fluent湍流参数的介绍和设置。

Ronko_G的博客 4万+

手把手教你学pcie--性能调优 - 中断机制优化

在PCIe系统开发中,中断机制是主机与设备之间通信的重要组成部分。然而,不当的中断设计可能导致CPU负载过高、延迟增加等问题。本文将详细介绍如何优化PCIe系统的中断机制,提升系统性能和响应速度。传统中断(INTx):通过专用引脚发送中断信号,可能引发冲突且效率较低。消息中断(MSI):通过内存写操作发送中断消息,避免冲突并提高效率。扩展消息中断(MSI-X):基于MSI改进,支持更多独立中断向量,适用于复杂场景。选择合适的中断模式对系统性能至关重要。

MHD0815的博客 291

java实现word文档中查找文本并替换文本,图片,表格

冰蓝科技 e-iceblue | 您的办公文档开发技术专家 | C#/VB.Net Excel, Word, PowerPoint, PDF, Barcode 组件。

luolearn的博客 2871

20、Citrix 云桌面常见VDA注册问题汇总

本文总结了与 VDA 中出现的 VDA 会话断开连接、注册、会话卡住以及挂起/崩溃相关的主要支持文章。

我在Citrix、VMware、Veeam、微软和NVIDIA等领域拥有丰富经验的专业人士,专注于设计和维护虚拟化基础设施、实施备份与灾难恢复策略,致力于优化企业的IT环境。 944

查找字符位置_学习VB编程第69天 字符串查找与替换

今天学习了VB提升教程4期,学习的主要内容是字符串查找与替换。零基础学VB课程已经结束,但是感觉还是没有太大进步,而且目前也没有确定后续该学什么语言,干脆就继续再学一段时间VB吧反正计划的三个月时间还没有学满呢。1.查找思路:通过字符串的比较来确定是否属于查找的内容,确定后通过设置焦点和光标开始位置,以及查找字符的长度达到定位选择的效果。2补充知识:Instr(参数1,参数2,参数3,参数4)参数...

weixin_29331015的博客 1772

华为OD机试真题 新系统2026-04-01 C语言 实现【勇攀数字高峰】

请你在给定的数字地形图中寻找登山路径,数字代表当前位置的海拔高度,要求从最低海拔出发,不断攀登,最终到达最高山峰。你需要寻找所有满足条件的登山路径。地图已经保证最低海拔和最高山峰都只有一个。

MISAYAONE的博客 292

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

VB查找替代字符串的函数

' SearchLine is input, SearchFor is what to search for, ReplaceWith is the replacement Function sReplace(SearchLine As String, SearchFor As String, ReplaceWith As String)    Dim vSearchLine As St...

miaozk2006的专栏 1109

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

上一篇: VB中用第三方控件打造QQ菜单
下一篇: 在Visual Basic中使用WinSock控件
hexxiaoyou
博客等级 码龄20年 56粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值