替换功能 - 保留斜线和其他特殊字符

时间:2014-01-13 19:13:50

标签: ms-access replace access-vba ms-access-2013

我创建了一个Microsoft Access 2013数据库来跟踪时间。数据库有一个FINDREPLACE表,我用它存储某些常用时间条目文本的快捷方式。该表包含两个字段myFind和myReplace。例如,myFind中的一个值是“telconf”,myReplace中的相应条目是“电话会议”。时间输入表单上有一个按钮,它调用循环通过我的FINDREPLACE表的sub,并用相应的“myReplace”文本替换时间描述中的所有快捷方式“myFind”文本。它运作良好,使我不必重复输入相同冗长的短语或名称,我永远不会记住如何拼写。

这是子:

Private Sub myFindReplace(myTime As Integer)
    Dim dbs As DAO.Database
    Dim rs, rs2 As DAO.Recordset
    Dim myMsg, mySQL, myTimeString As String

    If Me.Dirty Then
        myMsg = MsgBox("You must save your record before running FindReplace", vbOKOnly)
        Exit Sub
    End If

    Set dbs = CurrentDb
    mySQL = "SELECT * From TABLEFINDREPLACE"
    Set rs = dbs.OpenRecordset(mySQL, dbOpenSnapshot)

    myTimeString = DLookup("myDESCRIP", "TABLETIME", "ID = " & myTime)

    With rs
        Do Until .EOF
            myTimeString = Replace(myTimeString, !myFind, !myReplace)
            .MoveNext
        Loop
    End With
    rs.Close

    myTimeString = UCase(Left(myTimeString, 1)) & Mid(myTimeString, 2)

    mySQL = "SELECT * FROM TABLETIME WHERE ID = " & myTime
    Set rs2 = dbs.OpenRecordset(mySQL, dbOpenDynaset)
    With rs2
        .Edit
        !myDESCRIP = myTimeString
        .Update
    End With
    rs2.Close
    dbs.Close
    Me.txtMyDESCRIP.Requery

End Sub

按钮调用的子使用VBA替换功能,并且在大多数情况下都能正常工作。当我想在替换文本中包含斜杠或其他特殊字符时,会出现问题。例如,我的“myFind”值之一是“emailtofrom”,相应的“myReplace”值是“与/之间的电子邮件通信”。但是,当我运行sub时,“emailtofrom”文本被替换为“e-mail correspondence tofrom”,没有斜线。

据我所知,VBA替换功能会删除斜杠和其他特殊字符。当Replace函数运行时,我能做些什么来保留斜线吗?在我的FINDREPLACE表中以某种方式转义斜杠(我是唯一使用此数据库的人,所以如果有必要,我可以这样做)?使用VBA以外的代码替换?

1 个答案:

答案 0 :(得分:0)

“我知道VBA替换功能会删除斜杠”

这不是我在VBA Replace()中看到的。以下是使用正斜杠和反斜杠的立即窗口中的示例。

? Replace("foo emailtofrom bar", "emailtofrom", _
"e-mail correspondence to/from")
foo e-mail correspondence to/from bar

? Replace("foo emailtofrom bar", "emailtofrom", _
"e-mail correspondence to\from")
foo e-mail correspondence to\from bar

我认为还有其他事情正在发生,但我无法在您的代码示例中发现问题。设置断点,运行代码,然后使用 F8 键一次一行地执行它,并检查每一步的文本值。

相关问题