Access表单模块代码编辑需求:实现行操作与换行清理
表单模块代码编辑需求与问题
我在开发工具时需要给表单模块执行文本添加、替换和删除操作,标准模块里实现这些功能相对简单,但表单模块的限制更多。
目前我尝试编写一个清理代码的过程,目的是移除超过2个的连续换行。我的尝试中,.DeleteLines方法在表单模块里无法生效;另一个思路是把模块的全部文本读取到字符串变量中,替换所有多余换行后覆盖现有代码,也没能实现。
我需要一个能在表单模块中完成以下操作的函数:
- 删除行
- 替换行
- 插入行
我根据网络资源修改了一个函数,但它在表单模块中偶尔会报错,代码如下:
'function to delete extra line breaks Function fnzzzModuleFindStringOptionalReplace(vrModuleName As String, vrStringToFind As String, Optional vrNewString As Variant, Optional vrDeleteIfFound As Boolean = False, _ Optional vrInsertAfter As Boolean = False, Optional vrFindWholeWord As Boolean = False, Optional vrMatchCase As Boolean = False, Optional vrPatternSearch As Boolean = False) As Boolean Dim vrMdl As Object Dim vrSLine As Long, vrELine As Long, vrSCol As Long, vrECol As Long Dim vrLine As String, vrLineLen As Long, vrBefore As Long, vrAfter As Long Dim vrLeft As String, vrRight As String, vrNewLine As String Set vrMdl = fnzzzResolveModuleOrError(vrModuleName) vrSLine = 1 vrSCol = 1 vrELine = vrMdl.CountOfLines vrECol = 200 If vrMdl.Find(vrStringToFind, vrSLine, vrSCol, vrELine, vrECol, vrFindWholeWord, vrMatchCase, vrPatternSearch) = True Then vrLine = vrMdl.Lines(vrSLine, Abs(vrELine - vrSLine) + 1) vrLineLen = Len(vrLine) vrBefore = vrSCol - 1 vrAfter = vrLineLen - CInt(vrECol - 1) vrLeft = Left$(vrLine, vrBefore) vrRight = Right$(vrLine, vrAfter) If vrDeleteIfFound = True Then vrNewLine = vrLeft & vrRight vrMdl.ReplaceLine vrSLine, vrNewLine ElseIf vrInsertAfter = True And Not IsMissing(vrNewString) Then vrMdl.InsertLines vrSLine + 1, vrNewString ElseIf Not IsMissing(vrNewString) Then vrNewLine = vrLeft & vrNewString & vrRight vrMdl.ReplaceLine vrSLine, vrNewLine End If fnzzzModuleFindStringOptionalReplace = True Else fnzzzModuleFindStringOptionalReplace = False End If Set vrMdl = Nothing End Function
以下是用于删除多余换行的函数:
'function to delete extra line breaks Function fnzzzModuleFixLineBreaks(vrModuleName As String) As Boolean Dim vrMdl As Object Dim vrI As Long Dim vrL1 As String, vrL2 As String, vrL3 As String DoCmd.OpenModule vrModuleName Set vrMdl = Modules(vrModuleName) vrI = 1 Do While vrI <= vrMdl.CountOfLines - 2 vrL1 = Trim(vrMdl.Lines(vrI, 1)) vrL2 = Trim(vrMdl.Lines(vrI + 1, 1)) vrL3 = Trim(vrMdl.Lines(vrI + 2, 1)) If vrL1 = "" And vrL2 = "" And vrL3 = "" Then vrMdl.DeleteLines vrI + 2, 1 Else vrI = vrI + 1 End If Loop fnzzzModuleFixLineBreaks = True End Function
内容的提问来源于stack exchange,提问作者Nata
相关产品推荐
相关产品推荐

