我有一個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以外的代碼替換?
這絕對是Replace函數在子操作中的一種方式。我在即時窗口中嘗試了您的實驗並獲得了相同的結果。但是,爲了測試,我在「myTimeString = Replace(myTimeString,!myFind,!myReplace)」後面添加了以下代碼:「 」myMsg = MsgBox(!myReplace,vbOKOnly) myReplace「消息框返回帶斜線的結果,驗證它是從TABLEFINDREPLACE中提取正確的文本。但「myTimeString」消息框返回一個沒有斜槓的結果。 – user3191441
單步執行代碼時,不要打擾'MsgBox'。您可以將鼠標懸停在變量或字段上,其值將顯示爲工具提示。或者在立即窗口中做些什麼,比如'? !myReplace' ...並且該值將在立即窗口中返回。 – HansUp
如果您將數據庫的副本上傳到文件共享網站,我會查看是否可以弄清楚發生了什麼。我只有32位Access。 – HansUp