2014-01-13 49 views
2

我有一個Microsoft Access 2013數據庫,用於跟蹤時間。數據庫有一個FINDREPLACE表,我用它來存儲某些經常使用的時間輸入文本的快捷方式。該表包含兩個字段myFind和myReplace。例如,myFind中的一個值是「telconf」,myReplace中的相應條目是「與電話會議」。時間輸入表單上有一個按鈕,用於調用通過我的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 

該按鈕調用使用VBA替換功能子,和它運作良好,在大多數情況下。當我想在替換文本中包含斜槓或其他特殊字符時,問題就出現了。例如,我的一個「myFind」值是「emailtofrom」,相應的「myReplace」值是「與/來自的電子郵件通信」。但是,當我運行sub時,「emailtofrom」文本被替換爲「e-mail correspondence tofrom」,而不是斜槓。

據我所知,VBA替換函數將刪除斜槓和其他特殊字符。當Replace函數運行時,我能做些什麼來保存斜線?在我的FINDREPLACE表中以某種方式轉義斜線(我是唯一使用這個數據庫的人,所以我可以在必要時做到這一點)?使用VBA以外的代碼替換?

回答

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鍵一次一行地遍歷它,並檢查每一步的文本值。

+0

這絕對是Replace函數在子操作中的一種方式。我在即時窗口中嘗試了您的實驗並獲得了相同的結果。但是,爲了測試,我在「myTimeString = Replace(myTimeString,!myFind,!myReplace)」後面添加了以下代碼:「 」myMsg = MsgBox(!myReplace,vbOKOnly) myReplace「消息框返回帶斜線的結果,驗證它是從TABLEFINDREPLACE中提取正確的文本。但「myTimeString」消息框返回一個沒有斜槓的結果。 – user3191441

+0

單步執行代碼時,不要打擾'MsgBox'。您可以將鼠標懸停在變量或字段上,其值將顯示爲工具提示。或者在立即窗口中做些什麼,比如'? !myReplace' ...並且該值將在立即窗口中返回。 – HansUp

+0

如果您將數據庫的副本上傳到文件共享網站,我會查看是否可以弄清楚發生了什麼。我只有32位Access。 – HansUp