Lấy tên sheet hiện hành (tên trong VBA)

Liên hệ QC

dtExcell

Thành viên mới
Tham gia
3/8/08
Bài viết
16
Được thích
1
Chào các bạn.
Xin các bạn chỉ giúp code lấy tên sheet hiện hành ở trong VBA
(TÊN LÀ TÊN TRONG VBA, VÍ DỤ BÊN NGOÀI EXCELL LÀ SHEET "KHỐI LƯỢNG" NHƯNG NAME BÊN TRONG VBA LA "S001"). XIN CẢM ƠN.
 
Đoạn code này tôi không thấy có vấn đề gì cả, đã chạy thử, không báo lỗi gì cả! Bạn có thể nói rõ thông báo lỗi bạn gặp đó là gì không?

Lỗi xẫy ra khi bạn Rename Tên Sheet (không còn là tên mặcđịnh nữa)
Và bạn chạy Code ở nhưng Sheet đã sửa tên đó.

Minh hoa file goi kem
 

File đính kèm

  • Name Sheet.zip
    10.9 KB · Đọc: 160
Lần chỉnh sửa cuối:
Upvote 0
Lỗi xẫy ra khi bạn Rename Tên Sheet (không còn là tên mặcđịnh nữa)
Và bạn chạy Code ở nhưng Sheet đã sửa tên đó.

Minh hoa file goi kem
Vậy thì sửa như tôi đã nói ở trên là OK ngay
PHP:
Sub Sh1_Shbandau2()
  With ActiveSheet
    MsgBox "Ten Sheet hien hanh trong VB la: " & .CodeName
    Sheets(1).Activate
    MsgBox "Da chuyen qua Sheet dau tien"
    .Activate
    MsgBox "Da chuyen ve Sheet hien hanh ban dau la: " & .CodeName
  End With
End Sub
Nói thêm vể Sheets Properties
Theo tôi biết thì ở bên trong Sheets(???) phải là SheetName chứ không thể là SheetCodeName
Bạn cứ thử 1 file có 2 sheet
Sheet1 có SheetName là ndu1
Sheet2 có SheetName là ndu2

Dùng đoạn code dưới đây:
PHP:
Sub Test()
 Sheets("ndu2").Activate
End Sub
thì nó hoạt động bình thường
Còn nếu bạn sửa lại:
PHP:
Sub Test()
 Sheets("Sheet2").Activate
End Sub
hoặc
PHP:
Sub Test()
 Sheets(Sheet2).Activate
End Sub
thì ... quên đi ---> Không bao giờ chạy được
 
Lần chỉnh sửa cuối:
Upvote 0
Vậy thì sửa như tôi đã nói ở trên là OK ngay
2 Đoạn Code của bạn trong 2 bài Run rất OK. Thanks bạn nhiều.

Giả sử mình không đùng Sheet.Name va Sheet.CodeName mà mình sử dụng thứ thự của Sheet có được hông?
Mình không biết lệnh nào để lấy số thứ tự của ActiSheet???

Bạn hãy thay số thứ tự của Sheet vào 1 trong các Code chuyển sheet giúp mình với.
 
Upvote 0
Giả sử mình không đùng Sheet.Name va Sheet.CodeName mà mình sử dụng thứ thự của Sheet có được hông?
Mình không biết lệnh nào để lấy số thứ tự của ActiSheet???

Bạn dùng code sau:
PHP:
Activesheet.Index
 
Upvote 0
2 Đoạn Code của bạn trong 2 bài Run rất OK. Thanks bạn nhiều.

Giả sử mình không đùng Sheet.Name va Sheet.CodeName mà mình sử dụng thứ thự của Sheet có được hông?
Mình không biết lệnh nào để lấy số thứ tự của ActiSheet???

Bạn hãy thay số thứ tự của Sheet vào 1 trong các Code chuyển sheet giúp mình với.
Như Ca_dafi nói, đó là .Index ---> Lấy thứ tự sheet
Lưu ý: Thứ tự ở đây là vị trí, tính từ trái sang phải, không liên quan gì đến SheetName và SheetCodeName cả ---> Dời sheet sang nơi khác thì thứ tự của nó cũng thay đổi theo
----> Ở mấy bài trước tôi có nói với bạn Sheets(1) là sheet đầu tiên đấy thôi
 
Upvote 0
Minh đã kiểm tra theo ý của bạn, bạn dùng code này sẽ Acti Sheet 1 trong Book1.xls, Code lưu ở bất cứ file nào cũng được.
PHP:
Sub Test_pmh()
Workbooks("Book1.xls").Sheets("Sheet1").Activate
End Sub

Chú ý bẫy lỗi :

