Đổi tên File tự động ?

Liên hệ QC

Nguyen Rem

Tất cả chỉ là đưa ra quyết định đúng đắn
Tham gia
23/2/22
Bài viết
211
Được thích
30
Giới tính
Nữ
Em chào các anh chị ạ ^^ . Em xin phép được vào luôn chủ đề :>
Hiện tại em đang phải làm một công việc lặp đi lặp lại cũng khá là lâu rồi . Nên tranh thủ lúc em cũng đã biết "sương sương" về VBA, em có viết một đoạn code để tự động cái phần công việc đó. Công việc đó như sau:

Hiện tại em đang ở trong thư mục Listen . Nó gồm các File .mp3 được đánh theo số thứ tự một file text có tên là "import.txt" (Giống như hình bên trái) . Đầu tiên em phải nhập cái filecó tên là :"import.txt" vào trong excel . Sau khi nhập thì ta được cái bảng tính giống như hình bên phải

1660396436247.png

1660396644686.png

Sau đó em đã việt một đoạn code(Đoạn code này nằm ở trong Module1 của File có tên "Book1.xlsm") với mục đích là để tự động đổi tên File theo thứ tự mình đã đánh số :
1660398155936.png1660398132336.png

Đến đây em mong các anh chị tải File về và xem code ở bên trong em đã viết gì đã ^^ --Các File , Folder đã nhắc đến ở trong bài em đã nén và đính kèm ở phía bên dưới (Nó có tên là "Listen.rar")--

Vấn đề :
Tại do khi em làm việc với đối tượng FileSystemObject em chưa quen, nên tốn khá nhiều thời gian để viết code vả lại công việc này em cũng đang cần ngay nữa. Bởi lẽ đó em muốn nhờ anh chị viết cho em một số đoạn code bổ xung và sửa vào đoạn của em để tự động được cái công việc em nêu ở trên luôn :)))

Những thứ muốn làm:
Ở trong một Folder nào đó --chẳng hạn như ở trong Folder listen này(hình bên dưới)-- .
Đường dẫn của Folder là không cố định (đường dẫn của nó chỉ được xác định bằng cách nhận biết cái Folder nào đang được Active) . Sau đó kiểm tra xem File nào trong Folder này là File text , File nào là File.mp3 , File nào là .xlsm , .xlxs ... . Sau khi kiểm tra xong thì import File text đó vào excel với các trường cột không đổi -- Trường cột được phân cách bằng dấu"tab" giống như trong File text nó phát hiện-- Trong Folder đang được kích hoạt này. Folder đó chỉ gồm 1 File có đuôi txt còn lại các File có đuôi khác thì rất nhiều(Có thể làm một cái userform để hỏi người dùng muốn import File text nào)-- . Sau khi lấy được tên đã import vào excel ổn thỏa thì ta thực hiện code ở bên trên em viết --Code đổi tên File .mp3-- . Sau khi đổi tên File xong thì di chuyển Các File .mp3 vừa được đổi tên sang một Folder mới có đường dẫn cố định. và hiển thị thông báo kết thúc chương trình .
1660399729442.png

Đó là tất cả những gì em muốn làm . Em cảm ơn mọi người đã đọc đến đây . Hi vọng nhận được mọi góp ý , trợ giúp về code từ mọi người ( Tại do em cũng mới học nên có nhưng thứ viết chưa được tối ưu --Nhân dịp này thì mong anh chị sửa giúp em luôn--)
 

File đính kèm

  • Listen.rar
    877.2 KB · Đọc: 13
Lần chỉnh sửa cuối:
Nghe @BuiQuangThuan nói mình cũng rén. Nên thôi chỉ khoan tay đứng nhìn, ngoài ra thì cũng nêu một số ý, em xem tận dụng được gì thì tận dụng nha.
PHP:
Function GetFolder() As String
    Dim fldr As FileDialog
    Dim sItem As String
    Set fldr = Application.FileDialog(msoFileDialogFolderPicker)
    With fldr
        .Title = "Select a Folder"
        .AllowMultiSelect = False
        .InitialFileName = Application.DefaultFilePath
        If .Show <> -1 Then GoTo NextCode
        sItem = .SelectedItems(1)
    End With
NextCode:
    GetFolder = sItem
    Set fldr = Nothing
