Giúp chuyển mã tên file

Liên hệ QC

phantam

Thành viên mới
Tham gia
20/1/07
Bài viết
31
Được thích
21
Xin chào cán bác !
Trước đây tôi dùng bảng mã TCVN3 để đặt tên file trong excel. Bây giờ tôi chuyển sang mã Unicode, các tên file cũ cứ loằng ngoằng không đọc được. Bác nào biết cách chuyển mã tên file (không chuyển mã nội dung file) chỉ dùm tôi với.
Xin cảm ơn nhiều
 
Thực ra vấn đề này có thực hiện được theo các bước sau

- Copy tất cả các file excel vào trong 1 thư mục
- Dùng Application.FileSearch tìm kiếm và trả về tất cả các file xls trong thư mục đó
- lấy thuộc tính FoundFiles để cho ra tên của các file này và gán cho một biến
- Tiến hành chuyển mã biến này và gán ngược trở lại cho tên các file theo thứ tự

Nhưng công việc này chỉ có ích khi có rất nhiều file, còn nếu chỉ có vài file bạn cứ để mã unicode và edit lại tên file là xong

Mình ngày xưa có dùng qua một số phần mềm quả lý tập tin có chức năng đổi tên tập tin, tạo thư mục khá là tiện dụng bạn thử vào echip tìm thử.

Chúc thành công!
 
Đây là đoạn mã lệnh cho bạn duyệt thư mục và đổi tên file hàng loạt trong thư mục đó từ mã TCVN3 sang Unicode. Bạn chỉ cần copy vào một module và cho chạy Sub Main rồi duyệt qua các thư mục cần đổi tên các file trong đó là được.
Hàm BrowseFolder để tìm thư mục
Hàm TCVN3toUNICODE để đổi từ mã TCVN3 sang Unicode
Thủ tục RenameFiles để đổi tên các file trong thư mục đó.
Lưu ý khi dùng: Bạn cần vào menu Tools->References trong cửa sổ VBA chọn mục Microsoft Scripting Runtime.
Chúc thành công. Có gì không hiểu hỏi tiếp nhé.
Private Const BIF_RETURNONLYFSDIRS As Long = &H1
Private Const BIF_DONTGOBELOWDOMAIN As Long = &H2
Private Const BIF_RETURNFSANCESTORS As Long = &H8
Private Const BIF_BROWSEFORCOMPUTER As Long = &H1000
Private Const BIF_BROWSEFORPRINTER As Long = &H2000
Private Const BIF_BROWSEINCLUDEFILES As Long = &H4000
Private Const MAX_PATH As Long = 260

Type BrowseInfo
hOwner As Long
pidlRoot As Long
pszDisplayName As String
lpszINSTRUCTIONS As String
ulFlags As Long
lpfn As Long
lParam As Long
iImage As Long
End Type

Type SHFILEOPSTRUCT
hwnd As Long
wFunc As Long
pFrom As String
pTo As String
fFlags As Integer
fAnyOperationsAborted As Boolean
hNameMappings As Long
lpszProgressTitle As String
End Type

Declare Function SHGetPathFromIDListA Lib "shell32.dll" ( _
ByVal pidl As Long, _
ByVal pszBuffer As String) As Long

Declare Function SHBrowseForFolderA Lib "shell32.dll" ( _
lpBrowseInfo As BrowseInfo) As Long


Function BrowseFolder(Optional Caption As String = "") As String

Dim BrowseInfo As BrowseInfo
Dim FolderName As String
Dim ID As Long
Dim Res As Long

With BrowseInfo
.hOwner = 0
.pidlRoot = 0
.pszDisplayName = String$(MAX_PATH, vbNullChar)
.lpszINSTRUCTIONS = Caption
.ulFlags = BIF_RETURNONLYFSDIRS
.lpfn = 0
End With

FolderName = String$(MAX_PATH, vbNullChar)

ID = SHBrowseForFolderA(BrowseInfo)

If ID Then
Res = SHGetPathFromIDListA(ID, FolderName)
If Res Then
BrowseFolder = Left$(FolderName, InStr(FolderName, _
vbNullChar) - 1)
End If
End If

End Function
Sub Main()
Dim FName As String
FName = BrowseFolder("Select A Folder")
If FName = "" Then
MsgBox "You didn't select a folder"
Else
Call RenameFiles(FName)
End If
End Sub


