Chuyển Sub thành Function ? (1 người xem)

Liên hệ QC

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

Hoàng Nhật Phương

Thành viên gắn bó
Tham gia
5/11/15
Bài viết
1,895
Được thích
1,219
Chuyển sub thành Function

Xin chào các bạn,
Nhờ các bạn giúp tôi chuyển Sub HideSheet sang Function HideSheets với ạ
Mục đích để cho dễ gọi thôi ạ.


Mã:
Sub HideSheet()
    If Sheet1.Visible = xlSheetVisible Then Sheet1.Visible = xlSheetVeryHidden
    If Sheet2.Visible = xlSheetVisible Then Sheet2.Visible = xlSheetVeryHidden
    If Sheet3.Visible = xlSheetVisible Then Sheet3.Visible = xlSheetVeryHidden
End Sub
Function HideSheets(hideSh As Boolean)
    'Viet nhu the nao ?
End Function

Sub Test_HideSheets()
    Call HideSheets(False)
End Sub
 
Chuyển sub thành Function

Xin chào các bạn,
Nhờ các bạn giúp tôi chuyển Sub HideSheet sang Function HideSheets với ạ
Mục đích để cho dễ gọi thôi ạ.


Mã:
Sub HideSheet()
    If Sheet1.Visible = xlSheetVisible Then Sheet1.Visible = xlSheetVeryHidden
    If Sheet2.Visible = xlSheetVisible Then Sheet2.Visible = xlSheetVeryHidden
    If Sheet3.Visible = xlSheetVisible Then Sheet3.Visible = xlSheetVeryHidden
End Sub
Function HideSheets(hideSh As Boolean)
    'Viet nhu the nao ?
End Function

Sub Test_HideSheets()
    Call HideSheets(False)
End Sub
Chỉ ẩn hiện có 3 sheets vậy thôi à?
 
Upvote 0
Chỉ ẩn hiện có 3 sheets vậy thôi à?

Xin chào ndu96081631,

Dạ vâng, đó chỉ là ví dụ thôi ạ, thực tế có thể ẩn nhiều sheet hơn và các tên sheet trong codename có thể không phải mặc định là sheet1,sheet2,sheet3

Nhờ bạn chuyển giúp theo ví dụ trên cho ạ.
 
Upvote 0
Chuyển sub thành Function

Xin chào các bạn,
Nhờ các bạn giúp tôi chuyển Sub HideSheet sang Function HideSheets với ạ
Mục đích để cho dễ gọi thôi ạ.
Lý do tại sao function dễ gọi thì chắc cao hơn trình độ của tôi.
Mục đích chính của Function là nó trả về 1 trị trong khi Sub chỉ làm việc xong thì dừng.
Trên worksheet thì Function thì dễ dàng gọi theo phương pháp hàm ngừoi dùng, trong khi Sub thì gọi theo kiểu nối nó vào một hiện tượng nào đó (ví dụ bấm nút). Tuy nhiên, hàm ngừoi dùng không cho phép thay đổi trạng thái của sheets/workbook. Tức là thực ra, Function khó gọi hơn Sub.

Nếu bảo đoán già đoán non thì tôi đoán bạn muốn nói về cái tham số.

Function HideSheet(byVal sh As WorkSheet) As Boolean
If Sheet1.Visible = xlSheetVisible Then
Sheet1.Visible = xlSheetVeryHidden
HideSheet = True
Else
HideSheet = False
End If
End Function

Sub Tét Xiếc()
Dim tet As Boolean

tet = HideSheet(Sheet1)
If tet Then
MsgBox "Đã hide được " & Sheet1.Name " ngon lành"
Else
MsgBox "Không hide được " & Sheet1.Name ", nó hidden sẵn rồi "
End If

tet = HideSheet(Sheet2)
If tet Then
MsgBox "Đã hide được " & Sheet2.Name " ngon lành"
Else
MsgBox "Không hide được " & Sheet2.Name ", nó hidden sẵn rồi "
End If

tet = HideSheet(Sheet3)
If tet Then
MsgBox "Đã hide được " & Sheet3.Name " ngon lành"
Else
MsgBox "Không hide được " & Sheet3.Name ", nó hidden sẵn rồi "
End If
End Sub

Chú: code tét xiếc trên tôi viết cho dễ hiểu chứ trên thực tế tét là như vầy
If HideSheet(Sheet1) Then...
 
Lần chỉnh sửa cuối:
Upvote 0
Xin chào ndu96081631,

Dạ vâng, đó chỉ là ví dụ thôi ạ, thực tế có thể ẩn nhiều sheet hơn và các tên sheet trong codename có thể không phải mặc định là sheet1,sheet2,sheet3

Nhờ bạn chuyển giúp theo ví dụ trên cho ạ.
Nếu các sheet cần ẩn chưa biết trước thì phải có 1 đối số truyền vào là tên các sheet chứ?
Tôi viết theo hướng trên nhé:
Mã:
Private Function HideSheets(ByVal isHidden As Boolean, ParamArray WkSheets())
  Dim aSht, wks
  On Error Resume Next
  For Each aSht In WkSheets
    If Not IsArray(aSht) Then aSht = Array(aSht)
    For Each wks In aSht
      If TypeOf wks Is Worksheet Then
        wks.Visible = IIf(isHidden, xlSheetVeryHidden, xlSheetVisible)
      End If
    Next
  Next
  If Err.Number Then MsgBox Err.Description
End Function
Code thực hiện
Mã:
Sub Test_HideSheets()
  HideSheets True, Sheet1, Sheet2, Sheet3
End Sub
Hoặc
Mã:
Sub Test_HideSheets()
  HideSheets True, Array(Sheet1, Sheet2, Sheet3)
End Sub
lưu ý rằng: giá trị isHidden = true nghĩa là ẩn và False nghĩa là hiện nhé
Đại khái thế (nhưng còn khá nhiều vấn đề trong code phải bàn lắm)
 
Upvote 0
Xin chào ndu96081631,VetMini
Cảm ơn các bạn rất nhiều , Oanh Thơ đã áp dụng được code của các bạn.
 
Upvote 0
Web KT

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

Back
Top Bottom