End Function
Tham khảo code này để lấy đường dẫn folder mà em muốn.
Còn nếu đơn giản là lấy file theo đúng loại TXT
(Có thể làm một cái userform để hỏi người dùng muốn import File text nào) --> có thể dùng ngay cái có sẳn kg cần tạo User Form
PHP:
Dim strDb As String
strDb = Application.GetOpenFilename("TEXT FILES(*.txt),*.txt")
Bản thân FSO cũng lấy được đuôi của file, thông qua
PHP:
Set fso = CreateObject("Scripting.FileSystemObject")
fso.GetExtensionName ("C:\Src\Hello.txt") 'Result: "txt"
Vậy mình làm cái For each cứ hễ "=mp3" thì mang nó ra xử, đổi tên, sau đổi tên thì chuyển đi luôn.
Nhưng theo anh đối xử với dữ liệu vậy hơi thô bạo.
Thay vì đổi tên rồi chuyển đi >> Copy rồi đổi tên.
Trên nguyên tắc ít can thiệp vào dữ liệu gốc nhất, vì lỡ sai hay nhầm vẫn còn dữ liệu để mà làm chứ :D
 
Upvote 0
Có thể đọc tập tin Txt vào Sheet bằng nhiều cách. Code sau là một trong các cách.
Mã:
Public Enum CharDelimiter
    TabDelimiter = 1
    SemicolonDelimiter = 2
    CommaDelimiter = 3
    SpaceDelimiter = 4
End Enum

Sub OpenText(ByVal FullFilename As String, ByVal RowStart As Long, ByVal delimiter As CharDelimiter, dest As Range)
'    FullFilename: duong dan day du toi tap tin
'    RowStart: chi so dong ma tu do du lieu duoc doc. Neu vd. dong 1 la TIEU DE ma ta chi muon doc du lieu khong doc TIEU DE thi nhap RowStart = 2
'    delimiter: ky tu phan cach cac cot, vd. neu la TAB thi delimiter = TabDelimiter
'    dest: cell tren sheet ma tu do chen ket qua (o goc tren ben trai cua vung ket qua)
    With Workbooks
        Select Case delimiter
            Case TabDelimiter: .OpenText FullFilename, Origin:=65001, StartRow:=RowStart ', DataType:=xlDelimited, Tab:=True
            Case SemicolonDelimiter: .OpenText FullFilename, Origin:=65001, StartRow:=RowStart, DataType:=xlDelimited, Semicolon:=True
            Case CommaDelimiter: .OpenText FullFilename, Origin:=65001, StartRow:=RowStart, DataType:=xlDelimited, Comma:=True
            Case SpaceDelimiter: .OpenText FullFilename, Origin:=65001, StartRow:=RowStart, DataType:=xlDelimited, Space:=True
        End Select
    End With
    With ActiveWorkbook
        .ActiveSheet.Range("A1").CurrentRegion.Copy dest
        .Close False
    End With
End Sub

2.Về sub GetName

Range("F:F,G:G").Select
là không cần thiết. Để chạy code nhiều người cứ Select liên tục không cần thiết. Nếu vùng thao tác thay đổi thì nên mở cửa sổ Application.InputBox để chọn vùng. Nếu vùng không thay đổi thì vd.
Mã:
Const diachi_vung = "A2:B5"
Dim rng As Range
    Set rng = ThisWorkbook.Worksheets("Sheet1").Range(diachi_vung)

rồi duyệt rng thôi.

Với bài của bạn thì có thể khai bao ArrVung là Range thôi (hiện ArrVung là mảng 2 phần tử mà mỗi phần tử là Range).

Mảng ArrKQ cũng có 2 phần tử mà mỗi phần tử là một mảng (mảng ArrVal) trong khi code của RenameFile lại chỉ dùng phần tử 1 - ArrKQ(1)
Tức soạn cả ArrKQ(2) để tiêu bớt điện nước vì nhiều quá phải xả bớt. Thậm chí nếu dùng cả ArrKQ(2) thì cũng chỉ cần ArrKQ là mảng nhiều giá trị đơn.

Tôi cũng không hiểu ý tưởng
Mã:
If Err.Number <> 0 Then
    Col.Remove Trim(Selection.Areas(i).Item(j, 1).Value)
    Col.Add Trim(Selection.Areas(i).Item(j, 1).Value), Trim(Selection.Areas(i).Item(j, 1).Value)
    Err.Clear
