Ms access 替换函数-保留斜杠和其他特殊字符

Ms access 替换函数-保留斜杠和其他特殊字符,ms-access,replace,vba,ms-access-2013,Ms Access,Replace,Vba,Ms Access 2013,我创建了一个Microsoft Access 2013数据库来跟踪时间。数据库有一个FINDREPLACE表,我使用它来存储某些常用时间输入文本的快捷方式。该表包含两个字段myFind和myReplace。例如,myFind中的一个值是“telconf”,myReplace中的相应条目是“电话会议”。时间输入窗体上有一个按钮,它调用一个子对象,该子对象在my FINDREPLACE表中循环,并将时间描述中的所有快捷方式“myFind”文本替换为相应的“myReplace”文本。它工作得很好,避免

我创建了一个Microsoft Access 2013数据库来跟踪时间。数据库有一个FINDREPLACE表,我使用它来存储某些常用时间输入文本的快捷方式。该表包含两个字段myFind和myReplace。例如,myFind中的一个值是“telconf”,myReplace中的相应条目是“电话会议”。时间输入窗体上有一个按钮,它调用一个子对象,该子对象在my FINDREPLACE表中循环,并将时间描述中的所有快捷方式“myFind”文本替换为相应的“myReplace”文本。它工作得很好,避免了我重复输入那些我永远记不起如何拼写的冗长短语或名称

以下是分包商:

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
按钮调用的sub使用VBA替换函数,并且在大多数情况下工作良好。当我想在替换文本中包含斜杠或其他特殊字符时,就会出现问题。例如,我的一个“myFind”值是“emailtofrom”,对应的“myReplace”值是“电子邮件通信到/来自”。但是,当我运行sub时,“emailtofrom”文本被替换为“e-mail通信tofrom”,没有斜杠

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

“我知道VBA替换函数将删除斜杠”

这不是我在VBA中看到的
Replace()
。下面是使用前斜杠和后斜杠的即时窗口示例

?替换(“foo emailtofrom栏”、“emailtofrom”_
“发往/发往的电子邮件”)
foo与酒吧之间的电子邮件通信
? 替换(“foo emailtofrom栏”、“emailtofrom”_
“发送电子邮件至\发送电子邮件至”)
foo电子邮件通信至\来自bar

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

这肯定是sub中替换函数的操作方式。我在即时窗口中尝试了您的实验,得到了相同的结果。但是,为了进行测试,我在“myTimeString=Replace(myTimeString,!myFind,!myReplace)”之后添加了以下代码:
myMsg=MsgBox(!myReplace,vbOKOnly)myMsg=MsgBox(myTimeString,vbOKOnly)
myReplace”消息框返回一个带斜杠的结果,验证它是否从TABLEFINDREPLACE中提取了正确的文本。但是“myTimeString”消息框返回的结果不带斜杠。在单步执行代码时,不要使用
MsgBox
。您可以将鼠标悬停在变量或字段上,其值将显示为工具提示。或者在即时窗口中执行一些操作,如
!myReplace
。。。如果你把数据库的副本上传到一个文件共享站点,我会看看是否能弄清楚到底发生了什么。我只有32位访问权限,真是罪过。我的“emailtofrom”快捷方式与我在TABLEFINDREPLACE中设置的另一个“emailto”快捷方式冲突。我已经将我的快捷方式“emailtofrom”重命名为“emailtf”,现在当子循环遍历TABLEFINDREPLACE中的所有记录时,它不会被“emailto”覆盖。感谢您不遗余力地提供帮助--您提出要查看上载的数据库,这导致我创建了一个数据库副本并清空了所有表数据,最终实现了我的疏忽。