VBA Lỗi runtime error 9 subscript out of range (4 người xem)

Liên hệ QC

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

Tôi tuân thủ nội quy khi đăng bài

dinhnhat91

Thành viên mới
Tham gia
25/10/23
Bài viết
2
Được thích
0
Em chào các bác,
Em có 2 file y hệt nhau, cùng công thức VBA, cùng số liệu, nói chung là y hệt nhau. Nhưng khi chạy VBA tách sheet, thì 1 file bị lỗi báo runtime error 9 , 1 file thì chạy bình thường.
Nhờ các bác hỗ trợ chỉ ra lỗi giúp e với ạ.
Em cảm ơn các bác nhiều
 

File đính kèm

Em chào các bác,
Em có 2 file y hệt nhau, cùng công thức VBA, cùng số liệu, nói chung là y hệt nhau. Nhưng khi chạy VBA tách sheet, thì 1 file bị lỗi báo runtime error 9 , 1 file thì chạy bình thường.
Nhờ các bác hỗ trợ chỉ ra lỗi giúp e với ạ.
Em cảm ơn các bác nhiều
Tham khảo
Thêm biến Dim Sh as worksheet
Sửa đoạn

Mã:
....
If Not Evaluate("=isref('" & v & "'!A1)") Then
       Sheets.Add(after:=Worksheets(Worksheets.Count)).Name = v
    End If
    ws.Range("A1:F" & lr).Copy sheets(v).Range("A1")
    sheets(v).Columns.AutoFit
Next v
......
Thành
Mã:
......
If Not Evaluate("=isref('" & v & "'!A1)") Then
        Set sh = Sheets.Add(after:=Worksheets(Worksheets.Count))
        sh.Name = v
    End If
    ws.Range("A1:F" & lr).Copy sh.Range("A1")
    sh.Columns.AutoFit
Next v
....
Chạy thử
 
Upvote 0
Em chào các bác,
Em có 2 file y hệt nhau, cùng công thức VBA, cùng số liệu, nói chung là y hệt nhau. Nhưng khi chạy VBA tách sheet, thì 1 file bị lỗi báo runtime error 9 , 1 file thì chạy bình thường.
Nhờ các bác hỗ trợ chỉ ra lỗi giúp e với ạ.
Em cảm ơn các bác nhiều

Có vẻ là cái biến v - variant nó chuyển thành kiểu dữ liệu khác ở mỗi file.
Nếu chuyển v thành String là hết lỗi.

Mã:
Sheets.Add(after:=Worksheets(Worksheets.Count)).Name = CStr(v)

Debug,print data type của v sẽ thấy trả về kết quả mỗi file khác nhau. Còn tại sao bị thay đổi thì tôi chưa biết.
Mã:
Debug.Print VarType(v)


Screenshot 2025-02-06 at 21.12.04.png
 
Lần chỉnh sửa cuối:
Upvote 0
Tham khảo
Thêm biến Dim Sh as worksheet
Sửa đoạn

Mã:
....
If Not Evaluate("=isref('" & v & "'!A1)") Then
       Sheets.Add(after:=Worksheets(Worksheets.Count)).Name = v
    End If
    ws.Range("A1:F" & lr).Copy sheets(v).Range("A1")
    sheets(v).Columns.AutoFit
Next v
......
Thành
Mã:
......
If Not Evaluate("=isref('" & v & "'!A1)") Then
        Set sh = Sheets.Add(after:=Worksheets(Worksheets.Count))
        sh.Name = v
    End If
    ws.Range("A1:F" & lr).Copy sh.Range("A1")
    sh.Columns.AutoFit
Next v
....
Chạy thử
E đã sửa đoạn code theo lời bác hướng dẫn và không thành công :(
Bài đã được tự động gộp:

Có vẻ là cái biến v - variant nó chuyển thành kiểu dữ liệu khác ở mỗi file.
Nếu chuyển v thành String là hết lỗi.

Mã:
Sheets.Add(after:=Worksheets(Worksheets.Count)).Name = CStr(v)

Debug,print data type của v sẽ thấy trả về kết quả mỗi file khác nhau. Còn tại sao bị thay đổi thì tôi chưa biết.
Mã:
Debug.Print VarType(v)


View attachment 306934
Qúa tuyệt vời bác ơi, thay v thành CStr(v) là nó thành công đối với file "Không thành công" của em. Mà file "Thành công" của em, vẫn là công thức đó, số liệu đó mà nó vẫn chạy dc VBA bác nhỉ.
GIỜ em thấy vẫn khó hiểu cơ
 
Upvote 0
Qúa tuyệt vời bác ơi, thay v thành CStr(v) là nó thành công đối với file "Không thành công" của em. Mà file "Thành công" của em, vẫn là công thức đó, số liệu đó mà nó vẫn chạy dc VBA bác nhỉ.
GIỜ em thấy vẫn khó hiểu cơ
Thì cái file thành công của bạn, khi xử lý biến v thì nó trả về kiểu chuỗi (8) sẵn rồi. Còn đối với file còn lại, nó trả về kiểu Currency (5) nên khi gán vào tên sheet nó sai. Bạn xem lại định dạng các cột đưa vào dictionary có bị thay đổi gì không.
 
Upvote 0
Web KT

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

Back
Top Bottom