End If
Là nếu có "Ổi" rồi (nên có lỗi) thì vứt "Ổi" ra khỏi rổ rồi lại thêm "Ổi" vào rổ? Sao lại phải khổ thế? Nếu có "Ổi" rồi thì có lỗi nhưng bỏ qua lỗi thôi (cùng lắm thì Err.Clear). "Ổi" đã có trong rổ là được rồi chứ sao lại vứt đi rồi bỏ lại vào rổ?

Ngoài Collection có thể dùng Dictionary - "Scripting.Dictionary"

Giả sử ta sử dụng cả các giá trị cột F và G. Nếu vùng thay đổi thì mở cửa sổ InputBox để chọn. Giả sử vùng cố định. Code ví dụ ở sau cùng.

3.Về sub RenameFile
PathFolder = "E:\Self-Study English\Vocabulary\Export\Listen"?

Bạn viết là thư mục chứa các tập tin sẽ thay đổi, vậy không thể nhập cứng đường dẫn vào code. Trong trường hợp của bạn có thể coi đó là tham số được truyền vào sub RenameFile.

Mã:
For Each GFile In ColFile
GFile.Name = ArrKQ(1)(i)
i = i + 1
Next

a. Code trên đổi tên mọi tập tin, không chỉ MP3

b. Nếu số mục khác nau trong cột F < số tập tin trong thư mục thì chết rồi. Vd. trong thư mục có 6 MP3, nhưng vd. trong cột F có 5 mục - 5 tên. Lúc này khi định đổi tên tập tin MP3 thứ 6 thì có lỗi vì ArrKQ(1) là mảng chỉ có 5 phần tử nên truy cập tới ArrKQ(1)(i) = ArrKQ(1)(6) sẽ có lỗi.

Code ví dụ ở sau cùng.

Code cần thiết ở sau đây. Cần chạy sub main

Giả thiết: tập tin TXT và MP3 nằm cùng thư mục, và trong thư mục đó cũng có thư mục con tên là "da doi ten". Code sau đây sẽ vừa đổi tên vừa chuyển (MOVE) các MP3 sang thư mục "da doi ten", tức ở nguồn không còn các MP3. Nếu không muốn chuyển mà chỉ muốn COPY (nguồn vẫn còn) và đổi tên sang "da doi ten" thì trong sub RenameFile hãy sửa fso.MoveFile thành fso.CopyFile
Mã:
Option Explicit

Sub GetName(ByVal folderMP3 As String)
Const diachi_vung = "F:F,G:G"
Dim rng As Range, ArrVung As Range, ArrKQ() As Variant
Dim i As Long, j As Long, text As String, folderPath As String
Dim Col As Collection
    Set Col = New Collection
    
    Set rng = ThisWorkbook.Worksheets("Sheet1").Range(diachi_vung)
    For i = 1 To rng.Areas.Count
        Set ArrVung = rng.Areas(i).Resize(rng.Areas(i).End(xlDown).Row, 1)
        On Error Resume Next
        For j = 1 To ArrVung.Count
            text = Trim(ArrVung.Item(j, 1).Value)
            Col.Add text, text
        Next
        On Error GoTo 0
    Next i
    
    ReDim ArrKQ(1 To Col.Count)
    For i = Col.Count To 1 Step -1
        ArrKQ(i) = VBA.Mid(Col.Item(i), 8, Len(Col.Item(i)) - 8)
        Col.Remove i
    Next
    
    RenameFile folderMP3, ArrKQ
End Sub

Sub RenameFile(ByVal folderMP3 As String, ArrKQ())
    Dim k As Integer, filename As String
    Dim GFolder As Object
    Dim GFile As Object
    Dim ColFile As Object
    Dim fso As Object
    
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    Set GFolder = fso.GetFolder(folderMP3)
    Set ColFile = GFolder.Files
    k = 0
    For Each GFile In ColFile
        If k + 1 > UBound(ArrKQ) Then Exit For
        filename = GFile.Name
        If LCase(Right(filename, 4)) = ".mp3" Then
            k = k + 1
            fso.MoveFile GFile.Path, folderMP3 & "\da doi ten\" & ArrKQ(k)
        End If
    Next GFile
    Set fso = Nothing
End Sub