Function TCVN3toUNICODE(vnstr As String)
Dim c As String, i As Long
For i = 1 To Len(vnstr)
c = Mid(vnstr, i, 1)
Select Case c
Case "a": c = ChrW$(97)
Case "¸": c = ChrW$(225)
Case "µ": c = ChrW$(224)
Case "¶": c = ChrW$(7843)
Case "·": c = ChrW$(227)
Case "¹": c = ChrW$(7841)
Case "¨": c = ChrW$(259)
Case "¾": c = ChrW$(7855)
Case "»": c = ChrW$(7857)
Case "¼": c = ChrW$(7859)
Case "½": c = ChrW$(7861)
Case "Æ": c = ChrW$(7863)
Case "©": c = ChrW$(226)
Case "Ê": c = ChrW$(7845)
Case "Ç": c = ChrW$(7847)
Case "È": c = ChrW$(7849)
Case "É": c = ChrW$(7851)
Case "Ë": c = ChrW$(7853)
Case "e": c = ChrW$(101)
Case "Ð": c = ChrW$(233)
Case "Ì": c = ChrW$(232)
Case "Î": c = ChrW$(7867)
Case "Ï": c = ChrW$(7869)
Case "Ñ": c = ChrW$(7865)
Case "ª": c = ChrW$(234)
Case "Õ": c = ChrW$(7871)
Case "Ò": c = ChrW$(7873)
Case "Ó": c = ChrW$(7875)
Case "Ô": c = ChrW$(7877)
Case "Ö": c = ChrW$(7879)
Case "o": c = ChrW$(111)
Case "ã": c = ChrW$(243)
Case "ß": c = ChrW$(242)
Case "á": c = ChrW$(7887)
Case "â": c = ChrW$(245)
Case "ä": c = ChrW$(7885)
Case "«": c = ChrW$(244)
Case "è": c = ChrW$(7889)
Case "å": c = ChrW$(7891)
Case "æ": c = ChrW$(7893)
Case "ç": c = ChrW$(7895)
Case "é": c = ChrW$(7897)
Case "¬": c = ChrW$(417)
Case "í": c = ChrW$(7899)
Case "ê": c = ChrW$(7901)
Case "ë": c = ChrW$(7903)
Case "ì": c = ChrW$(7905)
Case "î": c = ChrW$(7907)
Case "i": c = ChrW$(105)
Case "Ý": c = ChrW$(237)
Case "×": c = ChrW$(236)
Case "Ø": c = ChrW$(7881)
Case "Ü": c = ChrW$(297)
Case "Þ": c = ChrW$(7883)
Case "u": c = ChrW$(117)
Case "ó": c = ChrW$(250)
Case "ï": c = ChrW$(249)
Case "ñ": c = ChrW$(7911)
Case "ò": c = ChrW$(361)
Case "ô": c = ChrW$(7909)
Case "­": c = ChrW$(432)
Case "ø": c = ChrW$(7913)
Case "õ": c = ChrW$(7915)
Case "ö": c = ChrW$(7917)
Case "÷": c = ChrW$(7919)
Case "ù": c = ChrW$(7921)
Case "y": c = ChrW$(121)
Case "ý": c = ChrW$(253)
Case "ú": c = ChrW$(7923)
Case "û": c = ChrW$(7927)
Case "ü": c = ChrW$(7929)
Case "þ": c = ChrW$(7925)
Case "®": c = ChrW$(273)
Case "A": c = ChrW$(65)
Case "¡": c = ChrW$(258)
Case "¢": c = ChrW$(194)
Case "E": c = ChrW$(69)
Case "£": c = ChrW$(202)
Case "O": c = ChrW$(79)
Case "¤": c = ChrW$(212)
Case "¥": c = ChrW$(416)
Case "I": c = ChrW$(73)
Case "U": c = ChrW$(85)
Case "¦": c = ChrW$(431)
Case "Y": c = ChrW$(89)
Case "§": c = ChrW$(272)
End Select
TCVN3toUNICODE = TCVN3toUNICODE + c
Next i
End Function

Sub RenameFiles(thumuc)
Match = ".xls"

'Define an FSO object
Dim FSO As FileSystemObject
Set FSO = New FileSystemObject

'Create a variable to store the folder holding the files
Dim FilesDir As Folder
'Change the string here to look in a different folder (highly recommended :p)
Set FilesDir = FSO.GetFolder(thumuc)

'Define a counter variable and set it zero
Dim i As Integer
i = 0

'Loop through all of the files in the folder
Dim CurFile As File
For Each CurFile In FilesDir.Files

'If the file ends with the word ".xls" then rename it
If LCase(Right(CurFile.Name, 4)) = LCase(Match) Then

'Rename the file to the value in the specified cell
CurFile.Move FilesDir + "\" + TCVN3toUNICODE(CurFile.Name)
'Increment the counter so next time we will use a cell from the next row for naming
i = i + 1

End If

Next
End Sub
 
Chân thành cám ơn bác nhiểu em xẽ thử xem sao.
 
Cảm ơn phongvanvu rất nhiều chương trình của ban viết rất hay tuy đôi chỗ đổi mã phông chưa đúng nhưng giúp ích cho mình rất nhiều. Chúc bạn 1 năm mới mạnh khoẻ - hạnh phúc.
Thank !
 
Web KT
Back
Top Bottom