cho em xin code đến sheet khác (2 người xem)

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

hoangtrong_vbnd

Thành viên hoạt động
Tham gia
14/1/11
Bài viết
156
Được thích
7
Giới tính
Nam
em đã tạo được một nút nhấn ẩn-hiện các file làm việc, chỉ giữ lại 2 sheet chính
bây giờ em muốn tạo các nút nhấn khác mà khi nhấn vào nó sẽ hiện các sheet mình muốn
VD như: nút D100 khi nhấn vào sẽ hiện D110 và D120,
nút D200 khi nhấn vào sẽ hiện D210 và D220
nút G100 khi nhấn vào sẽ hiện G110 và G120
nhờ các bác giúp em với, file làm việc của em có quá nhiều sheet muốn thu gon lại cho dễ nhìn.
Mong các bác biết giúp đỡ, em cảm ơn !!!
 

File đính kèm

Thiết kế cho mỗi thằng em shape 1 đoạn code

[GPECODE=vb]
Sub Unhide
Sheets("D110").Visible = -1: Sheets("D120").Visible = -1
End Sub
[/GPECODE]

Thay đổi tên với các nút còn lại cho khỏe
 
Upvote 0
Thiết kế cho mỗi thằng em shape 1 đoạn code

[GPECODE=vb]
Sub Unhide
Sheets("D110").Visible = -1: Sheets("D120").Visible = -1
End Sub
[/GPECODE]

Thay đổi tên với các nút còn lại cho khỏe
cám ơn bác đã chỉ dẫn nhưng file gốc của em có nhiều sheet quá mà cứ tầm 2-3 sheet làm việc cùng 1 chủ đề nên muốn hiện các sheet cùng chủ đề trong số các sheet đã ẩn để dễ nhìn, bác có đoạn code nào giúp em với
 
Upvote 0
file làm việc gốc của em có 55 sheet trừ đi 3 sheet chính còn 52 được sắp xếp theo các chủ đề khác nhau A B C D ... nên ban đầu em tạo nút ấn ẩn đi tất cả các sheet làm việc, tiếp theo tạo các nút ấn để hiện các chủ đề thì em bị vướng nên lên đây để nhờ các bác giúp đỡ
làm sao để khi ấn vào nút A thì hiện các sheet chủ đề A, nút B thì hiện các sheet chủ đề B ... bác nào biết chỉ giúp em với
(em mù về code vba mà sếp bảo làm mấy nút ấn cho file dễ nhìn nên ...)
mong các bác giúp đỡ
 
Upvote 0
Vậy rồi phải đặt ra 55 cái nút à? Sếp của bạn chỉ nói mò thôi chứ chưa thực hiện cho nên chưa thấu đáo sự phức tạp của vấn đề.

Giải thuật:
Đặt một nút
Đặt code cho nút, hễ nhấn vào thì nó hiện ra một bảng cho mình lựa sheets để hiện. Bảng này tốt nhât là dùng form với check box.
Code đọc tên các sheets và lập lên form nói trên.
 
Upvote 0
Giải thuật:
Đặt một nút
Đặt code cho nút, hễ nhấn vào thì nó hiện ra một bảng cho mình lựa sheets để hiện. Bảng này tốt nhât là dùng form với check box.
Code đọc tên các sheets và lập lên form nói trên.
bác có thể chỉ giáo thêm chút không ... em vẫn chưa hiểu lắm

ko phải là đặt 55 cái nút mà chỉ tầm 8 cái thôi ... vì các sheet làm việc cho một phần riêng ví dụ như chủ đề Tiền: A1, A2, A3 rồi chủ đề HTK: B1, B2, B3 ... nên em muốn hiện các sheet làm việc cùng 1 chủ đề cho dễ nhìn thôi
 
Upvote 0
Nếu vậy thì đặt cho mỗi nhóm sheet một cái tên gì đó, ví dụ "NHOM1_S1", "NHOM1_S2", "NHOM1_S3", "NHOM2_S1", ...

Lúc click button, hiện ra hộp thoại hỏi: "xin cho biết số của nhóm muốn chọn", ghi câu trả lời vào biến nhom

For Each sh in activeworkbook.sheets
sh.Visble = (InStr(sh>Name, "NHOM" & nhom) > 0)
Next

Dùng một combobox xổ suống để chọn cũng được nhưng viết code hơi dài dòng hơn.
 
