Cho em hỏi là có 1 số code thì người viết dùng sheet("A"), sheet("sheet1")...., sheet(1). ví dụ như sheet("A").select và sheet(1).select khác nhau như thế nào? Mong được các thầy chỉ dẫn.
Cho em hỏi là có 1 số code thì người viết dùng sheet("A"), sheet("sheet1")...., sheet(1). ví dụ như sheet("A").select và sheet(1).select khác nhau như thế nào? Mong được các thầy chỉ dẫn.
Theo mặt định thì tên sheet được đánh số là Sheet1, Sheet2..v..v...Nhưng trong quá trình sử dụng mình đặt tên sheet theo mục đích của mình là sheet("A") và cũng có thể là Worksheets(1), để biết được tại sao sử dụng Worksheets(1), em vào VBE và thực hiện như sau:
Nhấn nút Object Browser, vào khung classes kéo thanh cuộn xuống click chọn Sheet1 rồi sang khung Members of "Sheet1" kéo thanh cuộn xuống click chọn CodeName xong nhấn F1 để xem nội dung hướng dẫn, đại khái là như thế này:
Đặt mã cho một đối tượng có thể được sử dụng thay cho 1 biểu thức và trả về đối tượng. Ví dụ, đặt mã là 1 cho "Sheet1", đặt mã cho các sheet khác là giống hệt nhau.
Cho em hỏi là có 1 số code thì người viết dùng sheet("A"), sheet("sheet1")...., sheet(1). ví dụ như sheet("A").select và sheet(1).select khác nhau như thế nào? Mong được các thầy chỉ dẫn.
Cảm ơn bác Be09, em sẽ nghiên cứu thêm. Lão Chuột đang bắt bẽ từ ngữ vì em đánh thiếu chữ s ấy mà . Bác Bé cũng chịu lên diễn đàn ghê nhỉ, lúc thì thấy bên danketoan, lúc thì bên GPE
Cảm ơn bác Be09, em sẽ nghiên cứu thêm. Lão Chuột đang bắt bẽ từ ngữ vì em đánh thiếu chữ s ấy mà . Bác Bé cũng chịu lên diễn đàn ghê nhỉ, lúc thì thấy bên danketoan, lúc thì bên GPE
Anh đã thấy những cái sai của em nhưng không nêu lên, vì khi đọc sơ qua là đã hiểu ý rồi, nhưng em cũng nên rút kinh nghiệm để dùng câu cú cho chính xác, để các thành viên mới học VBA họ còn tham khảo để biết, nếu hỏi mà viết sai thì họ không biết như thế nào là sai?
Cho em hỏi là có 1 số code thì người viết dùng sheet("A"), sheet("sheet1")...., sheet(1). ví dụ như sheet("A").select và sheet(1).select khác nhau như thế nào? Mong được các thầy chỉ dẫn.
Để bạn khỏi nhầm lẫn giữa Name và CodeName tôi giải thích toàn bộ như sau.
1. Khi bạn mở một book mới thì mặc định bạn sẽ có Sheet1, sheet2, sheet3. Đó là những tên sheet - Name. Bạn có thể đổi tên tùy ý vd. A, B, C
2. Khi bạn vào VBE (Alt+F11) thì bạn sẽ thấy: sheet1 (sheet1), sheet2 (sheet2), sheet3 (sheet3) hoặc sheet1 (A), sheet2 (B), sheet3 (C) nếu đã đổi tên. Tức những tên trong ngoặc là tên sheet - Name. Còn những cái ngoài ngoặc là CodeName. Bạn cũng có thể đổi CodeName thành vd. he, hic, bla (chọn lần lượt sheet1 (A), sheet2 (B), sheet3 (C) rồi trong cửa sổ Properties nhập Name mới). Bây giờ bạn có: he (A), hic (B), bla (C)
3. WorkSheets hay sheets chẳng qua là thuộc tính của mỗi book - Workbook. Thuộc tính này là đối tượng (object) "quản lý" những sheet hiện có trong workbook. Những sheet hiện có trong workbook tạo thành một tập các sheet. Tổng số các sheet hiện có trong tập được xác định bởi worksheets.Count. Mỗi sheet trong tập đó dĩ nhiên là có tên - Name và "số thứ tự" tính từ 1. Chính vì thế bạn có 2 cách truy cập tới sheet cụ thể thông qua đối tượng worksheets - sheets. Tức truy cập thông qua tên - Name hoặc thông qua chỉ số - số thứ tự. Bạn nên nhớ là truy cập tới sheet mà dùng object sheets - worksheets thì phải nhập tên - Name sheet chứ không phải nhập CodeName. Ghi lòng tạc dạ nhé. Cách thứ 3 để truy cập tới sheet là dùng CodeName. Lúc này thì không dùng object sheets nữa.
Câu hỏi: Tên sheet thì tôi biết rồi nhưng làm sao tôi biết vd. sheet A có chỉ số là bao nhiêu để mà truy cập theo cách dùng chỉ số? Bạn nhìn ở thanh sheet thì thấy có thứ tự (thứ tự có thể thay đổi được) từ phải sang trái vd. là C, B, A thì có nghĩa là sheet A có chỉ số 3, sheet B có chỉ số 2 và sheet C có chỉ số 1. Tức thứ tự của sheet trong tập sheets chính là thứ tự bạn nhìn thấy trên thanh sheet.
Ví dụ cho 3 cách truy cập với tên - Name sheet, CodeName và thứ tự C, B, A là:
Mã:
Sub test()
Dim s As String
' truy cap sheet A dung Name
s = Sheets("A").Range("A1").Value
MsgBox s
' van truy cap sheet A nhung dung chi so
s = Sheets(3).Range("A1").Value
MsgBox s
' van truy cap sheet A nhung dung CodeName. Luc nay khong co sheets
s = he.Range("A1").Value
MsgBox s
End Sub
Để bạn khỏi nhầm lẫn giữa Name và CodeName tôi giải thích toàn bộ như sau.
1. Khi bạn mở một book mới thì mặc định bạn sẽ có Sheet1, sheet2, sheet3. Đó là những tên sheet - Name. Bạn có thể đổi tên tùy ý vd. A, B, C
2. Khi bạn vào VBE (Alt+F11) thì bạn sẽ thấy: sheet1 (sheet1), sheet2 (sheet2), sheet3 (sheet3) hoặc sheet1 (A), sheet2 (B), sheet3 (C) nếu đã đổi tên. Tức những tên trong ngoặc là tên sheet - Name. Còn những cái ngoài ngoặc là CodeName. Bạn cũng có thể đổi CodeName thành vd. he, hic, bla (chọn lần lượt sheet1 (A), sheet2 (B), sheet3 (C) rồi trong cửa sổ Properties nhập Name mới). Bây giờ bạn có: he (A), hic (B), bla (C)
3. WorkSheets hay sheets chẳng qua là thuộc tính của mỗi book - Workbook. Thuộc tính này là đối tượng (object) "quản lý" những sheet hiện có trong workbook. Những sheet hiện có trong workbook tạo thành một tập các sheet. Tổng số các sheet hiện có trong tập được xác định bởi worksheets.Count. Mỗi sheet trong tập đó dĩ nhiên là có tên - Name và "số thứ tự" tính từ 1. Chính vì thế bạn có 2 cách truy cập tới sheet cụ thể thông qua đối tượng worksheets - sheets. Tức truy cập thông qua tên - Name hoặc thông qua chỉ số - số thứ tự. Bạn nên nhớ là truy cập tới sheet mà dùng object sheets - worksheets thì phải nhập tên - Name sheet chứ không phải nhập CodeName. Ghi lòng tạc dạ nhé. Cách thứ 3 để truy cập tới sheet là dùng CodeName. Lúc này thì không dùng object sheets nữa.
Câu hỏi: Tên sheet thì tôi biết rồi nhưng làm sao tôi biết vd. sheet A có chỉ số là bao nhiêu để mà truy cập theo cách dùng chỉ số? Bạn nhìn ở thanh sheet thì thấy có thứ tự (thứ tự có thể thay đổi được) từ phải sang trái vd. là C, B, A thì có nghĩa là sheet A có chỉ số 3, sheet B có chỉ số 2 và sheet C có chỉ số 1. Tức thứ tự của sheet trong tập sheets chính là thứ tự bạn nhìn thấy trên thanh sheet.
Ví dụ cho 3 cách truy cập với tên - Name sheet, CodeName và thứ tự C, B, A là:
Mã:
Sub test()
Dim s As String
' truy cap sheet A dung Name
s = Sheets("A").Range("A1").Value
MsgBox s
' van truy cap sheet A nhung dung chi so
s = Sheets(3).Range("A1").Value
MsgBox s
' van truy cap sheet A nhung dung CodeName. Luc nay khong co sheets
s = he.Range("A1").Value
MsgBox s
End Sub
Một bài viết rất hữu ích. Qua đây theo em hiêu là nếu ta dùng worksheets.Count để truy cập vào sheet nào đó theo số thứ tự sheet thì dễ có lỗi nếu người dùng move sheet đó qua vị trí khác. Như ví dụ trên của thầy nếu thứ tự sheet bị người dùng move sheet thành C, A, B thì khi chạy code trên thì code sẽ bị truy cập sai sheet. Hic dùng tên sheet theo chỉ số cũng nguy hiểm thật.
Sub TrichLoc()
Dim Tmp As String: Dim J As Byte
Dim Sh As Worksheet
Tmp = "TrichLoc"
For Each Sh In ThisWorkbook.Worksheets
J = J + 1
If Sh.Name = Tmp Then
MsgBox Sh.Name, , Str(J)
ElseIf IsNumeric(Right(Sh.Name, 1)) Then
MsgBox Sh.Name, , J
Else
MsgBox Sh.Name, , CStr(J)
End If
Next Sh
End Sub
Sub TrichLoc()
Dim Tmp As String: Dim J As Byte
Dim Sh As Worksheet
Tmp = "TrichLoc"
For Each Sh In ThisWorkbook.Worksheets
J = J + 1
If Sh.Name = Tmp Then
MsgBox Sh.Name, , Str(J)
ElseIf IsNumeric(Right(Sh.Name, 1)) Then
MsgBox Sh.Name, , J
Else
MsgBox Sh.Name, , CStr(J)
End If
Next Sh
End Sub