Sub main()
Dim fileTXT, folderMP3 As String
    fileTXT = Application.GetOpenFilename("Text Files (*.txt), *.txt", , "Import TXT")  ' chon tap tin TXT
    If fileTXT = False Then Exit Sub
    OpenText fileTXT, 1, TabDelimiter, ThisWorkbook.Worksheets("Sheet1").Range("A1")    ' chen noi dung TXT vao sheet
    folderMP3 = Left(fileTXT, InStrRev(fileTXT, "\"))   ' tap tin TXT va MP3 cung thu muc nen lay ten thu muc tu duong dan cua tap tin TXT
    GetName folderMP3   ' lay cac ten duy nhat va doi ten cac tap tin MP3 trong thu muc
End Sub
 
Upvote 0
Có thể đọc tập tin Txt vào Sheet bằng nhiều cách. Code sau là một trong các cách.
Mã:
Public Enum CharDelimiter
    TabDelimiter = 1
    SemicolonDelimiter = 2
    CommaDelimiter = 3
    SpaceDelimiter = 4
End Enum

Sub OpenText(ByVal FullFilename As String, ByVal RowStart As Long, ByVal delimiter As CharDelimiter, dest As Range)
'    FullFilename: duong dan day du toi tap tin
'    RowStart: chi so dong ma tu do du lieu duoc doc. Neu vd. dong 1 la TIEU DE ma ta chi muon doc du lieu khong doc TIEU DE thi nhap RowStart = 2
'    delimiter: ky tu phan cach cac cot, vd. neu la TAB thi delimiter = TabDelimiter
'    dest: cell tren sheet ma tu do chen ket qua (o goc tren ben trai cua vung ket qua)
    With Workbooks
        Select Case delimiter
            Case TabDelimiter: .OpenText FullFilename, Origin:=65001, StartRow:=RowStart ', DataType:=xlDelimited, Tab:=True
            Case SemicolonDelimiter: .OpenText FullFilename, Origin:=65001, StartRow:=RowStart, DataType:=xlDelimited, Semicolon:=True
            Case CommaDelimiter: .OpenText FullFilename, Origin:=65001, StartRow:=RowStart, DataType:=xlDelimited, Comma:=True
            Case SpaceDelimiter: .OpenText FullFilename, Origin:=65001, StartRow:=RowStart, DataType:=xlDelimited, Space:=True
        End Select
    End With
    With ActiveWorkbook
        .ActiveSheet.Range("A1").CurrentRegion.Copy dest
        .Close False
    End With
End Sub

2.Về sub GetName

Range("F:F,G:G").Select
là không cần thiết. Để chạy code nhiều người cứ Select liên tục không cần thiết. Nếu vùng thao tác thay đổi thì nên mở cửa sổ Application.InputBox để chọn vùng. Nếu vùng không thay đổi thì vd.
Mã:
Const diachi_vung = "A2:B5"
Dim rng As Range
    Set rng = ThisWorkbook.Worksheets("Sheet1").Range(diachi_vung)

rồi duyệt rng thôi.

Với bài của bạn thì có thể khai bao ArrVung là Range thôi (hiện ArrVung là mảng 2 phần tử mà mỗi phần tử là Range).

Mảng ArrKQ cũng có 2 phần tử mà mỗi phần tử là một mảng (mảng ArrVal) trong khi code của RenameFile lại chỉ dùng phần tử 1 - ArrKQ(1)
Tức soạn cả ArrKQ(2) để tiêu bớt điện nước vì nhiều quá phải xả bớt. Thậm chí nếu dùng cả ArrKQ(2) thì cũng chỉ cần ArrKQ là mảng nhiều giá trị đơn.

Tôi cũng không hiểu ý tưởng
Mã:
If Err.Number <> 0 Then
    Col.Remove Trim(Selection.Areas(i).Item(j, 1).Value)
    Col.Add Trim(Selection.Areas(i).Item(j, 1).Value), Trim(Selection.Areas(i).Item(j, 1).Value)
    Err.Clear
End If
Là nếu có "Ổi" rồi (nên có lỗi) thì vứt "Ổi" ra khỏi rổ rồi lại thêm "Ổi" vào rổ? Sao lại phải khổ thế? Nếu có "Ổi" rồi thì có lỗi nhưng bỏ qua lỗi thôi (cùng lắm thì Err.Clear). "Ổi" đã có trong rổ là được rồi chứ sao lại vứt đi rồi bỏ lại vào rổ?

Ngoài Collection có thể dùng Dictionary - "Scripting.Dictionary"

Giả sử ta sử dụng cả các giá trị cột F và G. Nếu vùng thay đổi thì mở cửa sổ InputBox để chọn. Giả sử vùng cố định. Code ví dụ ở sau cùng.

3.Về sub RenameFile
PathFolder = "E:\Self-Study English\Vocabulary\Export\Listen"?

Bạn viết là thư mục chứa các tập tin sẽ thay đổi, vậy không thể nhập cứng đường dẫn vào code. Trong trường hợp của bạn có thể coi đó là tham số được truyền vào sub RenameFile.

Mã:
For Each GFile In ColFile
GFile.Name = ArrKQ(1)(i)
i = i + 1
Next

a. Code trên đổi tên mọi tập tin, không chỉ MP3

b. Nếu số mục khác nau trong cột F < số tập tin trong thư mục thì chết rồi. Vd. trong thư mục có 6 MP3, nhưng vd. trong cột F có 5 mục - 5 tên. Lúc này khi định đổi tên tập tin MP3 thứ 6 thì có lỗi vì ArrKQ(1) là mảng chỉ có 5 phần tử nên truy cập tới ArrKQ(1)(i) = ArrKQ(1)(6) sẽ có lỗi.

Code ví dụ ở sau cùng.

Code cần thiết ở sau đây. Cần chạy sub main

Giả thiết: tập tin TXT và MP3 nằm cùng thư mục, và trong thư mục đó cũng có thư mục con tên là "da doi ten". Code sau đây sẽ vừa đổi tên vừa chuyển (MOVE) các MP3 sang thư mục "da doi ten", tức ở nguồn không còn các MP3. Nếu không muốn chuyển mà chỉ muốn COPY (nguồn vẫn còn) và đổi tên sang "da doi ten" thì trong sub RenameFile hãy sửa fso.MoveFile thành fso.CopyFile
Mã:
Option Explicit

Sub GetName(ByVal folderMP3 As String)
Const diachi_vung = "F:F,G:G"
Dim rng As Range, ArrVung As Range, ArrKQ() As Variant
Dim i As Long, j As Long, text As String, folderPath As String
Dim Col As Collection
    Set Col = New Collection
   
    Set rng = ThisWorkbook.Worksheets("Sheet1").Range(diachi_vung)
    For i = 1 To rng.Areas.Count
        Set ArrVung = rng.Areas(i).Resize(rng.Areas(i).End(xlDown).Row, 1)
        On Error Resume Next
        For j = 1 To ArrVung.Count
            text = Trim(ArrVung.Item(j, 1).Value)
            Col.Add text, text
        Next
        On Error GoTo 0
    Next i
   
    ReDim ArrKQ(1 To Col.Count)
    For i = Col.Count To 1 Step -1
        ArrKQ(i) = VBA.Mid(Col.Item(i), 8, Len(Col.Item(i)) - 8)
        Col.Remove i
    Next
   
    RenameFile folderMP3, ArrKQ
End Sub

Sub RenameFile(ByVal folderMP3 As String, ArrKQ())
    Dim k As Integer, filename As String
    Dim GFolder As Object
    Dim GFile As Object
    Dim ColFile As Object
    Dim fso As Object
   
    Set fso = CreateObject("Scripting.FileSystemObject")
   
    Set GFolder = fso.GetFolder(folderMP3)
    Set ColFile = GFolder.Files
    k = 0
    For Each GFile In ColFile
        If k + 1 > UBound(ArrKQ) Then Exit For
        filename = GFile.Name
        If LCase(Right(filename, 4)) = ".mp3" Then
            k = k + 1
            fso.MoveFile GFile.Path, folderMP3 & "\da doi ten\" & ArrKQ(k)
        End If
    Next GFile
    Set fso = Nothing
End Sub

Sub main()
Dim fileTXT, folderMP3 As String
    fileTXT = Application.GetOpenFilename("Text Files (*.txt), *.txt", , "Import TXT")  ' chon tap tin TXT
    If fileTXT = False Then Exit Sub
    OpenText fileTXT, 1, TabDelimiter, ThisWorkbook.Worksheets("Sheet1").Range("A1")    ' chen noi dung TXT vao sheet
    folderMP3 = Left(fileTXT, InStrRev(fileTXT, "\"))   ' tap tin TXT va MP3 cung thu muc nen lay ten thu muc tu duong dan cua tap tin TXT
    GetName folderMP3   ' lay cac ten duy nhat va doi ten cac tap tin MP3 trong thu muc
End Sub
Ôi ! Code anh làm xịn quá ^^ --Em vừa kiểm tra xong thấy rất ổn rồi ạ . Bây giờ thì lấy về và học code thôi-- . Thật sự thì các biến của anh khai báo rất rõ ràng , các tên đều có ý nghĩa của nó (Cái này em sửa mãi mà không được --Toàn đặt tên là test thôi ^^--) .

Với bài của bạn thì có thể khai bao ArrVung là Range thôi (hiện ArrVung là mảng 2 phần tử mà mỗi phần tử là Range).

Mảng ArrKQ cũng có 2 phần tử mà mỗi phần tử là một mảng (mảng ArrVal) trong khi code của RenameFile lại chỉ dùng phần tử 1 - ArrKQ(1)
Tức soạn cả ArrKQ(2) để tiêu bớt điện nước vì nhiều quá phải xả bớt. Thậm chí nếu dùng cả ArrKQ(2) thì cũng chỉ cần ArrKQ là mảng nhiều giá trị đơn.
Cái việc em dùng đối tượng Areas bởi em thấy nó rõ ràng ấy anh với lại kiểu sau này em nghĩ sẽ có nhiều trường âm thanh nên việc viết theo Areas là cần thiết cho về sau . Mặc dù bây giờ nó hơi thừa thật :))))
Tôi cũng không hiểu ý tưởng
Mã:
If Err.Number <> 0 Then
Col.Remove Trim(Selection.Areas(i).Item(j, 1).Value)
Col.Add Trim(Selection.Areas(i).Item(j, 1).Value), Trim(Selection.Areas(i).Item(j, 1).Value)
Err.Clear
End If
Là nếu có "Ổi" rồi (nên có lỗi) thì vứt "Ổi" ra khỏi rổ rồi lại thêm "Ổi" vào rổ? Sao lại phải khổ thế? Nếu có "Ổi" rồi thì có lỗi nhưng bỏ qua lỗi thôi (cùng lắm thì Err.Clear). "Ổi" đã có trong rổ là được rồi chứ sao lại vứt đi rồi bỏ lại vào rổ?
Cái này em đọc lại thì thấy mình đúng ngớ ngẩn thật ^^ .
Ngoài Collection có thể dùng Dictionary - "Scripting.Dictionary"
Mấy lần anh cũng có gợi ý là dùng Dictionary rồi!
Em cũng học với viết nhiều ví dụ về cái dictionary rồi ấy . Nhưng mà đến lúc code thì em lại thấy cái đối tượng collection nó thuận tay hơn nên lại viết theo collection ấy anh :> .

