Duyệt file (folder) trong 1 folder cho trước và tạo Hyperlink

Liên hệ QC

ndu96081631

Huyền thoại GPE
Thành viên BQT
Super Moderator
Tham gia
5/6/08
Bài viết
30,703
Được thích
53,947
Xét thấy nhiều bạn có nhu cầu duyệt file hoặc folder rồi tạo Hyperlink trên sheet.
Gần đây lại có 1 bạn khơi lại chủ đề này:
http://www.giaiphapexcel.com/forum/showthread.php?81354-Nhờ-Link-foder-trong-trong-excel-!
Bạn ấy lại muốn code có khả năng vừa duyệt file lại vừa duyệt folder nên tôi quyết định tiến hành xây dựng file và cuối cùng cũng hoàn tất
Giao diện chương trình như sau:

Capture.JPGCapture.JPG






































Với file này, các bạn có thể lưu thành Add-In và khi gọi Add-In lên các bạn sẽ nhìn thấy 1 button trên menu bar (hoặc Ribbon). Bấm vào button thì form sẽ xuất hiện (như hình trên)
Khi lưu thành Add-In, các bạn sẽ được "khuyến mãi" thêm hàm lấy file, folder như sau
Mã:
Function FilesFoldersList(ByVal RootFolder As String, ByVal ListType As Boolean, _
                          ByVal Search As String, ByVal InSub As Boolean)
  'ListType = True: Get Files list
  'ListType = False: Get Folders list
  Dim sComm As String, tmp As String, str As String, tmpFile, Arr
  On Error Resume Next
  If Right(RootFolder, 1) <> "\" Then RootFolder = RootFolder & "\"
  str = """" & RootFolder & IIf(ListType, Search, "") & """"
 
  With CreateObject("Scripting.FileSystemObject")
    tmpFile = .GetTempName
    sComm = "DIR " & str & " /ON /B /A" & IIf(ListType, "-", "") & "D[COLOR=#ff0000][B]-S[/B][/COLOR]" & IIf(InSub, "/S", " ") & " >" & tmpFile
    CreateObject("Wscript.Shell").Run "cmd /u /c " & sComm, 0, True
    With .OpenTextFile(tmpFile, 1, , -2)
      tmp = Trim(.ReadAll)
      If Right(tmp, 2) = vbCrLf Then tmp = Left(tmp, Len(tmp) - 2)
      If Len(tmp) Then
        If InSub = False Then tmp = RootFolder & Replace(tmp, vbCrLf, vbCrLf & RootFolder)
        FilesFoldersList = Split(tmp, vbCrLf)
      End If
      .Close
    End With
  End With
  Kill tmpFile
