如何在Access中的另一个模块中搜索和替换Access模块中的文本?我在Google上找不到这个。
仅供参考,我想出了如何以编程方式删除模块:
调用DoCmd.DeleteObject(acModule,modBase64)
答案 0 :(得分:2)
我认为你的意思是如何以编程方式执行此操作(否则它只是ctrl-h)。除非在VBE加载项的上下文中进行,否则很少(如果有的话)是一个好主意。自修改代码通常由AV软件标记,虽然访问将让你做它,它不够强大到足以处理它,并且可能导致腐败问题等。此外,如果你自己去修改代码,使您无法使用MDE甚至项目密码。换句话说,您永远无法保护您的代码。如果您通过自修改代码让我们知道您要解决的问题并查看是否可以找到更可靠的解决方案,那可能会更好。
答案 1 :(得分:2)
经过大量搜索,我找到了这段代码:
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'Function to Search for a String in a Code Module. It will return True if it is found and
'False if it is not. It has an optional parameter (NewString) that will allow you to
'replace the found text with the NewString. If NewString is not included in the call
'to the function, the function will only find the string not replace it.
'
'Created by Joe Kendall 02/07/2003
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Public Function SearchOrReplace(ByVal ModuleName As String, ByVal StringToFind As String, _
Optional ByVal NewString, Optional ByVal FindWholeWord = False, _
Optional ByVal MatchCase = False, Optional ByVal PatternSearch = False) As Boolean
Dim mdl As Module
Dim lSLine As Long
Dim lELine As Long
Dim lSCol As Long
Dim lECol As Long
Dim sLine As String
Dim lLineLen As Long
Dim lBefore As Long
Dim lAfter As Long
Dim sLeft As String
Dim sRight As String
Dim sNewLine As String
Set mdl = Modules(ModuleName)
If mdl.Find(StringToFind, lSLine, lSCol, lELine, lECol, FindWholeWord, _
MatchCase, PatternSearch) = True Then
If IsMissing(NewString) = False Then
' Store text of line containing string.
sLine = mdl.Lines(lSLine, Abs(lELine - lSLine) + 1)
' Determine length of line.
lLineLen = Len(sLine)
' Determine number of characters preceding search text.
lBefore = lSCol - 1
' Determine number of characters following search text.
lAfter = lLineLen - CInt(lECol - 1)
' Store characters to left of search text.
sLeft = Left$(sLine, lBefore)
' Store characters to right of search text.
sRight = Right$(sLine, lAfter)
' Construct string with replacement text.
sNewLine = sLeft & NewString & sRight
' Replace original line.
mdl.ReplaceLine lSLine, sNewLine
End If
SearchOrReplace = True
Else
SearchOrReplace = False
End If
Set mdl = Nothing
End Function
答案 2 :(得分:0)
查看Access库的VBA对象浏览器。在Module对象下,您可以搜索Module文本以及进行替换。这是一个简单的例子:
在Module1中
Sub MyFirstSub()
MsgBox "This is a test"
End Sub
在Module2中
Sub ChangeTextSub()
Dim i As Integer
With Application.Modules("Module1")
For i = 1 To .CountOfLines
If InStr(.Lines(i, 1), "This is a Test") > 0 Then
.ReplaceLine i, "Msgbox ""It worked!"""
End If
Next i
End With
End Sub
运行ChangeTextSub后,MyFirstSub应该读取
Sub MyFirstSub()
MsgBox "It worked!"
End Sub
这是一个非常简单的搜索,但希望能让你前进。
答案 3 :(得分:0)
该功能的附加功能(循环遍历所有行)
Public Function ReplaceWithLine(modulename As String, StringToFind As String, NewString As String)
Dim mdl As Module
Set mdl = Modules(modulename)
For x = 0 To mdl.CountOfLines
Call SearchOrReplace(modulename, StringToFind, NewString)
Next x
Set mdl = Nothing
End Function
享受^^