Ký tự đặc biệt đại diện cho các ký tự khác trong vba là gì

Liên hệ QC

tueyennhi

Thành viên tích cực
Tham gia
18/10/10
Bài viết
1,192
Được thích
105
Em có file tên như sau 2. Forcast salary for October.xlsx
Với phần thông tin tháng thay đổi hàng tháng vậy có code nào đại diện cho phần này để nếu đổi tên thì code vẫn hiểu là chỉ đến file đó không, ví dụ

With Application.Workbooks("2. Forcast salary" & "" & ".xlsx")
 
Em có file tên như sau 2. Forcast salary for October.xlsx
Với phần thông tin tháng thay đổi hàng tháng vậy có code nào đại diện cho phần này để nếu đổi tên thì code vẫn hiểu là chỉ đến file đó không, ví dụ
With Application.Workbooks("2. Forcast salary" & "" & ".xlsx")
Vụ việc này không phải ký tự đại diện. Ký tự đại diện ? hoặc * thay thế (đại diện) cho 1 hoặc nhiều ký tự bất kỳ. Còn bạn đang muốn 1 hoặc 1 nhóm ký tự cụ thể là tháng. Vậy phải dùng 1 biến và thay giá trị cho biến đó.

Có thể làm dài dòng như sau:
Mã:
For i = 1 to 12
    Di = DateSerial(2024, i, 1)
    Mtext = Format(Di, "mmmm")
    WbName = .... & MText & ".xlsx"
Next
 
Lần chỉnh sửa cuối:
Vụ việc này không phải ký tự đại diện. Ký tự đại diện ? hoặc * thay thế (đại diện) cho 1 hoặc nhiều ký tự bất kỳ. Còn bạn đang muốn 1 hoặc 1 nhóm ký tự cụ thể là tháng.

Có thể làm dài dòng như sau:
Mã:
For i = 1 to 12
    Di = DateSerial(2024, i, 1)
    Mtext = DateSerial(Di, "mmmm")
    WbName = .... & MText & ".xlsx"
Next
Vâng, em thử thay như này
With Application.Workbooks("2. Forcast salary" & "***" & ".xlsx") thì báo lỗi ạ.
 
Vâng, em thử thay như này
With Application.Workbooks("2. Forcast salary" & "***" & ".xlsx") thì báo lỗi ạ.
"***" là chuổi 3 ký tự * liên tiếp, các hệ điều hành đều không cho đặt tên như vậy. Nên việc tìm tên có thêm "***" sẽ không thực hiện được.
"2. Forcast salary" & "***" & ".xlsx" tạm bỏ qua đuôi mở rộng để trao đổi nhé.
"2. Forcast salary" & "***" tên này chia làm 2 cụm, cụm đầu xem như không đổi.
1. Bạn hãy đưa một ví dụ cụ thể là file có dạng tên như thế nào là dạng "2. Forcast salary 241105" hay dạng nào ? và trong thư mục đó có tồn tại các tháng cũ không ?
2. Bạn chuyển thành listbox và bấm lựa chọn tháng muốn xử lý nó sẽ trực quan hơn ? vì khi dùng FSO (FileSystemObject object) thì hoàn toàn có thể liệt kê tất cả các file có cụm ban đầu là "2. Forcast salary" để lựa chọn.
 
"***" là chuổi 3 ký tự * liên tiếp, các hệ điều hành đều không cho đặt tên như vậy. Nên việc tìm tên có thêm "***" sẽ không thực hiện được.
"2. Forcast salary" & "***" & ".xlsx" tạm bỏ qua đuôi mở rộng để trao đổi nhé.
"2. Forcast salary" & "***" tên này chia làm 2 cụm, cụm đầu xem như không đổi.
1. Bạn hãy đưa một ví dụ cụ thể là file có dạng tên như thế nào là dạng "2. Forcast salary 241105" hay dạng nào ? và trong thư mục đó có tồn tại các tháng cũ không ?
2. Bạn chuyển thành listbox và bấm lựa chọn tháng muốn xử lý nó sẽ trực quan hơn ? vì khi dùng FSO (FileSystemObject object) thì hoàn toàn có thể liệt kê tất cả các file có cụm ban đầu là "2. Forcast salary" để lựa chọn.

Em ốm tuần nay giờ mới mò lên được. File đều đang mở chứ không phải chỉ định vào thư mục nào anh ạ. Chỉ cần nhận biết tên file có phần đầu là 2. Forcast salary là được.
 
Em ốm tuần nay giờ mới mò lên được. File đều đang mở chứ không phải chỉ định vào thư mục nào anh ạ. Chỉ cần nhận biết tên file có phần đầu là 2. Forcast salary là được.
Nếu chỉ cần nhận biết tên file là 2. Forcast salary thì chỉ cần cho vào vòng lặp
for each wb in workbooks
if left(wb.name,17) = "2. Forcast salary" then
' thích làm gì thì làm
end if
next wb
 
Trong VBA, ký tự đại diện thường dùng cho toán tử LIKE.

IF tênFile Like "2. ForCast*.xlsx"
(ForCast là lỗi chính tả, tiếng Mẽo đúng là ForeCast)

Dùng trong With không được bởi vì With khai báo không gian định danh. Không gian định danh chỉ là số ít chứ không thể số nhiều.
 
Trong VBA, ký tự đại diện thường dùng cho toán tử LIKE.

IF tênFile Like "2. ForCast*.xlsx"
(ForCast là lỗi chính tả, tiếng Mẽo đúng là ForeCast)

Dùng trong With không được bởi vì With khai báo không gian định danh. Không gian định danh chỉ là số ít chứ không thể số nhiều.
Tuyệt vời, cảm ơn anh rất nhiều!

Mã:
For Each Wb In Workbooks
        If Names(Wb) Like "Outsource" Then
            With Wb.Sheets("In company")
                .Range("A10").CurrentRegion.Offset(10, 1).ClearContents
                .Range("A9").Resize(k, 133) = Source
            End With
        End If
    Next Wb
 
Web KT

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

Back
Top Bottom