Đặt tên sheet trong VBA. (1 người xem)

Liên hệ QC

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

matran25251325

Thành viên tiêu biểu
Tham gia
13/1/11
Bài viết
424
Được thích
39
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.
 
Upvote 0
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 tôi nghĩ bạn có chút nhầm lẫn chỗ: sheet("sheet1") đúng phải là: sheets("sheet1") , sheet(1) đúng phải là: sheets(1).
Bạn kiểm tra lại xem!
 
Upvote 0
Theo tôi nghĩ bạn có chút nhầm lẫn chỗ: sheet("sheet1") đúng phải là: sheets("sheet1") , sheet(1) đúng phải là: sheets(1).
Bạn kiểm tra lại xem!

Em làm như anh hướng dẫn như trên để xem Code Microsoft hướng dẫn là Worksheets(1) hay sheets(1) nhé.

Còn 1 cách đặt tên sheet khác là wksDULIEU.
 
Lần chỉnh sửa cuối:
Upvote 0
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à --=0. 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 --=0
 
Upvote 0
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à --=0. 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 --=0

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?
 
Lần chỉnh sửa cuối:
Upvote 0
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

Còn nhiều object tương tự, tức object "quản lý" một tập object nào đó. Vd. Sheet có thuộc tính Shapes, là object "quản lý" tất cả các shape có trên worksheet. Shapes.Count trả về số lượng shape có trên sheet. Shapes("hic hic") trả về shape có tên - Name là "hic hic", Shapes(3) trả về shape thứ 3 trong tập shapes.

Như thế là bạn thấy tất cả những object "quản lý" một tập nào đó (những sheet, shape v...v) chúng rất giống nhau. Thuộc tính Count trả về số lượng trong tập. Truy cập tới một "vị" trong tập có thể thông qua tên - Name hoặc thông qua chỉ số - số thứ tự trong tập.
 
Upvote 0
Để 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

Còn nhiều object tương tự, tức object "quản lý" một tập object nào đó. Vd. Sheet có thuộc tính Shapes, là object "quản lý" tất cả các shape có trên worksheet. Shapes.Count trả về số lượng shape có trên sheet. Shapes("hic hic") trả về shape có tên - Name là "hic hic", Shapes(3) trả về shape thứ 3 trong tập shapes.

Như thế là bạn thấy tất cả những object "quản lý" một tập nào đó (những sheet, shape v...v) chúng rất giống nhau. Thuộc tính Count trả về số lượng trong tập. Truy cập tới một "vị" trong tập có thể thông qua tên - Name hoặc thông qua chỉ số - số thứ tự trong tập.
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.
 
Upvote 0
Dim sArr(), dArr(), i As Long, j As Long
Dim ShName As String, tArr()
ShName = "Trichloc"
With Sheets(ShName)

Với ShName= "Trichloc", muốn thay đổi để code sẽ thực hiên được trên các sheet có tên tương tự "Trichloc" ( ví dụ Trichloc1 hoặc Trichloc2) vẫn chạy được, phải sửa lại như thế nào ạ.
Xin cảm ơn.
 
Lần chỉnh sửa cuối:
Upvote 0
PHP:
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
 
Upvote 0
Dim sArr(), dArr(), i As Long, j As Long
Dim ShName As String, tArr()
ShName = "Trichloc"
With Sheets(ShName)

Với ShName= "Trichloc", muốn thay đổi để code sẽ thực hiên được trên các sheet có tên tương tự "Trichloc" ( ví dụ Trichloc1 hoặc Trichloc2) vẫn chạy được, phải sửa lại như thế nào ạ.
Xin cảm ơn.

Tại sao dùng Worksheets(1) mà không dùng Worksheets("Sheet1")
Bạn đọc bài 10 của Topic sau (để hiểu).

http://www.giaiphapexcel.com/dienda...-để-sum-các-file-excel-với-nhau-không.129754/
 
Upvote 0
PHP:
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
Em cảm ơn
 
Upvote 0
Upvote 0
Web KT

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

Back
Top Bottom