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:
Cảm ơn anh, tối em test ạ
Bài đã được tự động gộp:


Cảm ơn anh nhé, để em test luôn
Test luôn nè:
Mã:
Function TT(rg As Range) As Double
Dim cl As Range
Dim LT As Double, Tg As Double
For Each cl In rg
    LT = LT + cl ^ 3
    Tg = Tg + cl
Next
    TT = Sqr(LT / Tg)
End Function
 
Lần chỉnh sửa cuối:
Upvote 0
Em muốn sử dụng hàm Trim để loại bỏ những khoảng trắng mà sao em viết như thế này code không chạy, cũng không báo lỗi.
Mã:
Private Sub txtHoten_AfterUpdate()
    Application.WorksheetFunction.Trim (txtHoten.Text)
End Sub
Em phải viết như nào cho đúng ?
 
Upvote 0
Em muốn sử dụng hàm Trim để loại bỏ những khoảng trắng mà sao em viết như thế này code không chạy, cũng không báo lỗi.
Mã:
Private Sub txtHoten_AfterUpdate()
    Application.WorksheetFunction.Trim (txtHoten.Text)
End Sub
Em phải viết như nào cho đúng ?
À mình làm được rồi, phải viết như này
Mã:
Function XoaKT(ByVal txt As MSForms.TextBox)
    With Application.WorksheetFunction
        txt = .Trim(.Proper(txt))
    End With
End Function
 
Upvote 0
À mình làm được rồi, phải viết như này
Mã:
Function XoaKT(ByVal txt As MSForms.TextBox)
    With Application.WorksheetFunction
        txt = .Trim(.Proper(txt))
    End With
End Function
Nên về học kỹ lại lý thuyết về controls và đối tượng trước khi nghĩ đến những chuyện màu mè thế này.
Cũng nên tìm hiểu thêm về khác biệt giữa Sub và Function.
 
Upvote 0
Mã:
Private Sub chkList_Change()
    If uf_Nhaplieu.MultiPage1.Value = 0 And uf_Nhaplieu.chkList.Value = True Then
        Me.lstTenbieu.ListIndex = -1
        Me.lstDS.RowSource = ""
    Elseif uf_Nhaplieu.MultiPage1.Value = 0 And uf_Nhaplieu.lstTenbieu.ListIndex >= 0 then
        uf_Nhaplieu.chkList.Value = False
    End If
End Sub
Giúp em với, sub trên em viết sai chỗ nào mà chỉ chạy được điều kiện If đến phần Elseif thì sub không chạy; em phải sửa lại như thế nào ?
 
Upvote 0
Mã:
Private Sub chkList_Change()
    If uf_Nhaplieu.MultiPage1.Value = 0 And uf_Nhaplieu.chkList.Value = True Then
        Me.lstTenbieu.ListIndex = -1
        Me.lstDS.RowSource = ""
    Elseif uf_Nhaplieu.MultiPage1.Value = 0 And uf_Nhaplieu.lstTenbieu.ListIndex >= 0 then
        uf_Nhaplieu.chkList.Value = False
    End If
End Sub
Giúp em với, sub trên em viết sai chỗ nào mà chỉ chạy được điều kiện If đến phần Elseif thì sub không chạy; em phải sửa lại như thế nào ?
Tách 2 If độc lập với nhau
 
Upvote 0
Chào các bạn trong diễn đàn, mình muốn chuyển đoạn Code sau thành Hàm để sử dụng chung, nhưng chưa biết cách khai báo biến với đối tượng là Combobox, CheckBox và OptionButtun. Mong các cạn chỉ mình cách khai báo biến với nhé.
Mã:
Function TimtenCQ(cbo As MSForms.ComboBox)
Dim i As Integer, j As Integer
Dim k As String
 
    With uf_Nhaplieu.cbo
        .DropDown
        i = Application.WorksheetFunction.CountA(ThisWorkbook.Sheets("CQ").Range("I:I"))
        k = "*" & UCase(.Text) & "*"
        .List = ThisWorkbook.Sheets("CQ").Range("I1:I" & i).Value
         
            For j = .ListCount - 1 To 1 Step -1
            If Not UCase(.List(j)) Like k Then
                .RemoveItem (j)
            End If
            Next j
         
    End With
End Function
Khi mình gọi tên hàm trên thì code báo lỗi "Method of data member not found" (ở dòng này With uf_Nhaplieu.cbo)
Với những đối tượng là Combobox, CheckBox và OptionButtun mình phải khai báo biến như thế nào nhỉ ?
 
Lần chỉnh sửa cuối:
Upvote 0
Chào các bạn trong diễn đàn, mình muốn chuyển đoạn Code sau thành Hàm để sử dụng chung, nhưng chưa biết cách khai báo biến với đối tượng là Combobox, CheckBox và OptionButtun. Mong các cạn chỉ mình cách khai báo biến với nhé.
Mã:
Function TimtenCQ(cbo As MSForms.ComboBox)
Dim i As Integer, j As Integer
Dim k As String

    With uf_Nhaplieu.cbo
        .DropDown
        i = Application.WorksheetFunction.CountA(ThisWorkbook.Sheets("CQ").Range("I:I"))
        k = "*" & UCase(.Text) & "*"
        .List = ThisWorkbook.Sheets("CQ").Range("I1:I" & i).Value
        
            For j = .ListCount - 1 To 1 Step -1
            If Not UCase(.List(j)) Like k Then
                .RemoveItem (j)
            End If
            Next j
        
    End With
End Function
Khi mình gọi tên hàm trên thì code báo lỗi "Method of data member not found" (ở dòng này With uf_Nhaplieu.cbo)
Với những đối tượng là Combobox, CheckBox và OptionButtun mình phải khai báo biến như thế nào nhỉ ?
Với control mình nghĩ bạn phải tạo trước khi sử dụng (mà thứ nào chắc cũng cùng nguyên tắc nhỉ!? )
Từ khóa google: Programmatically add ComboBox in VBA (Excel)

-----------
 
Upvote 0
Chào các bạn trong diễn đàn, mình muốn chuyển đoạn Code sau thành Hàm để sử dụng chung, nhưng chưa biết cách khai báo biến với đối tượng là Combobox, CheckBox và OptionButtun. Mong các cạn chỉ mình cách khai báo biến với nhé.
Mã:
Function TimtenCQ(cbo As MSForms.ComboBox)
Dim i As Integer, j As Integer
Dim k As String

    With uf_Nhaplieu.cbo
        .DropDown
        i = Application.WorksheetFunction.CountA(ThisWorkbook.Sheets("CQ").Range("I:I"))
        k = "*" & UCase(.Text) & "*"
        .List = ThisWorkbook.Sheets("CQ").Range("I1:I" & i).Value
        
            For j = .ListCount - 1 To 1 Step -1
            If Not UCase(.List(j)) Like k Then
                .RemoveItem (j)
            End If
            Next j
        
    End With
End Function
Khi mình gọi tên hàm trên thì code báo lỗi "Method of data member not found" (ở dòng này With uf_Nhaplieu.cbo)
Với những đối tượng là Combobox, CheckBox và OptionButtun mình phải khai báo biến như thế nào nhỉ ?
Muốn vẫn để gì thì cứ nêu mục đích cần đạt được sau đó có file mẫu. Còn hàm thì vẫn truyền tham số Combobox bình thường, trong code bạn viết không có chổ nào thể hiện hàm cả ngoại trừ Function và End Function.
 
Upvote 0
Những câu hỏi của bạn thực ra liên quan đến VBA rất ít. Chúng thực ra là hỏi cách sử dụng Form và Controls. Nên đem qua thớt ấy mà hỏi.
 
Upvote 0
Chào anh chị! làm thế nào để khi kết thúc 1 đoạn code con chỏ di chuyển đến dòng cuối cùng có dữ liệu ở excel
sub GPE ()
code.......

select dòng cuối cùng
end sub
 
Upvote 0
Những câu hỏi của bạn thực ra liên quan đến VBA rất ít. Chúng thực ra là hỏi cách sử dụng Form và Controls. Nên đem qua thớt ấy mà hỏi.
Cảm ơn ae trong diễn đàn, mình mới khởi đầu về VBA nên mong các bạn thông cảm. Đoạn code trên chỉ đơn giản là mình có nhiều cái ComboBox sử dụng chung một đoạn code, chỉ khác nhau về địa chỉ là ComboBox 1, ComboBox 2,... để đỡ phải viết lại đoạn code đã viết ở ComboBox 1 thì sang ComboBox 2 mình muốn gọi nó ra. Ví dụ:
Mã:
Sub TimtenCQ ()
Dim i As Integer, j As Integer
Dim k As String

    With uf_Nhaplieu.cboTenCQ1 '(chỉ khác mỗi cái tên này)
        .DropDown
        i = Application.WorksheetFunction.CountA(ThisWorkbook.Sheets("CQ").Range("I:I"))
        k = "*" & UCase(.Text) & "*"
        .List = ThisWorkbook.Sheets("CQ").Range("I1:I" & i).Value
        
            For j = .ListCount - 1 To 1 Step -1
            If Not UCase(.List(j)) Like k Then
                .RemoveItem (j)
            End If
            Next j
        
    End With
