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ác thầy cùng mn cho e hỏi.
Có sự kiện nào trên From giống before_close không ạ.
Nghĩa là nếu đóng from thì file sẽ đóng luôn và tự động lưu file ạ.
Do gán nút lên From thì cài nút đc, nhưng nó lại còn có nút tắt trên góc phải nữa. Nên k biết làm sao
Đừng viết tắt như: r, qá, mn, e, đc, k.

Viết cho bạn bè quen biết cùng trang lứa thế nào cũng được, nhưng viết như thế trên diễn đàn đủ loại người, lứa tuổi, không quen biết là không tôn trọng người ta.

Có nhiều kiểu đóng, hủy Form. Cho dù đóng bằng cách nào thì code UserForm_QueryClose, nếu có, sẽ được thực hiện.

Vậy hãy tạo code cho UserForm_QueryClose. Trong code thì kiểm tra, cái gì là thủ phạm đóng, hủy Form. Rồi tùy vào thủ phạm và dụng ý của mình để có các cách xử lý khác nhau.

- CloseMode = vbFormControlMenu = 0: người dùng đã đóng Form bằng cách nhấn X ở góc phải phía trên, hoặc phải chuột trên thanh tiêu đề rồi chọn menu Close, hoặc nhấn tổ hợp Alt + F4. Lúc đó code QueryClose sẽ được thực hiện với CloseMode = vbFormControlMenu = 0

- CloseMode = vbFormCode = 1: Unload đã được gọi ở đâu đó, vd. trong CommandButton1_Click. Lúc đó code QueryClose sẽ được thực hiện với CloseMode = vbFormCode = 1

- CloseMode = vbAppWindows = 2: người dùng đóng Windows. Nếu người dùng đóng Windows thì Windows sẽ đóng các ứng dụng đang chạy trong đó có cả Excel, vì thế Form cũng bị đóng, tức code QueryClose sẽ được thực hiện với CloseMode = vbAppWindows = 2

- CloseMode = vbAppTaskManager = 3: người dùng kích hoạt Task Manager và thông qua nó đóng Excel, vì thế Form cũng bị đóng, tức code QueryClose sẽ được thực hiện với CloseMode = vbAppTaskManager = 3

Tự thử nghiệm với parameter Cancel. Đây là giá trị trả về. Tức có thể thiết lập Cancel = True, hoặc Cancel = False. Không thiết lập thì giống như thiết lập Cancel = False, vì Cancel = False được truyền vào UserForm_QueryClose
 
Upvote 0
Các thấy và mọi người giúp em với
Em có 1 đoạn vba
Giờ em muốn ô a1 =1 thì chạy lệnh vba được
Còn nếu a1 # 1 thì. Hiên thông báo
 
Upvote 0
Các anh cho e hỏi là cách nào xài if với #N/A không ạ, em đã thử format sang text, past value nhưng cứ khi dùng code
If Cells(i, "Cột") =" #N/A"
thì nó cứ bảo lỗi typemissmatch ạ
 
Upvote 0
Các anh cho e hỏi là cách nào xài if với #N/A không ạ, em đã thử format sang text, past value nhưng cứ khi dùng code
If Cells(i, "Cột") =" #N/A"
thì nó cứ bảo lỗi typemissmatch ạ

