|
刚刚看了帖子《更改照片名称的问题》,楼主说不知道为啥“Name X As Y”的方式失效了。
研究了一下,让我想起了一个很古老的笑话。
病人去做体检,大夫用他常人难辩的字迹开了张处方,病人把处方揣进袋里,忘了去拿药。有两年的时间,他每天早晨把处方当作铁路通行证出示给检票员;
还用它进了两次电影院,一次棒球场和一次交响音乐会;
用它冒充老板的字条得到一次提升。
一天,这个人把处方弄丢了,他的女儿捡到后,在钢琴上照其演奏,结果获得了进公立音乐学院的机会。 应该是一个国外笑话,但在电子处方单普及之前,中医处方笺也是龙飞凤舞,不遑多让的。甚至还有一些奇奇怪怪的写法,比如,我就见过“茯苓”写成“服〇”的。
回到笑话本身,本来它只是一个处方单,但到了检票员那里就成了“铁路通行证”,到了电影院那里,又成了“电影票”,甚至还成了“老板的字条”。为啥会这样?一方面有些人对于字迹问题早已熟视无睹,不去深究。
我们回到问题的本身,一般来说,无法重命名,通常有以下几种情况:
- 找不到文件。
- 文件已经被打开。
- 没有权限。
- 新文件名有特殊字符。
前面3个很容易就排除了。所以极有可能是第4个。于是,我们print一下看看:
果然预判对了:中间含有不可见字符(黄色部分)。接下来就很容易处理了,只保留数字和英文字母即可,改完的代码如下:
- Private Sub 查找相片_Click()
- Dim j As Integer
- Dim js As Long
- Dim rs As ADODB.Recordset
- Set rs = New ADODB.Recordset
- rs.Open "表1", CurrentProject.Connection, adOpenKeyset, adLockPessimistic
- js = rs.RecordCount
- On Error Resume Next '只重命名1次。重命名后,源文件已经不存在,会出现错误。这里忽略掉
- For j = 1 To js
- Name CurrentProject.Path & "" & rs(1) & ".jpg" As CurrentProject.Path & "" & cleanChars(rs(2)) & ".jpg"
- rs.MoveNext
- Next j
-
- rs.Close
- Set rs = Nothing
- MsgBox "done"
- End Sub
- Function cleanChars(ByVal strInput As String) As String
- Dim num As Long
- Dim strOutput As String
- Dim strLetter As String
-
- strOutput = ""
- For num = 1 To Len(strInput)
- strLetter = Mid(strInput, num, 1)
- If (Asc(strLetter) >= 48 And Asc(strLetter) <= 57) _
- Or (Asc(strLetter) >= 65 And Asc(strLetter) <= 90) _
- Or (Asc(strLetter) >= 97 And Asc(strLetter) <= 122) Then
- strOutput = strOutput & strLetter
- End If
- Next
- cleanChars = strOutput
- End Function
复制代码 附件如下:
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|