Em cảm ơn anh đã đưa ra nhận xét về code rõ ràng như vậy-- Nó thực sự giúp ích cho em rất nhiều-- ^^. Cảm ơn mọi người đã dành thời gian ra để đọc cũng như xây dựng chủ đề này <3 .
Em cảm ơn
Bài đã được tự động gộp:

Nghe @BuiQuangThuan nói mình cũng rén. Nên thôi chỉ khoan tay đứng nhìn, ngoài ra thì cũng nêu một số ý, em xem tận dụng được gì thì tận dụng nha.
PHP:
Function GetFolder() As String
    Dim fldr As FileDialog
    Dim sItem As String
    Set fldr = Application.FileDialog(msoFileDialogFolderPicker)
    With fldr
        .Title = "Select a Folder"
        .AllowMultiSelect = False
        .InitialFileName = Application.DefaultFilePath
        If .Show <> -1 Then GoTo NextCode
        sItem = .SelectedItems(1)
    End With
NextCode:
    GetFolder = sItem
    Set fldr = Nothing
End Function
Tham khảo code này để lấy đường dẫn folder mà em muốn.
Còn nếu đơn giản là lấy file theo đúng loại TXT
(Có thể làm một cái userform để hỏi người dùng muốn import File text nào) --> có thể dùng ngay cái có sẳn kg cần tạo User Form
PHP:
Dim strDb As String
strDb = Application.GetOpenFilename("TEXT FILES(*.txt),*.txt")
Bản thân FSO cũng lấy được đuôi của file, thông qua
PHP:
Set fso = CreateObject("Scripting.FileSystemObject")
fso.GetExtensionName ("C:\Src\Hello.txt") 'Result: "txt"
Vậy mình làm cái For each cứ hễ "=mp3" thì mang nó ra xử, đổi tên, sau đổi tên thì chuyển đi luôn.
Nhưng theo anh đối xử với dữ liệu vậy hơi thô bạo.
Thay vì đổi tên rồi chuyển đi >> Copy rồi đổi tên.
Trên nguyên tắc ít can thiệp vào dữ liệu gốc nhất, vì lỡ sai hay nhầm vẫn còn dữ liệu để mà làm chứ :D
Em cũng đã đọc bài của anh rồi ạ ! Em cảm ơn anh rất nhiều ^^
Bây giờ thì em phải học những kiến thức mới thôi ! . Chứ rất nhiều thứ trong chủ đề này em vẫn chưa hiểu ^^
 