Đã VBA lại còn ứng dụng công thức nữa (vì #N/A thường là do công thức hàm excel trả về)
Nếu vẫn thích thế, thì để kiểm #N/A trong VBA thì xem gợi ý sau sẽ hiểu (bài này sưu tầm từ internet làm ví dụ)
Mã:
Public Function checkCells(Rg As Range) As Boolean
    Dim result As Boolean, r
    result = False
    For Each r In Rg
        If Application.WorksheetFunction.IsNA(r) Then
            result = True
            Exit For
        End If
    Next
    checkCells = result
End Function
 
Upvote 0
Cho em hỏi trong VBA có hàm nào giúp làm tròn giây thành 0 không, Ví dụ 12/7/2018 8:03:41 PM em muốn làm tròn thành 12/7/2018 8:03:00 PM (Tất cả số giây từ 1 đến 59s đều làm tròn về 0)
 
Upvote 0
Sau khi nhờ thầy @Ba Tê viết code cho file mà em muốn sử dụng. nó có 1 vài vấn đề mà em mong muốn nhờ các anh chị tìm cách giúp với.

Ở file đính kèm và hình ảnh

Hiện tại các kết quả trả về cho các cột F, N ( bôi vàng) đều Ok.

Em muốn nhờ các anh chị, thầy cô xem có viết được 1 đoạn code thỏa mãn yêu cầu như sau của em:

Khi em nhập sản phẩm vào ô C11. ở file “sau khi viet code” thì ô C12, C13 nó cũng sẽ nhảy theo. è giờ em muốn là: Khi nhập ở C11 thì các ô sau liền kề tiếp theo có giá trị giống thì ẩn đi hoặc được bôi màu trắng để khi in không thấy ( như file “ nhập tay”

Và khi nhập số lượng tại ô D11 thì số lượng bên cột I11-I12-I13 sẽ thay đổi luôn theo công thức đã định sẵn không ạ.

Xin cám ơn ạ. ( do file của em đính kèm lên. Thấy thầy @Ba Tê nói có vi rút với nhiều file rác nên em mới đính kèm hình ảnh). Mong các anh chị, thầy cô thông cảm ạ.
code của thầy ấy đây ạ:
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim sArr(), dArr(), tArr(), I As Long, K As Long, R As Long, Txt As String
Application.EnableEvents = False
If Not Intersect(Target, Range("C11:C5000")) Is Nothing Then
    If Target.Count = 1 Then
        sArr = Sheets("Data").Range("A3", Sheets("Data").Range("A3").End(xlDown)).Resize(, 6).Value
        R = UBound(sArr)
        K = -1
        With Target
            Txt = .Value
            For I = 1 To R
                If sArr(I, 2) = Txt Then
                    K = K + 1
                    .Offset(K) = Txt
                    .Offset(K, -1) = sArr(I, 1)
                    .Offset(K, 3) = sArr(I, 3)
                    .Offset(K, 4) = sArr(I, 6)
                    .Offset(K, 6) = "=RC[-5]*RC[-3]+(RC[-5]*RC[-3]*RC[-1])"
                    .Offset(K, 7) = sArr(I, 6)
                    .Offset(K, 9) = sArr(I, 6)
                    .Offset(K, 10) = sArr(I, 5)
                    .Offset(K, 11) = sArr(I, 4)
                End If
            Next I
        End With
    End If
End If
Application.EnableEvents = True
End Sub
 

File đính kèm

  • Nhap tay.png
    Nhap tay.png
    171.2 KB · Đọc: 11
  • Sau khi viet code.png
    Sau khi viet code.png
    158.7 KB · Đọc: 10
  • form chung.xlsm
    57.1 KB · Đọc: 10
Lần chỉnh sửa cuối:
Upvote 0
Sau khi nhờ thầy @Ba Tê viết code cho file mà em muốn sử dụng. nó có 1 vài vấn đề mà em mong muốn nhờ các anh chị tìm cách giúp với.

Ở file đính kèm và hình ảnh

Hiện tại các kết quả trả về cho các cột F, N ( bôi vàng) đều Ok.

Em muốn nhờ các anh chị, thầy cô xem có viết được 1 đoạn code thỏa mãn yêu cầu như sau của em:

Khi em nhập sản phẩm vào ô C11. ở file “sau khi viet code” thì ô C12, C13 nó cũng sẽ nhảy theo. è giờ em muốn là: Khi nhập ở C11 thì các ô sau liền kề tiếp theo có giá trị giống thì ẩn đi hoặc được bôi màu trắng để khi in không thấy ( như file “ nhập tay”

Và khi nhập số lượng tại ô D11 thì số lượng bên cột I11-I12-I13 sẽ thay đổi luôn theo công thức đã định sẵn không ạ.

Xin cám ơn ạ. ( do file của em đính kèm lên. Thấy thầy @Ba Tê nói có vi rút với nhiều file rác nên em mới đính kèm hình ảnh). Mong các anh chị, thầy cô thông cảm ạ.
Code đâu làm gì thấy cái code nào bạn.Thấy rồi bạn nhé.Nhưng không hiểu nên không sửa.:D.
 
Lần chỉnh sửa cuối:
Upvote 0
Đã VBA lại còn ứng dụng công thức nữa (vì #N/A thường là do công thức hàm excel trả về)
Nếu vẫn thích thế, thì để kiểm #N/A trong VBA thì xem gợi ý sau sẽ hiểu (bài này sưu tầm từ internet làm ví dụ)
Mã:
Public Function checkCells(Rg As Range) As Boolean
    Dim result As Boolean, r
    result = False
    For Each r In Rg
        If Application.WorksheetFunction.IsNA(r) Then
            result = True
            Exit For
        End If
    Next
    checkCells = result
End Function

Cảm ơn anh đã trả lời, ý tưởng ở đây của em là vlookup từ rất nhiều file khác nhau vào một file gốc, nếu có dữ liệu => nó thuộc production đó, không có dữ liêu( tức là bị #N/A) thì vlookup file của bộ phận khác đến khi hết #N/A thì thôi
 
Upvote 0
Cảm ơn anh đã trả lời, ý tưởng ở đây của em là vlookup từ rất nhiều file khác nhau vào một file gốc, nếu có dữ liệu => nó thuộc production đó, không có dữ liêu( tức là bị #N/A) thì vlookup file của bộ phận khác đến khi hết #N/A thì thôi
Đã VBA thì tìm hiểu Find của Range xem sao, dùng Vlookup làm chi cho rối và chậm
 
Upvote 0
Web KT
Back
Top Bottom