End Function
Có thể gõ hàm trực tiếp trên sheet theo cú pháp:
Mã:
=FilesFoldersList([COLOR=#ff0000]Tên thư mục[/COLOR], [COLOR=#ff8c00]list file hay folder?[/COLOR], [COLOR=#008000]từ khóa[/COLOR], [COLOR=#0000cd]có lấy trong folder con hay không?[/COLOR])
Ví dụ:
=FilesFoldersList("D:\Excel", True, "*.xlsm", True)
Có nghĩa là: Bạn muốn tìm trong thư mục "D:\Excel" các file có đuôi .xlsmlấy list trong các folder con luôn
Kết quả trả về của hàm trên là mảng 1 chiều chưa các file hoặc folder liên quan
------------------------------------------------
Lưu ý: Trong code chính, chổ màu đỏ (-S) nhằm mục đích loại bỏ các file hoặc folder hệ thống (tránh nguy hiểm). Nếu các bạn có nhu cầu lấy luôn các file folder hệ thống thì cứ xóa cái -S ấy đi là được
------------------------------------------------
Rất mong nhận được sự cải tiến, đóng góp của các bạn để chương trình được hoàn thiện hơn
Cảm ơn!
 

File đính kèm

  • Search_For_Files_Folders.xlsm
    31.4 KB · Đọc: 1,052
  • Search_For_Files_Folders.xls
    70 KB · Đọc: 880
Lần chỉnh sửa cuối:
Thưa Thầy có thể Duệt cả file lẫn foder trong trong cùng 1 thư mục được không ạ?
Ví dụ trong thư mục này :D:\Documents and Settings\Administrator\My Documents\Downloads
Có các foder:Documents,Compressed,Music,Programs v.v..
và các file :A.xls,B.doc,C.xls,

Con muốn khi duyệt theo đường dẫn trên thì có các đường liks vào các forder trên và các đường links vào file trên.
Như vậy trong bảng sẽ hiện ra như thế này:
Documents
Compressed
Music
Programs
A.xls
B.doc
C.xls
(không lấy đường dẫn kèm theo mà chỉ lấy tên thôi ạ)
Chứ không có nghĩ là duyệt luôn tất cả các file năm trong các foder trong thư mục theo đường dẫn trên ạ!
Hix! Hỏi thôi mà con đã thấy thật vất vả và khó diễn đạt rồi. Không biết Thầy và mọi người có hiểu ý không, hihi!
 
Lần chỉnh sửa cuối:
Upvote 0
Thưa Thầy có thể Duệt cả file lẫn foder trong trong cùng 1 thư mục được không ạ?
Ví dụ trong thư mục này :D:\Documents and Settings\Administrator\My Documents\Downloads
Có các foder:Documents,Compressed,Music,Programs v.v..
và các file :A.xls,B.doc,C.xls,

Con muốn khi duyệt theo đường dẫn trên thì có các đường liks vào các forder trên và các đường links vào file trên.
Như vậy trong bảng sẽ hiện ra như thế này:
Documents
Compressed
Music
Programs
A.xls
B.doc
C.xls
(không lấy đường dẫn kèm theo mà chỉ lấy tên thôi ạ)
Chứ không có nghĩ là duyệt luôn tất cả các file năm trong các foder trong thư mục theo đường dẫn trên ạ!
Hix! Hỏi thôi mà con đã thấy thật vất vả và khó diễn đạt rồi. Không biết Thầy và mọi người có hiểu ý không, hihi!

Bạn viết như thế này là khá rõ rồi.

Trong bài này của Ndu thì duyệt File riêng và duyệt thư mục riêng (có 2 lựa chọn) nhưng trong một bài khác (cũng của ndu trên GPE) thì có bài duyệt cả fold và file trong 1 thư mục nhưng hình như là không có Hyperlink. Bạn thử tìm xem.
 
Lần chỉnh sửa cuối:
Upvote 0
Tôi không cần ai cám ơn đâu. Cái tôi cần là test hộ. Rất nhiều lần tôi nhờ test hộ thì chả ai giúp tôi cả. Tại sao tôi nhờ test? Cái thứ nhất là xem tốc độ. Cái nữa là biết đâu code sai. Thường thì cái lỗi của người khác nhìn bao giờ cũng thấy như con voi còn lỗi của bản thân nó cứ như con kiến ấy. Vì thế con người ai cũng nhìn thấy rõ lỗi của người khác nhưng lỗi của bản thân sao khó thấy thế.
----------------
Tôi tự phát hiện ra trường hợp thiếu kết quả. Khi filename = "*" thì có đầy đủ kết quả. Khi vd. filename = "*.txt" và SubDir = TRUE thì kết quả trả về y như là SubDir = FALSE, tức chỉ có kết quả khớp từ thư mục đầu tiên. Trong code dưới những chỗ sửa hoặc thêm vào tôi đánh dấu mầu đỏ đỏ. Nhờ mọi người tiếp tục kiểm tra hộ
------------
Nhân tiện nhờ mọi người test hộ. Tôi muốn test chủ yếu cho trường hợp tìm các tập tin hoặc cả tập tin và thư mục, tìm cả ở các thư mục con. Kết quả trả về là tên, độ lớn và ngày tạo. Thư mục bắt đầu là "C:\" Code của tôi không lấy các tập tin và thư mục có trong sọt rác - RECYCLE, RECYCLER Tóm lại là chạy code sub myTest. Module
Mã:
Private Const FILE_ATTRIBUTE_DIRECTORY As Long = &H10
Private Const MAX_PATH As Long = 260
Private Const INVALID_HANDLE_VALUE As Long = &HFFFFFFFF  '((Handle) - 1)

Private Type FILETIME
    dwLowDateTime As Long
    dwHighDateTime As Long
End Type

Private Type SYSTEMTIME
    wYear As Integer
    wMonth As Integer
    wDayOfWeek As Integer
    wDay As Integer
    wHour As Integer
    wMinute As Integer
    wSecond As Integer
    wMilliseconds As Integer
End Type

Private Type WIN32_FIND_DATA
    dwFileAttributes As Long
    ftCreationTime As FILETIME
    ftLastAccessTime As FILETIME
    ftLastWriteTime As FILETIME
    nFileSizeHigh As Long
    nFileSizeLow As Long
    dwReserved0 As Long
    dwReserved1 As Long
    cFileName As String * MAX_PATH
    cAlternate As String * 14
End Type

Public Enum FIND_FILE_OPTION
    FileOnly = 1
    DirectoryOnly = 2
    AllFiles = 3
End Enum

Public Enum FIND_RESULT_OPTION
    frName = 1
    frNameSize = 3
    frNameDate = 5
    frNameSizeDate = 7
End Enum

Private Declare Function FileTimeToLocalFileTime Lib "kernel32.dll" (ByRef lpFileTime As FILETIME, ByRef lpLocalFileTime As FILETIME) As Long
Private Declare Function FileTimeToSystemTime Lib "kernel32.dll" (ByRef lpFileTime As FILETIME, ByRef lpSystemTime As SYSTEMTIME) As Long

Private Declare Function GetTickCount Lib "kernel32" () As Long
Private Declare Function FindClose Lib "kernel32.dll" (ByVal hFindFile As Long) As Long
Private Declare Function FindFirstFileW Lib "kernel32.dll" (ByVal lpFileName As String, ByRef lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function FindNextFileW Lib "kernel32.dll" (ByVal hFindFile As Long, ByRef lpFindFileData As WIN32_FIND_DATA) As Long

Private Const recycle = "RECYCLE"

Function UTCtoSysTime(fTime As FILETIME) As String
Dim LocalFileTime As FILETIME, SysTime As SYSTEMTIME
    If ((fTime.dwLowDateTime <> 0) Or (fTime.dwHighDateTime <> 0)) And _
      FileTimeToLocalFileTime(fTime, LocalFileTime) And FileTimeToSystemTime(LocalFileTime, SysTime) Then
        UTCtoSysTime = DateSerial(SysTime.wYear, SysTime.wMonth, SysTime.wDay) & " " _
            & TimeSerial(SysTime.wHour, SysTime.wMinute, 0)
    End If
End Function

Sub FindMatchedFilesExtW(arr, DirSize As Double, ByVal DirStart As String, ByVal filename As String, Optional ByVal res_option As FIND_RESULT_OPTION = frName, _
    Optional ByVal SubDir As Boolean = True, Optional ByVal find_option As FIND_FILE_OPTION = FileOnly)
' Arr: maŇng chýěa kęět quaŇ traŇ vęĚ laĚ maŇng 2 chięĚu
' SubDir: nęěu TRUE thiĚ tim caŇ trong caěc thý muňc con
' find_option = 3 (AllFiles) - tiĚm tâňp tin vaĚ thý muňc, 1 (FileOnly) - chiŇ tiĚm tâňp tin, 2 (DirectoryOnly) - chiŇ tiĚm thý muňc
'    DirSize chi dung cho vai th, vd. filename = "*", find_option = FileOnly, SubDir = True
'    ----------------------------------------
'    vd. caěch duĚng
'    FindMatchedFilesExtW arr, size, "C:\", "*", frNameSizeDate, , FileOnly
'    Application.ScreenUpdating = False
'    Range("A1").Resize(UBound(arr) + 1, UBound(arr, 2) + 1).Value = arr
'    Application.ScreenUpdating = True
    
Dim FindData As WIN32_FIND_DATA
Dim FindHandle As Long
Dim validDir As Boolean, IsFile As Boolean, doAdd As Boolean
Dim fName As String, k As Long, r As Long, c As Long, dSize As Double, size As Long
Static level As Long
On Error Resume Next

    If Right(DirStart, 1) <> "\" Then DirStart = DirStart & "\"
    
    [B][COLOR=#ff0000]If Not SubDir And (find_option = FileOnly) Then      [/COLOR][/B][COLOR=#ff0000][/COLOR][COLOR=#0000ff]<--- thay cho [/COLOR][COLOR=#ff0000]fName = StrConv(DirStart & filename, vbUnicode)[/COLOR]
[B][COLOR=#ff0000]        fName = StrConv(DirStart & filename, vbUnicode)
    Else
        fName = StrConv(DirStart & "*", vbUnicode)
    End If[/COLOR][/B]
    
    FindHandle = FindFirstFileW(fName, FindData)
    
    If FindHandle <> INVALID_HANDLE_VALUE Then
        If res_option = frName Then
            size = 0
        ElseIf res_option = frNameSizeDate Then
            size = 2
        Else
            size = 1
        End If
        doAdd = SubDir Or (level = 0)
        Do
            fName = StrConv(FindData.cFileName, vbFromUnicode)
            k = InStr(1, fName, vbNullChar)
            fName = Left(fName, k - 1)
            
            validDir = (FindData.dwFileAttributes And FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY
            IsFile = Not validDir
            
            If IsFile Then DirSize = DirSize + FindData.nFileSizeLow
            
            If validDir Then validDir = (Left(fName, 1) <> ".") And (InStr(1, fName, recycle, vbTextCompare) <> 1)

            If validDir Then
                If SubDir Or ((find_option > 1) And ((res_option And 2) = 2)) Then
                    level = level + 1
                    dSize = 0
                    FindMatchedFilesExtW arr, dSize, DirStart & fName, filename, res_option, SubDir, find_option
                    level = level - 1
                    DirSize = DirSize + dSize
                End If
            End If
            [B][COLOR=#ff0000]If fName Like filename Then[/COLOR][/B]    [COLOR=#0000ff]<--- them[/COLOR]
                If doAdd And ((validDir And (find_option > 1)) Or (IsFile And (find_option <> 2))) Then
                    If IsEmpty(arr) Then
                        ReDim arr(0 To size)
                    Else
                        ReDim Preserve arr(0 To UBound(arr) + size + 1)
                    End If
                    
                    arr(UBound(arr) - size) = DirStart & fName
                    If (res_option And 2) = 2 Then
                        If IsFile And (find_option <> 2) Then
                            arr(UBound(arr) - size + 1) = FindData.nFileSizeLow
                        Else
                            arr(UBound(arr) - size + 1) = dSize
                        End If
                    End If
                    
                    If (res_option And 4) = 4 Then arr(UBound(arr)) = UTCtoSysTime(FindData.ftCreationTime)
                End If
            [B][COLOR=#ff0000]End If[/COLOR][/B]     [COLOR=#0000ff]<--- them[/COLOR]
        Loop Until FindNextFileW(FindHandle, FindData) = 0
        FindClose (FindHandle)
    End If
   
    If level = 0 Then
        ReDim resArr(0 To (UBound(arr) + 1) \ (size + 1) - 1, 0 To size) As String
        For r = 0 To UBound(resArr)
            k = (size + 1) * r
            For c = 0 To size
                resArr(r, c) = arr(k + c)
            Next c
        Next r
        arr = resArr
    End If
End Sub

Sub myTest()
Dim t As Double, arr, size As Double
    Range("A:C").Clear
    
    t = Timer
    FindMatchedFilesExtW arr, size, "c:\", "*", frNameSizeDate, , FileOnly
    If IsEmpty(arr) Then Exit Sub
    Debug.Print "siwtom code: " & UBound(arr) + 1 & " files (or folders) found!", , Format(Timer - t, "0.0") & "s"
    Debug.Print size
    
    Application.ScreenUpdating = False
    Range("A1").Resize(UBound(arr) + 1, UBound(arr, 2) + 1).Value = arr
    Application.ScreenUpdating = True
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Trời ơi, khiếp quá, mỗi cái ổ C:\ mà lên đến sấp sỉ 50.000 tệp . Cám ơn thầy . Nhưng nếu thày viết cho duyệt một thư mục bất kỳ nào đó khi cho đường dẫn thì hay quá.
 
Upvote 0
Trời ơi, khiếp quá, mỗi cái ổ C:\ mà lên đến sấp sỉ 50.000 tệp . Cám ơn thầy . Nhưng nếu thày viết cho duyệt một thư mục bất kỳ nào đó khi cho đường dẫn thì hay quá.

Bạn nói tới bài của tôi? Nếu thế thì duyệt thư mục nào thì cho DirStart = thư mục đó. Còn filename thì vd. filename = "*" - tất cả, hoặc filename = "*.txt" - chỉ các file TXT
 
Upvote 0
Tôi không cần ai cám ơn đâu. Cái tôi cần là test hộ. Rất nhiều lần tôi nhờ test hộ thì chả ai giúp tôi cả.
Tại sao tôi nhờ test? Cái thứ nhất là xem tốc độ. Cái nữa là biết đâu code sai. Thường thì cái lỗi của người khác nhìn bao giờ cũng thấy như con voi còn lỗi của bản thân nó cứ như con kiến ấy. Vì thế con người ai cũng nhìn thấy rõ lỗi của người khác nhưng lỗi của bản thân sao khó thấy thế.
----------------
Nhân tiện nhờ mọi người test hộ. Tôi muốn test chủ yếu cho trường hợp tìm các tập tin hoặc cả tập tin và thư mục, tìm cả ở các thư mục con. Kết quả trả về là tên, độ lớn và ngày tạo. Thư mục bắt đầu là "C:\"
Code của tôi không lấy các tập tin và thư mục có trong sọt rác - RECYCLE, RECYCLER
Tóm lại là chạy code sub myTest.

Emt test thử Debug.Print báo như vậy :
PHP:
siwtom code: 167313 files (or folders) found!  63.3s
 37828117695

Em thấy ok,tất cả các file xxx, abc,xyz .. hidden cũng liệt kê ra hết __--__
 
Upvote 0
Ý nhà em là khi ta gọi sub Mytext thì xuất hiện hộp thoại để ta nhập đường dẫn cần duyệt vào đó thầy ạ ?
 
Upvote 0
Ý nhà em là khi ta gọi sub Mytext thì xuất hiện hộp thoại để ta nhập đường dẫn cần duyệt vào đó thầy ạ ?

Anh siwtom chẳng khi nào làm trọn vẹn 1 ứng dụng nào đâu. Ở trên chỉ là code dạng giải thuật, dùng thế nào là chuyện của bạn
Bạn muốn có hộp gì đó thì bài 1 đấy còn gì
 
Upvote 0
trời ơi, nhà em tải về rồi, nhưng do nhà em vẫn dùng office 2003 "đồ cổ" nên không mở được đuôi .xlsm , không biết có cách nào để đọc không nữa, nhà em bó tay thày ạ . Vả lại code của thày Wistom có cả dung lượng và thời gian khởi tạo . Nếu máy tự nhiên trục trặc, Có thể dùng code lọc thời gian để kiểm tra các tập tin khởi tạo trong thời gian trước đó .
 
Upvote 0
trời ơi, nhà em tải về rồi, nhưng do nhà em vẫn dùng office 2003 "đồ cổ" nên không mở được đuôi .xlsm , không biết có cách nào để đọc không nữa, nhà em bó tay thày ạ.

Tôi dùng đuôi xlsm là có lý do. Thử nghĩ bạn tìm trong ổ C được 80,000 file thì làm sao liệt kê trên file xls đây? (xls chỉ có 65536 dòng)
Nếu muốn, tôi chuyển xlsm sang xls cho bạn ---> xem ở bài 1 nhé

Vả lại code của thày Wistom có cả dung lượng và thời gian khởi tạo . Nếu máy tự nhiên trục trặc, Có thể dùng code lọc thời gian để kiểm tra các tập tin khởi tạo trong thời gian trước đó .
Thì code của tôi cũng có đầy đủ đấy thôi (Tên file, dung lượng, ngày tạo) tùy bạn chọn trên UserForm. Mặc khác còn tạo được Hyperlink trên sheet (cũng tùy bạn chọn luôn)
 
Lần chỉnh sửa cuối:
Upvote 0
Tôi không cần ai cám ơn đâu. Cái tôi cần là test hộ. Rất nhiều lần tôi nhờ test hộ thì chả ai giúp tôi cả.
Tại sao tôi nhờ test? Cái thứ nhất là xem tốc độ. Cái nữa là biết đâu code sai. Thường thì cái lỗi của người khác nhìn bao giờ cũng thấy như con voi còn lỗi của bản thân nó cứ như con kiến ấy. Vì thế con người ai cũng nhìn thấy rõ lỗi của người khác nhưng lỗi của bản thân sao khó thấy thế.
----------------



Nhân tiện nhờ mọi người test hộ. Tôi muốn test chủ yếu cho trường hợp tìm các tập tin hoặc cả tập tin và thư mục, tìm cả ở các thư mục con. Kết quả trả về là tên, độ lớn và ngày tạo. Thư mục bắt đầu là "C:\"
Code của tôi không lấy các tập tin và thư mục có trong sọt rác - RECYCLE, RECYCLER
Tóm lại là chạy code sub myTest.

Mình test thì báo lỗi như hình dưới đây.
 

File đính kèm

  • Loi.jpg
    Loi.jpg
    12.3 KB · Đọc: 340
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Tôi dùng đuôi xlsm là có lý do. Thử nghĩ bạn tìm trong ổ C được 80,000 file thì làm sao liệt kê trên file xls đây? (xls chỉ có 65536 dòng)
Nếu muốn, tôi chuyển xlsm sang xls cho bạn ---> xem ở bài 1 nhé


Thì code của tôi cũng có đầy đủ đấy thôi (Tên file, dung lượng, ngày tạo) tùy bạn chọn trên UserForm. Mặc khác còn tạo được Hyperlink trên sheet (cũng tùy bạn chọn luôn)
Cám ơn thày, nhà em phục thày lắm , chỉ sợ đêm nằm mà gọi tên thày thì ...vợ em nó véo tai chết .
 
Upvote 0
Anh siwtom chẳng khi nào làm trọn vẹn 1 ứng dụng nào đâu. Ở trên chỉ là code dạng giải thuật, dùng thế nào là chuyện của bạn
Bạn muốn có hộp gì đó thì bài 1 đấy còn gì

Đúng thế. Đó chỉ là sub thôi. Tức "lấy" các tập tin và thư mục khớp. Còn "lấy" thư mục DirStart bằng cách nào hoặc mảng kết quả dùng làm việc khác hay để đập xuống sheet là tùy người dùng.
Mà chọn thư mục bắt đầu thì trong code của ndu đã có rồi, cứ bắt chước thôi.
Tất nhiên tôi test cho "C:\" và tìm tất cả nên chắc chắn Arr <> Empty. Trong th tổng quát thì trước khi dùng Arr phải kiểm tra vì có thể với đk tìm kiếm thì không tìm thấy kất quả nào, tức Arr = Empty

Mã:
    FindMatchedFilesExtW ...
    If not IsEmpty(arr) Then ...
 
Upvote 0
Tôi có sửa chút trong bài #4
Nhờ mọi người test hộ.
 
Upvote 0
Thưa Thầy có thể Duệt cả file lẫn foder trong trong cùng 1 thư mục được không ạ?
Ví dụ trong thư mục này :D:\Documents and Settings\Administrator\My Documents\Downloads
Có các foder:Documents,Compressed,Music,Programs v.v..
và các file :A.xls,B.doc,C.xls,

Con muốn khi duyệt theo đường dẫn trên thì có các đường liks vào các forder trên và các đường links vào file trên.
Như vậy trong bảng sẽ hiện ra như thế này:
Documents
Compressed
Music
Programs
A.xls
B.doc
C.xls
(không lấy đường dẫn kèm theo mà chỉ lấy tên thôi ạ)
Chứ không có nghĩ là duyệt luôn tất cả các file năm trong các foder trong thư mục theo đường dẫn trên ạ!
Hix! Hỏi thôi mà con đã thấy thật vất vả và khó diễn đạt rồi. Không biết Thầy và mọi người có hiểu ý không, hihi!

Với macro đơn giản, gọn nhẹ sau đây có thể đáp ứng yêu cầu của bạn
 

File đính kèm

  • Quickfind.rar
    10 KB · Đọc: 321
Upvote 0
Bạn đang chia sẻ kiến thức hay là biểu diễn tài năng vậy?

Với macro đơn giản, gọn nhẹ sau đây có thể đáp ứng yêu cầu của bạn

Vì sao lại phải đặt password VBA ???
Có thể ở khu vực bạn làm việc vấn đề Password này là nan giải.Nhưng ở GPE này với cái pas của bạn thì chỉ cần 1 cái kích chuột là xong toàn tập.(Bạn có cần thử không?Nếu ai đã được đọc các bài viết của thầy switom thì đều biết cả.)

Bạn nên hiểu rõ 1 điều rằng: GPE này là nơi chia sẽ kiến thức chứ không phải là nơi sô lô trình độ bạn à.
Nếu trình độ của bạn chỉ cần hơn hẳn 1 trong số người ở câp 1 sao vàng không xoay thôi thì tôi nghĩ bạn thừa hiểu được là vấn đề Password của bạn chỉ là trò trẻ con, và qua cách đặt password của bạn mọi người trong GPE cũng có thể đoán được trình độ của bạn tồi ở mức nào!
 
Upvote 0
bài này hay quá nhưng sao khi add vào thì nó chỉ có sheet 1 thôi nhỉ cái này em muốn add vào mà khi mở file excel nào cũng có cái addin này thì làm sao ạ
 
Upvote 0
bài này hay quá nhưng sao khi add vào thì nó chỉ có sheet 1 thôi nhỉ cái này em muốn add vào mà khi mở file excel nào cũng có cái addin này thì làm sao ạ

Thì bạn lưu file thành Add-In đi, sẽ dùng được với bất cứ file nào trên máy tính của bạn mỗi khi khởi động Excel
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom