Chuyên đề giải đáp những thắc mắc về code VBA

Liên hệ QC

maytinhvp01

Thành viên thường trực
Tham gia
27/7/13
Bài viết
390
Được thích
179
Mình muốn nhờ giải thich câu lệnh " If Ran.Cells(d, c) > max Then max = Ran.Cells(d, c) "
trong ví du:
Public Function LonNhat(Ran As Range)
Dim max As Double, v As Integer, d As Integer, c As Integer
max = Ran.Cells(1, 1)
For d = 1 To Ran.Rows.Count
For c = 1 To Ran.Columns.Count
If Ran.Cells(d, c) > max Then max = Ran.Cells(d, c)
Next c
Next d
v = Tim(max, Ran)
LonNhat = max
End Function
-------------------------------------------------------
[INFO1]Thông báo:
Vì topic này:
http://www.giaiphapexcel.com/forum/...ải-thích-các-code-đề-nghị-các-bạn-gửi-vào-đây
đã quá dài nên BQT đóng lại.
Nay tôi mở topic mới với cùng chủ đề: GIẢI THÍCH NHỮNG THẮC MẮC VỀ CODE
Các bạn nếu có nhu cầu giải thích code, vui lòng post tại đây nhé
NDU96081631

[/INFO1]
 
Chỉnh sửa lần cuối bởi điều hành viên:
1. Tìm hiểu về DoEvents => chủ yếu của cái sub đó.
2. Khi UserForm1.Show thì nó gọi tiếp KEYDAT(I) => bấm chuột phải lên form =>view code
3. KEYDAT (I) => người ta định nghĩa ngay đầu module đấy, tìm trên mạng sa ra được.
 
Upvote 0

File đính kèm

  • InsertRows .xlsm
    21.7 KB · Đọc: 2
Upvote 0
Các bạn cho hỏi code dưới có thể rút gọn được không?
PHP:
Sub ThayThe()
    Selection.Replace What:="x", Replacement:="a", LookAt:=xlWhole, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="x.1", Replacement:="a", LookAt:=xlWhole, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="n", Replacement:="a", LookAt:=xlWhole, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
End Sub
xin cảm ơn!
 
Upvote 0
Mã:
Sub ThayThe()
For Each s In Array("x", "x.1", "n")   
    Selection.Replace What:=s, Replacement:="a", LookAt:=xlWhole, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
Next
End Sub
 
Upvote 0
Code này chạy bình thường, do record nên muốn biết cách rút gọn thôi
Tôi hỏi là vì ở trường hợp này cách rút gọn không quan trọng bằng cách triển khai. Học code theo tôn chỉ "rút gọn, chạy nhanh" là học sai đường.

Rút gọn: xem rõ cách rút ở bài #2588, chỉ rút ngắn được vài dòng. Nếu chỉ dùng 1 vài lần thì không xứng đáng bỏ công sửa code.
(nếu xét vấn đề chạy nhanh thì code "gọn hơn" có thể chạy chậm hơn vài phần tỷ giây; vì nó phải sử lý vòng lặp và dùng biến thay vì hằng)

Nhưng tôi không hề chê code ở bài #2588, chính vì lý do tôi đặt nặng "cách triển khai":

Triển khai: (lưu ý lại từ "chỉ dùng 1 vài lần" ở trên) bạn triển khai là vì bạn muốn dùng nhiều lần, và dùng cho nhu cầu tổng quát hơn một chút. Và code "rút gọn" ở bài #2588 không chỉ bớt số dòng code cho bạn. Nó tạo cơ hội cho code có thể triển khai để Find/Replace nhiều hơn. Nếu bạn vẫn còn chưa hiểu tôi nói gì thì bạn hỏi tác giả bài ấy chỉ dẫn thêm cho bạn cách đặt tham số cho hàm.
 
Upvote 0
Chào các bạn!
Hiện nay mình muốn code xã Filter cho 1 số sheet được chọn bất kỳ (các sheet này có thể có filter hoặc toàn bộ không có filter)
Code xã filter cho 1 sheet hoặc cho toàn bộ các sheet trong 1 file thì mình làm được nhưng code xã filter cho 1 số sheet được chọn bất kỳ thì mình chưa làm được
Mong các bạn hướng dẫn. Xin cảm ơn các bạn!
 
Upvote 0
Chào các bạn!
Hiện nay mình muốn code xã Filter cho 1 số sheet được chọn bất kỳ (các sheet này có thể có filter hoặc toàn bộ không có filter)
Code xã filter cho 1 sheet hoặc cho toàn bộ các sheet trong 1 file thì mình làm được nhưng code xã filter cho 1 số sheet được chọn bất kỳ thì mình chưa làm được
Mong các bạn hướng dẫn. Xin cảm ơn các bạn!
Bạn dùng code sau để duyệt các sheet được chọn.
Mã:
For Each Sh In ActiveWindow.SelectedSheets
    '...
Next
 
Upvote 0
Bạn dùng code sau để duyệt các sheet được chọn.
Mã:
For Each Sh In ActiveWindow.SelectedSheets
    '...
