Hỏi về macro mở và lấy 1 đoạn tên file (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

hoangld_vt

Thành viên mới
Tham gia
20/7/09
Bài viết
4
Được thích
0
Chào các bạn
Mình muốn viết 1 đoạn macro để chọn, mở file và lấy 1 phần tên file đó. Mình có sử dụng đoạn mã ở dưới nhưng không như mong muốn, bởi :=\+nó không mở được file và khi lấy một phần tên file thì lại bị khuyêt điểm:=\+ là lấy cả phần có đuôi *.xls khi sử dụng hàm right, nếu sử dụng hàm mid thì khi lưu ở các máy khác nhau sẽ có kết quả lệch nhau, VD nếu máy em lưu ở thư mục x/y/tenfile.xls, máy khác em lưu ở thư mục aa/bb/tenfile.xls thì kết quả sẽ bị lệch.

Em gửi kèm đoạn mã, mong các bác chỉ dẫn giùm --=0

Dim myFileNames As Variant
Dim Y As Integer
Dim ngay as string
Dim FileArray
myFileNames = Application.GetOpenFilename _
(FileFilter:="Excel Files (*.xls), *.xls,Excel Files (*.xlsx), *.xlsx", MultiSelect:=False)
If myFileNames = False Then GoTo Cancel
For Y = 1 To UBound(myFileNames)
Workbooks.Open myFileNames(Y)
Next
Exit Sub
Cancel:
MsgBox "The Cancel button was selected."
ngay = Right(myFileNames, 11)
End Sub
 
Bạn phải bỏ cái đuôi phía sau từ cái dấu chấm cuối chứ, bạn xem code này

Filename = ThisWorkbook.Name
Filename = Left(Filename, InStrRev(Filename, ".") - 1)
 
Upvote 0
Chào các bạn
Mình muốn viết 1 đoạn macro để chọn, mở file và lấy 1 phần tên file đó. Mình có sử dụng đoạn mã ở dưới nhưng không như mong muốn, bởi :=\+nó không mở được file và khi lấy một phần tên file thì lại bị khuyêt điểm:=\+ là lấy cả phần có đuôi *.xls khi sử dụng hàm right, nếu sử dụng hàm mid thì khi lưu ở các máy khác nhau sẽ có kết quả lệch nhau, VD nếu máy em lưu ở thư mục x/y/tenfile.xls, máy khác em lưu ở thư mục aa/bb/tenfile.xls thì kết quả sẽ bị lệch.

Em gửi kèm đoạn mã, mong các bác chỉ dẫn giùm --=0

Dim myFileNames As Variant
Dim Y As Integer
Dim ngay as string
Dim FileArray
myFileNames = Application.GetOpenFilename _
(FileFilter:="Excel Files (*.xls), *.xls,Excel Files (*.xlsx), *.xlsx", MultiSelect:=False)
If myFileNames = False Then GoTo Cancel
For Y = 1 To UBound(myFileNames)
Workbooks.Open myFileNames(Y)
Next
Exit Sub
Cancel:
MsgBox "The Cancel button was selected."
ngay = Right(myFileNames, 11)
End Sub
Code sai nhiều quá! Phải sửa lại thôi
Trước mắt tôi xin hỏi: Bạn chỉ lấy tên file thì sao phải Workbooks.Open myFileNames(Y) để làm gì? Thêm nữa, bạn phải nói rõ bạn muốn lấy phần nào trong toàn bộ đường dẫn: Là cả đường dẫn? Chỉ tên file bao gồm phần mở rộng? Tên file không có phần mở rộng? Hay là.. khác nữa?
 
Upvote 0
:D tại em ít viết quá nên k tránh khỏi sai sót. Em xin trả lời như sau:
- em cần Open file để tiếp tục xử lý cho các khâu sau. Hiện tại em đã giải quyết đc phần này rồi.
- Em muốn lấy phần tên file, k muốn lấy phần mở rộng. VD: tenfile_ddmmyyyy.xlsx thi chỉ lấy đoạn "ddmmyyyy" thôi.
 
Upvote 0
Bạn xài thử code này xem sao.

PHP:
Sub test()
Dim File_Can_Mo, Filename
File_Can_Mo = Application.FindFile
If File_Can_Mo Then
    Filename = ActiveWorkbook.Name
    Filename = Mid(Filename, 1 + InStr(Filename, "_"), _
    InStrRev(Filename, ".") - 1 - InStr(Filename, "_"))
End If
End Sub
 
Upvote 0
:D tại em ít viết quá nên k tránh khỏi sai sót. Em xin trả lời như sau:
- em cần Open file để tiếp tục xử lý cho các khâu sau. Hiện tại em đã giải quyết đc phần này rồi.
- Em muốn lấy phần tên file, k muốn lấy phần mở rộng. VD: tenfile_ddmmyyyy.xlsx thi chỉ lấy đoạn "ddmmyyyy" thôi.
Ví dụ thế này nhé:
PHP:
Sub GetWkbName()
  Dim vFile, wkbName As String
  vFile = Application.GetOpenFilename("Excel Files, *.xls;*.xlsx;*.xlsm")
  If TypeName(vFile) = "String" Then
    With CreateObject("Scripting.FileSystemObject")
      wkbName = .GetFile(vFile).Name
      wkbName = Left(wkbName, Len(wkbName) - Len(.GetExtensionName(vFile)) - 1)
      If InStr(1, wkbName, "_") Then
        wkbName = Split(wkbName, "_")(1)
        MsgBox wkbName
      End If
    End With
  End If
End Sub
Còn phần Open Workbook gì gì đó bạn cứ làm tiếp (đường dẫn để mở file chính là biến vFile)
-------------------------
Bạn xài thử code này xem sao.

PHP:
Sub test()
Dim File_Can_Mo, Filename
File_Can_Mo = Application.FindFile
If File_Can_Mo Then
    Filename = ActiveWorkbook.Name
    Filename = Mid(Filename, 1 + InStr(Filename, "_"), _
    InStrRev(Filename, ".") - 1 - InStr(Filename, "_"))
End If
End Sub
Phải có bẫy lỗi bạn à! Ít nhất là trong trường hợp mở hộp Open file lên nhưng người ta lại bấm Cancel
 
Upvote 0
Ví dụ thế này nhé:
-------------------------
Phải có bẫy lỗi bạn à! Ít nhất là trong trường hợp mở hộp Open file lên nhưng người ta lại bấm Cancel

Thỉnh thoảng em cũng xài code này, nhưng không thấy lỗi xảy ra nếu mình bấm cancel nên em bỏ qua cái bẩy lỗi luôn.
 
Upvote 0
Web KT

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

Back
Top Bottom