Upvote 0
Có thể đọc tập tin Txt vào Sheet bằng nhiều cách. Code sau là một trong các cách.
Em chào anh ạ ^^ . Có thể nó không liên quan đến chủ đề này lắm nhưng mà em ngại lập chủ đề mới quá! (tại câu hỏi của em nó nhỏ --chỉ liên quan đến việc định hướng--)

Em đang muốn mở hay tương tác với các ứng dung khác nhờ vào việc sử dụng ngôn ngữ VBA (giống như những chủ đề ở bên dưới) nhưng mà em đọc em không hiểu cái gì hết !
Anh có thể nói cho em biết là !
- Liệu ngôn ngữ VBA có đáp ứng được tốt những yêu cầu của em nêu ra ở trên không ? Nếu không thì phải học thêm những cái gì ? Hay Muốn viết được giống như anh thì mình phải học những cái gì ạ !


-- Mọi người xem chủ đề này thì đừng bảo em ôm đồm hay học nhiều thứ thế nhé! Bởi em cũng nghe nhiều lắm rồi ! Em không muốn giải thích nữa đâu :< Em chỉ muốn được giải đáp đúng câu hỏi mình đặt ra thôi!!! --
 
Upvote 0
Cái từ tương tác này xét tầm trái đất thì cỡ như Thái bình dương ấy. Nhỏ quá đi.
Nếu xét tầm vũ trụ thì cũng phải dạng ông mặt trời mới vừa.