Upvote 0
vì tên sheet là cty đặt nên ko đổi được như A110,A120, A210,A220, B110,B120, B210,B220 ... em muốn tìm cách nào mà khi nhấn vào nút mình tạo sẽ hiện lên các sheet A... hoặc các sheet B...
cảm ơn bác vì đã giúp đỡ, em sẽ nghiên cứu theo cách bác xem sao
 
Upvote 0
Không phải các nhóm của bạn là A1, A2, B2, B2,... hay sao?

Nếu tên phức tạp quá thì lập một sheet chứa tên và phân nhóm.
 
Upvote 0
Không phải các nhóm của bạn là A1, A2, B2, B2,... hay sao?

Nếu tên phức tạp quá thì lập một sheet chứa tên và phân nhóm.
e xem có mấy đoạn code hiện theo tên ... ví dụ (1 To Sheets.Count, 1 To 2 ) nếu không hiện được theo chủ đề A B C thì cứ hiện 2 sheet một lần cũng được nhưng e ko biết cách viết. Bác giúp em với, mục đích của em là gọi 2 sheet ẩn ra một lần hoặc các sheet cùng chủ đề hiện ra một lần(nếu được) nhưng e ko biết viết code nên cứ đi mò xem có đoạn code nào phù hợp để dùng mà chưa thấy
Mong bác giúp đỡ, e cảm ơn !!!
 
Upvote 0
Tôi ít khi viết code lắm. Theo quan niệm của tôi thì hướng dẫn giải thuật sẽ giúp cho bạn học tập vững chắc hơn.
Đây là trường hợp ngoại lệ, vì bạn cần làm mà không rành về code.

Mã:
Option Explicit

Const NAMESTRDELIM = "|"

Sub AnSheets()
Const SHEETCHU = "DieuKhien" ' tên sheet chủ, bạn sửa tên sheet chủ ở đây
Const VUNGTENSHEETS = "A1:A10" ' vùng chứa tên các sheet cần chừa lại, không ẩn. Nếu cần sửa thì sửa ở đây

Dim rg As Range

Dim danhSach As String ' lap danh sach cac sheet se khong bi an
danhSach = SHEETCHU ' luon luon chua sheet chu khong an

For Each rg In Sheets(SHEETCHU).Range(VUNGTENSHEETS)
If rg.Value <> "" Then
danhSach = danhSach & NAMESTRDELIM & Trim(rg.Value)
End If
Next

danhSach = NAMESTRDELIM & danhSach & NAMESTRDELIM

AnChuaLaiSheets danhSach
End Sub


Sub AnChuaLaiSheets(ByVal danhSach As String)
' an tat ca cac sheet, tru nhom sheet trong danhSach
danhSach = LCase(danhSach)
Dim sh As Worksheet
For Each sh In ActiveWorkbook.Sheets
sh.Visible = (InStr(danhSach, LCase(NAMESTRDELIM & sh.Name & NAMESTRDELIM)) > 0)
Next
End Sub

Trong vùng A1:A10, bạn ghi tên các sheets cần hiện, xong chạy sub AnSheet.
Nếu bạn có nút thì cứ bảo hàm buttonClick gọi sub này.
 