Trước hết phải kiểm tra có File Book1.xls hay không ??
Sau đó xem nó có đang được mở hay không ??
Và xem nó có chứa Sheet1 hay không ??

Thân!
 
Upvote 0
Các bạn cho mình hỏi là:
mình dùng hàm lấy codename bị lỗi hàm lấy name thì ok.
Mình viết như thế này


sub layten()
dim rec as string
rec= activesheet.codename// báo lỗi dòng này
msgbox rec

end sub
 
Upvote 0
Tôi khẳng định code này không lỗi trừ phi bạn vẫn để đoạn ghi chú sau 2 gạch chéo.
Lần sau tất cả các ghi chú nên kèm theo 1 nháy đơn ( ' ) . Kể cả có để trong code khi chạy không lỗi, khi soạn thảo VBA không bị báo lỗi.
 
Upvote 0
mình biết tại sao rồi, thanks b! mình tạo sheet macro4 nên nó không có code name
 
Upvote 0
mình biết tại sao rồi, thanks b! mình tạo sheet macro4 nên nó không có code name
Nhân tiện đố mọi người biết làm cách nào xác định được 1 sheet là Worksheet hay Macro Sheet hay.... vân vân ---> Đại khái xác định kiểu của 1 sheet nào đó
Ẹc... Ẹc...
 
Upvote 0
Nhân tiện đố mọi người biết làm cách nào xác định được 1 sheet là Worksheet hay Macro Sheet hay.... vân vân ---> Đại khái xác định kiểu của 1 sheet nào đó
Ẹc... Ẹc...
Lâu lâu lôi bài cũ lên trả lời chơi.

Chọn vào sheet hiện hành, trong Immediate, gõ câu lệnh

?ActiveSheet.Type

Kết quả ra giá trị (Value) nào thì tra tại bảng này:
 

File đính kèm

  • SheetType.jpg
    SheetType.jpg
    24.1 KB · Đọc: 131
Upvote 0
Sẳn đây tôi muốn hỏi:

Tôi có 2 file đang mở, tạm gọi File1 và File2, code từ File1 muốn ghi gì đó cho File2.

Giả sử File2 có 2 sheet lần lượt có tên là "HoangTrongNghia_1", "HoangTrongNghia_2", còn SheetCodeName lần lượt là "Nghia_1", "Nghia_2"

Tôi muốn lấy giá trị của Range("A1") của File1 gán cho ô B1 của sheet1 và C5 của sheet2 của File2

Tôi làm như sau:

Tại File1 tôi viết code:

Mã:
Sub Test()
    Dim GiaTriFile1 As Long
    GiaTriFile1 = Sheet4.Range("A1").Value
    With Workbooks("File2")
[COLOR=#ff0000]        .Sheets("HoangTrongNghia_1").Range("B1") = GiaTriFile1[/COLOR]
[COLOR=#ff0000]        .Sheets("HoangTrongNghia_2").Range("C5") = GiaTriFile1[/COLOR]
    End With
End Sub

Nếu tôi đổi 2 dòng màu đỏ với tên là CodeName, tức "Nghia_1" và "Nghia_2" thì tôi phải viết như thế nào? Tức không động chạm gì đến Name của Sheet hết?
 
Upvote 0
Các đại ca cứ hay sơ ý: Đáng lý là... .Activate thì lại ghi là .Active
Em cháu nhắm mắt làm theo trật lất hết
Ẹc... Ẹc...
Con đang đọc cuốn sách" Lập trình VBA cho người mới bắt đầu" của tác giả Phan Tự Hướng và sau khi đọc qua bài viết này bây giờ con mới để ý có chỗ thì tác giả dùng Active có chỗ thì tác giả lại dùng Activate nhưng không biết phân biệt 2 cái này khác nhau như thế nào. Con đã thử tìm trên diễn đàn nhưng không tìm thấy đề tài nào nói về sự khác nhau giữa cái này. Mong chú Ndu giải thích giùm con với ạ, khi nào thì ta dùng Active và khi nào thì ta lại dùng Activate.
 
Upvote 0
Con đang đọc cuốn sách" Lập trình VBA cho người mới bắt đầu" của tác giả Phan Tự Hướng và sau khi đọc qua bài viết này bây giờ con mới để ý có chỗ thì tác giả dùng Active có chỗ thì tác giả lại dùng Activate nhưng không biết phân biệt 2 cái này khác nhau như thế nào. Con đã thử tìm trên diễn đàn nhưng không tìm thấy đề tài nào nói về sự khác nhau giữa cái này. Mong chú Ndu giải thích giùm con với ạ, khi nào thì ta dùng Active và khi nào thì ta lại dùng Activate.

dùng activate khi bạn muốn chọn sheet hoặc range nào đó
dùng active khi bạn muốn nhận được thông báo "Object doesnt support this property" hoặc "method or data member not found"
 
Upvote 0
dùng activate khi bạn muốn chọn sheet hoặc range nào đó
dùng active khi bạn muốn nhận được thông báo "Object doesnt support this property" hoặc "method or data member not found"

Câu trên thì em có thể hiểu được chứ câu dưới thì em chịu thua, anh có thể giải thích dễ hiểu hơn một chút được không.
Em mới bập bẹ với VBA được mấy bữa mà anh đã phang những từ ngữ chuyên sâu : "Object doesnt support this property" hoặc "method or data member not found" thế thì quả thực hơi khó hiểu.
 
Upvote 0
Câu trên thì em có thể hiểu được chứ câu dưới thì em chịu thua, anh có thể giải thích dễ hiểu hơn một chút được không.
Em mới bập bẹ với VBA được mấy bữa mà anh đã phang những từ ngữ chuyên sâu : "Object doesnt support this property" hoặc "method or data member not found" thế thì quả thực hơi khó hiểu.

đôi khi với người nghiêm túc quá nói chơi cũng kì .
activate là tên chính xác
active là do nhầm lẫn trong đánh máy . không có phương thức nào có tên này khi áp dụng trên các sheet hoặc range .
 
Upvote 0
Câu trên thì em có thể hiểu được chứ câu dưới thì em chịu thua, anh có thể giải thích dễ hiểu hơn một chút được không.
Em mới bập bẹ với VBA được mấy bữa mà anh đã phang những từ ngữ chuyên sâu : "Object doesnt support this property" hoặc "method or data member not found" thế thì quả thực hơi khó hiểu.
Activate là phương thức tương tự như động từ, ví dụ lệnh Sheet1.Activate sẽ làm sheet1 thành sheet hiện hành (ActiveSheet).
Active tương tự như tính từ, không dùng đơn độc mà phải ghép với đối tượng như ActiveSheet là sheet hiện hành, ActiveCell là ô hiện hành. Lệnh ActiveSheet.Name sẽ trả về tên hoặc gán tên mới của sheet hiện hành.
 
Upvote 0
... có chỗ thì tác giả dùng Active có chỗ thì tác giả lại dùng Activate nhưng không biết phân biệt 2 cái này khác nhau như thế nào...

Trong tiếng Anh
Activate là động từ (verb), có nghĩa là "đưa vào trạng thái hoạt động"
Active là tĩnh từ (adjective), có nghĩa là "đang trong trạng thái hoạt động"
Lưu ý từ "trạng thái"
Trong lập trình, trạng thái là thuộc tính (attribute) của cá thể/đối tượng (object). Động tác là phuơng thức (method) của đối tượng/lớp.

Phương thức có thể có tác dụng nội (thay đổi thuộc tính của chính đối tượng), hay tác dụng ngoại (thay đổi thuộc tính của môi trường hoặc đối tượng khác); hay cả nội lẫn ngoại; hay không thay đổi gì cả (loại hàm chỉ đưa về thông tin)

Ví dụ điển hình là đối tượng của lớp Sheet. Active là một thuộc tính kín (code không thấy được) của từng đối tượng Sheet. Activate là phương thức mà lúc gọi lên thì nó chuyển Active của sheet gọi nó là true và Active của các sheets khác là false.
 
Upvote 0
Bạn dùng code sau:
PHP:
Activesheet.Index
cảm ơn bạn, đúng ý mình đang tìm hiểu. đổi tên kiểu gì cũng chạy
Thay bằng trước đây phải gõ (Worksheets("VLXD").Activate) với điều kiện tên sheet đúng là "VLXD", lệch sẽ ko chạy
Giờ thay code bằng (Worksheets(Activesheet.Index).Activate) là ok, đổi tên sheet tẹt, chỉ cần là sheet hiện hành là ok
 
Upvote 0
Giờ thay code bằng (Worksheets(Activesheet.Index).Activate) là ok,
Mình tầm thường quá nên không hiểu ý lớn vĩ đại
Mã:
Worksheets(Activesheet.Index).Activate

Tức là đưa Activesheet vào trạng thái hoạt động? Nếu sheet đang đeo huy hiệu "Activesheet" thì sao lại đưa nó vào trạng thái hoạt động? Nếu sheet đang Active - đang trong trạng thái hoạt động thì tại sao lại phải đưa nó vào trạng thái hoạt động? Để cho chắc chắn 200% là sheet ấy sẽ ở trong trạng thái hoạt động?
 
Upvote 0
Web KT

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

Back
Top Bottom