Muốn tương cái nào phải cụ tỉ, và không có cái nào giống cái nào cả.

Nếu chuyên về tương tác thì tìm hiểu về RPA.
 
Upvote 0
Em chào anh ạ ^^ . Có thể nó không liên quan đến chủ đề này lắm nhưng mà em ngại lập chủ đề mới quá! (tại câu hỏi của em nó nhỏ --chỉ liên quan đến việc định hướng--)

Em đang muốn mở hay tương tác với các ứng dung khác nhờ vào việc sử dụng ngôn ngữ VBA (giống như những chủ đề ở bên dưới) nhưng mà em đọc em không hiểu cái gì hết !
Mấu chốt nó nằm ở "tương tác". Nghĩa có thể bao la mà cũng có thể chỉ là vài việc nhỏ. Biết cách điều khiển A không có nghĩa là điều khiển được B. Tôi cho là không thể "tương tác" với nghĩa "điều khiển" với mọi ứng dụng. Tùy từng ứng dụng thôi. Mà nếu là server COM, automation thì còn dễ chứ ứng dụng "bình thường" thì điều khiển bằng niềm tin à?

Với câu hỏi chung chung như thế thì không cần tra tấn tôi cũng khai ngay: tôi không biết cách tương tác với MỌI ứng dụng.
 
Upvote 0
Em cảm ơn hai anh đã trả lời câu hỏi không rõ ràng lắm của em ^^ . Nhưng chắc là em cứ để đấy thôi ! Tại có lẽ em chưa đủ trải nhiệm để hiểu hết ấy :>
 
Upvote 0
Mình cũng có một đôi cách làm. Nhưng thấy đòi hỏi phải "giải đáp đúng câu hỏi" cho nên thôi.
 
Upvote 0
Mình cũng có một đôi cách làm. Nhưng thấy đòi hỏi phải "giải đáp đúng câu hỏi" cho nên thôi.
Chắc anh hiểu sai ý của em gì đó thôi! .
Nếu bây giờ chưa "muộn" và anh vẫn còn hứng thì anh cứ đóng góp vào chủ đề này ! Em chắc chắn sẽ đọc rất kĩ mà :>
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT
Back
Top Bottom