Next
Cảm ơn bạn, bài toán xã filter tôi đã làm được
Từ bài trên tôi muốn Unhide các cột của các sheet đã chọn, Unhide các cột từ cột I đến đến cột T (có thể 1 hay toàn bộ các sheet đã chọn có unhide cột hoặc không unhide cột, lưu ý không unhide các cột khác)
Tuy nhiên code dưới của tôi nó chỉ unhide 1 sheet (sheet chọn đầu tiên)
Mong các bạn chỉnh sửa giúp. Xin cảm ơn!
PHP:
Sub ShowUnhide()    ' Unhide cac sheet da chon
    Dim wks As Worksheet
    For Each wks In ActiveWindow.SelectedSheets
        Columns("I:T").Select
        Selection.EntireColumn.Hidden = False
        [I4].Select
    Next
End Sub
 
Upvote 0
Code trong vòng lặp For chỉ cần vầy
Mã:
wks.Columns("I:T").Hidden = False
 
Upvote 0
Các bạn cho tôi hỏi, tôi có code
Mã:
Sheets("Báo cáo").Select
        Range("C1").Select
sau đó tôi sửa thành

Mã:
Sheets("Báo cáo").Range("C1").Select
Thì bị báo lỗi, cho hỏi lý do. Xin cảm ơn!
 
Upvote 0
Lý do: Không được chọn (.Select) range trên sheet không phải sheet hiện hành. Viết vầy thì được.
Mã:
Application.Goto Sheets("Báo cáo").Range("C1")
 
Upvote 0
Em có hai thủ tục sử dụng chung một đoạn code giống hệt nhau, ở thủ tục thứ 2 em sử dụng lệnh Call để gọi thủ tục 1 cho đỡ phải viết lại, nhưng không biết tại sao lệnh Call không hoạt động, VBA báo lỗi. Ai giải thích giúp và em phải sửa thế nào ?. Đoạn code như sau:
Mã:
Private Sub lstTenbieu_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    Select Case uf_Nhaplieu.lstTenbieu.ListIndex
    Case 0
        MultiPage1.Value = 1
    Case 1
        MultiPage1.Value = 2
    End Select
End Sub
------------------------------------------------------------------------------------------------
Private Sub lstDS_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    Call lstTenbieu_DblClick
End Sub
Mong thầy cô, anh chị trong diễn đàn giúp đỡ
 
Upvote 0
Em có hai thủ tục sử dụng chung một đoạn code giống hệt nhau, ở thủ tục thứ 2 em sử dụng lệnh Call để gọi thủ tục 1 cho đỡ phải viết lại, nhưng không biết tại sao lệnh Call không hoạt động, VBA báo lỗi. Ai giải thích giúp và em phải sửa thế nào ?. Đoạn code như sau:
Mã:
Private Sub lstTenbieu_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    Select Case uf_Nhaplieu.lstTenbieu.ListIndex
    Case 0
        MultiPage1.Value = 1
    Case 1
        MultiPage1.Value = 2
    End Select
End Sub
------------------------------------------------------------------------------------------------
Private Sub lstDS_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    Call lstTenbieu_DblClick
End Sub
Mong thầy cô, anh chị trong diễn đàn giúp đỡ
Tôi không biết bạn muốn làm thế để làm gì. Nhưng nếu muốn gọi lstTenbieu_DblClick thì hãy để ý là nó có 1 tham số kiểu Boolean.
Vậy cách gọi vd.
Mã:
Dim a As MSForms.ReturnBoolean
    lstTenbieu_DblClick a
 
Lần chỉnh sửa cuối:
Upvote 0
Em có hai thủ tục sử dụng chung một đoạn code giống hệt nhau, ở thủ tục thứ 2 em sử dụng lệnh Call để gọi thủ tục 1 cho đỡ phải viết lại, nhưng không biết tại sao lệnh Call không hoạt động, VBA báo lỗi. Ai giải thích giúp và em phải sửa thế nào ?. Đoạn code như sau:
Mã:
Private Sub lstTenbieu_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    Select Case uf_Nhaplieu.lstTenbieu.ListIndex
    Case 0
        MultiPage1.Value = 1
    Case 1
        MultiPage1.Value = 2
    End Select
End Sub
------------------------------------------------------------------------------------------------
Private Sub lstDS_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    Call lstTenbieu_DblClick
End Sub
Mong thầy cô, anh chị trong diễn đàn giúp đỡ
Có hỏi về "lỗi" trong code thì nên diễn tả nguyên văn cái lỗi ấy.
Hàm lstTenbieu_DblClick được khai báo là cần một tham số. Gọi nó mà không cho nó tham số thì nó dẫy nẩy lên.
 
Upvote 0
Em có hai thủ tục sử dụng chung một đoạn code giống hệt nhau, ở thủ tục thứ 2 em sử dụng lệnh Call để gọi thủ tục 1 cho đỡ phải viết lại, nhưng không biết tại sao lệnh Call không hoạt động, VBA báo lỗi. Ai giải thích giúp và em phải sửa thế nào ?. Đoạn code như sau:
Mã:
Private Sub lstTenbieu_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    Select Case uf_Nhaplieu.lstTenbieu.ListIndex
    Case 0
        MultiPage1.Value = 1
    Case 1
        MultiPage1.Value = 2
    End Select
End Sub
------------------------------------------------------------------------------------------------
Private Sub lstDS_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    Call lstTenbieu_DblClick
End Sub
Mong thầy cô, anh chị trong diễn đàn giúp đỡ

Bạn khai báo Public cho cái Sub đó rồi gọi thử xem.
 
Upvote 0
Học vba vất vả quá, như học tiếng anh vậy. Thầy cô có thể cho em biết nguyên tắc để sử dụng lệnh Call được không ạ.
 
Upvote 0
Web KT
Back
Top Bottom