Upvote 0
không biết em lại sửa sai hay sao mà ko chạy được bác ạ, bác giúp e với :(
Sub AnSheets()
Const SHEETCHU = "MENU"
Const VUNGTENSHEETS = "TENKH"
Dim rg As Range
Dim danhSach As String
danhSach = SHEETCHU
For Each rg In Sheets(SHEETCHU).Range(VUNGTENSHEETS)
If rg.Value <> "" Then
danhSach = danhSach & NAMESTRDELIM & Trim(rg.Value)
End If
Next
danhSach = NAMESTRDELIM & danhSach & NAMESTRDELIM
AnChuaLaiSheets danhSach
End Sub




Sub AnChuaLaiSheets(ByVal danhSach As String)
danhSach = LCase(danhSach)
Dim sh As Worksheet
For Each sh In ActiveWorkbook.Sheets
sh.Visible = (InStr(danhSach, LCase(NAMESTRDELIM & sh.Name & NAMESTRDELIM)) > 0)
Next
End Sub
 
Upvote 0
không biết em lại sửa sai hay sao mà ko chạy được bác ạ, bác giúp e với :(

Bạn có thử cách của mình gửi ý không muốn ẩn sheet nào thì đánh tên của sheet đó làm vài sub gán cho từng nút lệnh cách của bạn VetMini mình demo bạn coi xem có gì thay đổi lại xem file nhen
 

File đính kèm

Upvote 0
không biết em lại sửa sai hay sao mà ko chạy được bác ạ, bác giúp e với :(

VUNGTENSHEET là một hằng số để chỉ định cái range mà bạn chứa tên các sheet cần giữ lại.

Trong chỉ dẫn tôi có nói bảo bạn ghi tên các sheet cần giữ lại vào các ô từ A1 đến A10, mỗi tên một ô. Nếu bạn muốn ghi vào chỗ khác thì sửa vùng lại.
 
Lần chỉnh sửa cuối:
Upvote 0
xem file của bác e mới hiểu ... cám ơn 2 bác đã giúp đỡ !!!
 
Upvote 0
Hai dòng trên cùng tôi đâu có kêu sửa, bạn cắt mất chúng rồi:

Mã:
[COLOR=#ff0000]Option Explicit

Const NAMESTRDELIM = "|"

[/COLOR]Sub AnSheets()

...
e cứ nghĩ các code phải bắt đầu bằng sub và kết thúc bằng end sub ... hihi, xin lỗi bác. xem file bác nmhung mới hiểu, nhưng mình đánh trực tiếp tên sheet của mình vào code ko được ạ hay phải viết trên vùng tham chiếu của nó
 
Upvote 0
e cứ nghĩ các code phải bắt đầu bằng sub và kết thúc bằng end sub ... hihi, xin lỗi bác. xem file bác nmhung mới hiểu, nhưng mình đánh trực tiếp tên sheet của mình vào code ko được ạ hay phải viết trên vùng tham chiếu của nó

Đánh trực tiếp vào code chi vậy?
Lúc làm giải thuật này, tôi đã tính qua trường hợp nguời dùng biết rất ít về code. Cho nên công việc của bạn cần phải làm là:

1. Copy nguyên code vào module1
2. Sửa tên sheet chủ (tức là cái sheet đứng làm chủ, không chịu ảnh hưởng ẩn hiện gì cả). Tức là sửa "DieuKhien" thành "MENU".
3. Trong sheet MENU, ghi D110 và ô A1, D120 vào ô A2 (2 sheets D110 và D120 là 2 sheet cần giữ lại, không bị ẩn)
3. chạy macro AnSheet. Macro này sẽ ẩn tất cả các sheet, chừa lại sheet MENU, D110 và D120

Công việc 1 và 2 chỉ làm 1 lần duy nhất. Sau đó mỗi lần cần ẩn hiện sheet thì chỉ việc làm côn việc 3 và 4 vào sửa các tên sheet trong A1, A2, ... và run macro.
 
Upvote 0
tại trên các sheet của em đều có dữ liệu cả, mà tạo vùng tham chiếu của nó thì lại phải tìm 1 góc nào đó.
Nên em muốn điền trực tiếp tên sheet vào code cho tiện.
 
Upvote 0
tại trên các sheet của em đều có dữ liệu cả, mà tạo vùng tham chiếu của nó thì lại phải tìm 1 góc nào đó.
Nên em muốn điền trực tiếp tên sheet vào code cho tiện.

Ý tưởng quái đản.

Nếu điền trực tiếp thì không còn gì dễ hơn

Mã:
Sub t()
For Each sh In ActiveWorkbook.Sheets
sh.Visible = (sh.Name = "MENU")
Next
Sheets("Sheet1").Visible = True ' sửa tên sheets ở đây. Bao nhiếu sheet cần hiện thì bấy nhiêu dòng
Sheets("Sheet2").Visible = True
End Sub
 
Upvote 0
Nếu điền trực tiếp thì không còn gì dễ hơn

Mã:
Sub t()
For Each sh In ActiveWorkbook.Sheets
sh.Visible = (sh.Name = "MENU")
Next
Sheets("Sheet1").Visible = True ' sửa tên sheets ở đây. Bao nhiếu sheet cần hiện thì bấy nhiêu dòng
Sheets("Sheet2").Visible = True
End Sub

vậy là chỉ cần điền tên các sheet vào code này thôi ạ,
ví dụ
Sheets("D110","D120","D210").Visible = True ' sửa tên sheets ở đây. Bao nhiếu sheet cần hiện thì bấy nhiêu dòng
Sheets("E110","E120","E210").Visible = True
Sheets("F110","F120","F210").Visible = True


Thôi để e làm theo cách đầu cũng được, cái này e vẫn chưa hiểu cách làm nên ko được. Cám ơn bác đã giúp đỡ em !!!
 
Lần chỉnh sửa cuối:
Upvote 0
Nếu một nút có 2 tác dụng ẩn hiện thì viết code thế nào bạn
Cám ơn
 
Upvote 0

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

Back
Top Bottom