End Sub
Ở ComboBox 2 mình phải gọi Sub trên như thế nào để không phải viết lại Code mà nó có thể thay thế cboTenCQ1 thành cboTenCQ2.
 
Upvote 0
Rows(dòng cuối).Select

Code tìm dòng cuối ở đây nhiều hơn quân Nguyên, không cần nhắc lại.
---------------
Sub Dongcuoi ()
Dim Lr as Long
Lr = Range("A65000").End(xlUp).Row
Rows(Lr + 1).Select
end sub

File khác được rồi, nhưng file này lại không chuyển màn hình đến chỉ mỗi con chỏ là sao anh nhỉ
 

File đính kèm

  • dong cuoi.xlsm
    202.9 KB · Đọc: 5
Upvote 0
Chào các bạn trong diễn đàn, mình muốn chuyển đoạn Code sau thành Hàm để sử dụng chung, nhưng chưa biết cách khai báo biến với đối tượng là Combobox, CheckBox và OptionButtun. Mong các cạn chỉ mình cách khai báo biến với nhé.

Tại sao phải thành hàm? Sub dùng chung không được à?
 
Upvote 0
Chào các bạn trong diễn đàn, mình muốn chuyển đoạn Code sau thành Hàm để sử dụng chung, nhưng chưa biết cách khai báo biến với đối tượng là Combobox, CheckBox và OptionButtun. Mong các cạn chỉ mình cách khai báo biến với nhé.
Mã:
Function TimtenCQ(cbo As MSForms.ComboBox)
Dim i As Integer, j As Integer
Dim k As String

    With uf_Nhaplieu.cbo
        .DropDown
        i = Application.WorksheetFunction.CountA(ThisWorkbook.Sheets("CQ").Range("I:I"))
        k = "*" & UCase(.Text) & "*"
        .List = ThisWorkbook.Sheets("CQ").Range("I1:I" & i).Value
       
            For j = .ListCount - 1 To 1 Step -1
            If Not UCase(.List(j)) Like k Then
                .RemoveItem (j)
            End If
            Next j
       
    End With
End Function
Khi mình gọi tên hàm trên thì code báo lỗi "Method of data member not found" (ở dòng này With uf_Nhaplieu.cbo)
Với những đối tượng là Combobox, CheckBox và OptionButtun mình phải khai báo biến như thế nào nhỉ ?
Tôi sẽ giúp nếu có file, còn nhìn code không có dữ liệu để test nên thôi vậy.
 
Upvote 0
Cảm ơn ae trong diễn đàn, mình mới khởi đầu về VBA nên mong các bạn thông cảm. Đoạn code trên chỉ đơn giản là mình có nhiều cái ComboBox sử dụng chung một đoạn code, chỉ khác nhau về địa chỉ là ComboBox 1, ComboBox 2,... để đỡ phải viết lại đoạn code đã viết ở ComboBox 1 thì sang ComboBox 2 mình muốn gọi nó ra. Ví dụ:
Mã:
Sub TimtenCQ ()
Dim i As Integer, j As Integer
Dim k As String

    With uf_Nhaplieu.cboTenCQ1 '(chỉ khác mỗi cái tên này)
        .DropDown
        i = Application.WorksheetFunction.CountA(ThisWorkbook.Sheets("CQ").Range("I:I"))
        k = "*" & UCase(.Text) & "*"
        .List = ThisWorkbook.Sheets("CQ").Range("I1:I" & i).Value
      
            For j = .ListCount - 1 To 1 Step -1
            If Not UCase(.List(j)) Like k Then
                .RemoveItem (j)
            End If
            Next j
      
    End With
End Sub
Ở ComboBox 2 mình phải gọi Sub trên như thế nào để không phải viết lại Code mà nó có thể thay thế cboTenCQ1 thành cboTenCQ2.

Đại loại nó thế này:

Mã:
Public function CreateCbo() as ComboBox
End function

Public sub WorkWithCbo(combox as ComboBox)
End sub

'Working:
Sub dosomthing()
Dim cbox as ComboBox= CreateCbo()
call WorkWithCbo(cbox)

end sub
 
Upvote 0
Web KT
Back
Top Bottom