2012-03-29 37 views
6

Tôi đã thực hiện một dự án nhỏ, bao gồm 5 tờ excel, mã đang hoạt động tốt và tôi cũng nhận được kết quả chính xác, nhưng nếu tôi đổi tên trang tính từ trang tính thành tên khác đang nhận được Subscript ngoài phạm vi Error.Chỉ số nhỏ ngoài phạm vi số

Lý do cho việc này và những gì cần phải được thực hiện để khắc phục điều này. Hãy giúp tôi.

Dưới đây là mã

Public Sub amount_final() 

Dim Row1Crnt As Long 
Dim Row2Crnt As Long 


With Sheets("sheet4") 
Row1Last = .Cells(Rows.Count, "B").End(xlUp).Row 
End With 

Row1Crnt = 2 
With Sheets("sheet3") 
Row2Last = .Cells(Rows.Count, "B").End(xlUp).Row 
End With 
+0

Xin vui lòng gửi mã của bạn cũng –

+0

Hãy dán mã của bạn ở đây – playercharlie

Trả lời

11

Không có gì sai với mã cho mỗi gia nhập là. Bạn sẽ nhận được lỗi Subscript out of range nếu Excel không thể tìm thấy một trang tính cụ thể khá rõ ràng vì bạn đã đổi tên nó. Ví dụ: nếu bạn đổi tên trang tính "Sheet3" thành "SheetXYZ" thì Excel sẽ không thể tìm thấy trang tính đó.

Cách duy nhất để tránh các loại lỗi này là sử dụng CODENAME của trang tính. Xem Ảnh chụp

enter image description here

Ở đây chúng ta có một tờ trong đó có một tên "Tên Mẫu trước Đổi tên"

Vì vậy, xem xét mã này

Sheets("Sample Name before Renaming").Range("A1").Value = "Blah Blah" 

Mã tương tự có thể được viết như

Sheet2.Range("A1").Value = "Blah Blah" 

Cho dù bạn đổi tên bao nhiêu lần e bảng, các mã trên sẽ luôn luôn làm việc :)

HTH

Sid

+0

1 lời giải thích tốt đẹp với ảnh chụp :) –

+0

Cảm ơn siddharth, giải thích tốt đẹp và đơn giản. – neobee

+0

+1 cũng được bao phủ Sid – brettdj

1

Vấn đề cơ bản là bạn đang đề cập đến tấm bằng tên gọi thông thường của họ và không tên mã của họ. Bất cứ khi nào bạn tham khảo Trang tính ("sheet4"), bạn đang dựa vào trang tính có tên đó trong Excel. Tên mã là các tên được gán trong Visual Basic để người dùng cuối không tương tác với họ/với tư cách là nhà phát triển, bạn có thể thay đổi tên Excel bất kỳ lúc nào bạn thích

Sử dụng tên mã được bao phủ vào khoảng 9:40 trong số Excel help video này. Bạn sẽ lưu ý rằng chúng nhanh hơn so với tên Excel vì không yêu cầu vòng loại 'Trang tính()'

Tôi không thể xem Trang tính ("Sheet1") trong mẫu mã của bạn nhưng bạn có thể chuyển sang tên mã cho tất cả các trang rất nhanh chóng bằng cách tìm/thay thế tất cả các ví dụ của ví dụ 'Trang tính ("Sheet2").' với 'Sheet2.'

0

Hãy tham khảo từng trang tính theo tên mã của chúng. Chúng được đặt thành Sheet1, Sheet2, vv là mặc định, nhưng bạn có thể đổi tên chúng trong cửa sổ Properties cho mỗi trang tính nếu bạn muốn. Bằng cách này, bạn có thể viết mã của mình như dưới đây, bất kể bạn đặt tên cho các trang tính nào.

With Sheet1 
Row1Last = .Cells(Rows.Count, "B").End(xlUp).Row 
End With 

Row1Crnt = 2 
With Sheet2 
Row2Last = .Cells(Rows.Count, "B").End(xlUp).Row 
End With 

etc... 
0

Tôi muốn chia sẻ kinh nghiệm của mình khi chiến đấu với vấn đề này. Dưới đây là những sai lầm tôi cam kết:

Dim DailyWSNameNew As String 
lastrow = Sheets("DailyWSNameNew").Range("A65536").End(xlUp).Row + 1 -- This is wrong as I included a placeholder worksheet name in quotes 

Correction:

lastrow = Sheets(DailyWSNameNew).Range("A65536").End(xlUp).Row + 1 

này giải quyết nó.

0

Tôi đã gặp phải lỗi này sớm hơn nhưng không thể sử dụng bất kỳ giải pháp nào ở trên, tuy nhiên, cuối cùng tôi đã tự giải quyết được.

Tình huống của tôi là danh sách chứa trong cột A. Đối với mỗi ô có giá trị tôi đã lưu giá trị trong một biến, tạo trang tính mới và đặt tên trang tính theo giá trị được lưu trữ trong biến.

Một chút sau này trong mã tôi đã cố gắng để chọn bảng mới được tạo ra bằng cách sử dụng mã:

Sheets(ValueVariable).Select 

tôi gặp phải những "subscript ra khỏi phạm vi" lỗi và tôi không thể tìm ra lý do tại sao. Tôi đã sử dụng mã tương tự trước đây với thành công. Tuy nhiên, tôi đã giải quyết nó bằng cách truyền biến đó thành chuỗi. Khai báo biến như một chuỗi có vẻ không hoạt động đối với tôi.

Vì vậy, nếu bất cứ ai khác gặp lỗi này và muốn một cái gì đó để cố gắng, có lẽ đây sẽ làm việc cho bạn:

Sheets(Cstr(ValueVariable)).Select 
Các vấn đề liên quan