Group sheets là cái gì vậy nhóc? Mình hỏng có biết cái này là cái gì hết á!Xin chào GPE!
Em đang cần một code để kiểm tra xem trong một File có tình trạng group sheets hay không ạ.
Rất mong nhận được sự giúp đỡ.
Xin cảm ơn!
Group sheets là cái gì vậy nhóc? Mình hỏng có biết cái này là cái gì hết á!
Phải chăng nhóc chọn một sheet rồi đồng thời nhấn Shift rồi chọn thêm một sheet khác để cho nhiều sheet được chọn gọi thì gọi là GROUP hay không? Hoặc đang chọn sheet này, rồi bấm Ctrl rồi chọn thêm sheet khác nữa. Chứ tự nhiên sao nó bị vậy được?
Nếu là vậy thì làm sao mà kiểm tra được tình trạng này được!
Sub check_groupSheets()
Dim Answer
n = ActiveWindow.SelectedSheets.Count
If n > 1 Then
mSg = mSg & "Tim thay " & n & " sheet dang group" & vbNewLine & "Ban co muon Ungroup"
Answer = MsgBox(mSg, vbYesNo + vbQuestion)
If Answer = vbNo Then Exit Sub
If Answer = vbYes Then
ActiveWindow.SelectedSheets(1).Select
MsgBox ("Da~ ungroup")
End If
Else
MsgBox ("Ko tim thay Group sheets"), vbInformation
End If
End Sub
À há, nào giờ chỉ biết chọn nhiều sheet để xóa cái rẹt là xong, giờ mới biết vụ đang group mà ghi vào đâu đó thì ở đâu đó trên sheet khác cũng dính chưởng luôn! kaka, đây cũng là một kinh nghiệm mới đó.được đó bác N,
Trường hợp của Kumi cũng khá hợp lý, nếu người dùng đang Group thì có thể phát sinh lỗi như: Khi điền số liệu 1 sheet thì các sheet đang group sẽ bị điền theo, việc xoá sheet và ẩn sheet cũng thế.
' - - -
to Kumi
bạn thử code sau nhé
Mã:Sub check_groupSheets() Dim Answer n = ActiveWindow.SelectedSheets.Count If n > 1 Then mSg = mSg & "Tim thay " & n & " sheet dang group" & vbNewLine & "Ban co muon Ungroup" Answer = MsgBox(mSg, vbYesNo + vbQuestion) If Answer = vbNo Then Exit Sub If Answer = vbYes Then ActiveWindow.SelectedSheets(1).Select MsgBox ("Da~ ungroup") End If Else MsgBox ("Ko tim thay Group sheets"), vbInformation End If End Sub
Sub Macro1()
Sheets(Array("[COLOR=#ff0000]Sheet1[/COLOR]", "Sheet2", "Sheet3", "Sheet4")).Select
Sheets("Sheet1").[A1] = "hoang trong nghia"
End Sub
Cho hỏi, giả sử file của bạn đang thực thi, vô tình bạn bị group sheets mà không biết, vậy làm sao để bạn nhận ra chúng đang group? Nếu bạn chủ động bấm chạy code, thì thôi thà nhìn vào Sheet Tabs còn nhanh hơn!Hihi,Code trên đúng là cái em đang cần.
Đúng như anh PhucBuGis nói nhiều khi ta Group sheets lại để làm một cái gì đó nhưng quên không Ungroup dẫn đến nhiều hậu quả hoặc những lỗi không hay xảy ra (ví dụ anh nói là một minh họa).
Em cảm ơn anh nhiều nhé, gần đây anh tiến bộ nhanh quá.
Chúc anh trong cuộc sống gặp nhiêu thành công lớn!
Cho hỏi, giả sử file của bạn đang thực thi, vô tình bạn bị group sheets mà không biết, vậy làm sao để bạn nhận ra chúng đang group? Nếu bạn chủ động bấm chạy code, thì thôi thà nhìn vào Sheet Tabs còn nhanh hơn!
Dim n
For n = 1 To 10
Sheets(n).Activate
ActiveSheet.Unprotect Password:="xxx"
Next
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
...........
End Sub
Dim n,i
For n = 1 To 10
Sheets(n).Activate
ActiveSheet.Unprotect Password:="xxx"
Next
i = ActiveWindow.SelectedSheets.Count
If i > 1 Then ActiveWindow.SelectedSheets(1).Select
Sheets(1).Activate
Theo mình hiểu thì code của KUMI dùng để khóa toàn bộ các sheet đúng không bạn?Đúng như anh nghĩ, vì thế em sẽ gán nó vào lúc mở file hoặc lưu file.
Hoặc trong trường hợp này,cũng có thể thể dùng đến:
Mã:Dim n For n = 1 To 10 Sheets(n).Activate ActiveSheet.Unprotect Password:="xxx" Next
Với code trên khi em chạy thường hay bị lỗi ảnh đến các code nằm trong :
Mã:Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) ........... End Sub
vì thế em định làm như sau:
Mã:Dim n,i For n = 1 To 10 Sheets(n).Activate ActiveSheet.Unprotect Password:="xxx" Next i = ActiveWindow.SelectedSheets.Count If i > 1 Then ActiveWindow.SelectedSheets(1).Select Sheets(1).Activate
Dạ ngược lại anh ạ đó là mở khóa , em chỉ minh họa trong trường hợp nay là chọn nhiều sheets liên tiếp thôi ạ.. vì nó sẽ xảy ra lỗi ảnh hưởng đến những vấn đề liên quan khác.Theo mình hiểu thì code của KUMI dùng để khóa toàn bộ các sheet đúng không bạn?
Đúng như anh nghĩ, vì thế em sẽ gán nó vào lúc mở file hoặc lưu file.
Hoặc trong trường hợp này,cũng có thể thể dùng đến:
Mã:Dim n For n = 1 To 10 Sheets(n).Activate ActiveSheet.Unprotect Password:="xxx" Next .... [/QUOTE] việc mở khóa sheet thì Kumi ko phải nhất thiết phải Active từng sheet như vậy --=0, nó ảnh hưởng đến Selection_change là phải. bạn xem thử code sau có áp dụng vào được ko? [CODE]Sub Unlock_sheet() Dim ws As Worksheet Set WSArray = Sheets(Array("Sheet1", "Sheet3", "Sheẹt3", "Sheet7", "Sheet9")) For Each ws In WSArray ws.Unprotect password:="xxx" 'ws.Cells.Locked = false Next End Sub
việc mở khóa sheet thì Kumi ko phải nhất thiết phải Active từng sheet như vậy, nó ảnh hưởng đến Selection_change là phải.
bạn xem thử code sau có áp dụng vào được ko?
Mã:Sub Unlock_sheet() Dim ws As Worksheet Set WSArray = Sheets(Array("Sheet1", "Sheet3", "Sheẹt3", "Sheet7", "Sheet9")) For Each ws In WSArray ws.Unprotect password:="xxx" 'ws.Cells.Locked = false Next End Sub
Sub Macro1()
For Each sh In Worksheets
With sh
.Select '
.Unprotect Password:="xxx"
End With
Next
End Sub
Đúng là " GỪNG CÀNG GIÀ CÀNG CAY". Cảm ơn bác!Bài của KUMI có 2 yêu cầu: Bỏ Group sheets và Bỏ Password
Bỏ Group sheets mà Sheets(1).Activate là chưa ổn vì nếu trong Worksheets không có Sheets(1) thì tèo luôn. Vậy giải pháp là cứ chọn từng sheet thì tự nhiên mất Group sheets (nếu có).
Bạn nghiên cứu thử Code này (Không cần biết tên Sheet và cũng không cần biết File có bao nhiêu Sheet)
Mã:Sub Macro1() For Each sh In Worksheets With sh .Select ' .Unprotect Password:="xxx" End With Next End Sub
Bài của KUMI có 2 yêu cầu: Bỏ Group sheets và Bỏ Password
Bỏ Group sheets mà Sheets(1).Activate là chưa ổn vì nếu trong Worksheets không có Sheets(1) thì tèo luôn. Vậy giải pháp là cứ chọn từng sheet thì tự nhiên mất Group sheets (nếu có).
Bạn nghiên cứu thử Code này (Không cần biết tên Sheet và cũng không cần biết File có bao nhiêu Sheet)
Mã:Sub Macro1() For Each sh In Worksheets With sh .Select ' .Unprotect Password:="xxx" End With Next End Sub
Nói cho rõ ở chỗ này các bạn ạ:Cảm ơn Bác đã góp ý ạ,code trên thật là đẹp và rất tổng quát.
Còn về chuyện Sheets(1) cháu cứ nghĩ là Sheet này lúc nào luôn có (không thể không có). Còn Sheets(2) hay là Sheet1 thì chưa hẳn là lúc nào cũng có. không biết cháu hiểu như vậy có đúng không ạ.
Nếu cháu hiểu đúng thì có thể trong quá trình viết Bác đã viết nhầm giữa Sheets(1) và Sheet1 ạ.
Nếu cháu hiểu sai thì Bác có thể cho cháu xin một ví dụ minh họa được không ạ,hix!
Cháu rất mong nhận thêm được sự góp ý của Bác!
Nói cho rõ ở chỗ này các bạn ạ:
Sheets(1).Select
Sheets(1) có nghĩa là Sheet Item 1 và cũng có nghĩa là sheet có vị trí số 1 được chọn, chứ không phải tên sheet, vì thế nó luôn luôn tồn tại trong một Workbook. Cho nên, việc chọn Sheets(1) không bao giờ báo lỗi trừ khi sheet đó đang ẩn.
Sub UngroupSheets()
Dim shs As Sheets
Set shs = ActiveWindow.SelectedSheets
If shs.Count > 1 Then shs(1).Select
End Sub
Ô code này của Thầy hay quá,cảm ơn Thầy ạ.. nhìn code con cứ nghĩa rằng là chưa chuẩn vì giả sử ta group sheets(2) và Sheets(3) thì chạy code sẽ đứng ở Sheets(1).Lòng vòng từ đầu đến giờ sao thấy For... Next gì tùm lum hết trơn. Muốn bỏ group thì chọn 1 trong các sheet đang group là được rồi
Ví dụ:
Còn cái chuyện bỏ hay thêm password lại chả liên quan gì đến group cả (muốn bỏ cứ bỏ, muốn thêm cứ thêm)Mã:Sub UngroupSheets() Dim shs As Sheets Set shs = ActiveWindow.SelectedSheets If shs.Count > 1 Then shs(1).Select End Sub
Lòng vòng từ đầu đến giờ sao thấy For... Next gì tùm lum hết trơn. Muốn bỏ group thì chọn 1 trong các sheet đang group là được rồi
Ví dụ:
Còn cái chuyện bỏ hay thêm password lại chả liên quan gì đến group cả (muốn bỏ cứ bỏ, muốn thêm cứ thêm)Mã:Sub UngroupSheets() Dim shs As Sheets Set shs = ActiveWindow.SelectedSheets If shs.Count > 1 Then shs(1).Select End Sub
Sub UngroupSheets()
Sheets(1).Select
End Sub
For ... Next là để bỏ password của từng Sheet còn Muốn bỏ group Sheet thì có lẽ thỉ cần Sheets(1).Select (bỏ luôn If... Then)
Mã:Sub UngroupSheets() Sheets(1).Select End Sub