tạo MsgBox báo lỗi (1 người xem)

  • Thread starter Thread starter DMQ
  • Ngày gửi Ngày gửi

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

DMQ

Thành viên dốt
Tham gia
21/3/12
Bài viết
722
Được thích
57
Giới tính
Nam
Em có viết đoạn code sau để khi các cell A1, A3, A5, A7 không có dữ liệu thì báo, nhưng em thấy nó rối và nếu cả 3 cell mà không có dữ liệu thì em phải bấm 3 lần "OK" nó mới hết. Em mong các AC giúp em rút gọn đoạn code này, và nếu 3 cell mà không có dữ liệu thì báo cả 3 cell nhưng chỉ hiện 1 bảng MsgBox thôi.
Mã:
 If .[A1] = Empty Then  MsgBox "cell A1 chua co Ngay"
  End If
If .[A3] = Empty Then
  MsgBox "cell A3 chua co Khach Hang"
  End If
If .[A5] = Empty Then
  MsgBox " cell A5 chua co Don Hang"
  End If
If .[A7] = Empty Then
  MsgBox " cell A7 chua co DVT"
  End If
Mong các AC giúp đỡ!!!!
 
Dim s as string
With sheet1
If .[A1] = empty then s = "cell A1 chua co ngay, "
if .[A3] = empty then s = s & "cell A3 chua co KH, "
if .[A5] = empty then s =s & "cell A5 chua co DH, "
if .[A7] = empty then s = s & "cell A7 chua cos DVT, "
end with
if len(s)>0 then msgbox left(s, len(s)-2)
 
Upvote 0
Em có viết đoạn code sau để khi các cell A1, A3, A5, A7 không có dữ liệu thì báo, nhưng em thấy nó rối và nếu cả 3 cell mà không có dữ liệu thì em phải bấm 3 lần "OK" nó mới hết. Em mong các AC giúp em rút gọn đoạn code này, và nếu 3 cell mà không có dữ liệu thì báo cả 3 cell nhưng chỉ hiện 1 bảng MsgBox thôi.
Mã:
 If .[A1] = Empty Then  MsgBox "cell A1 chua co Ngay"
  End If
If .[A3] = Empty Then
  MsgBox "cell A3 chua co Khach Hang"
  End If
If .[A5] = Empty Then
  MsgBox " cell A5 chua co Don Hang"
  End If
If .[A7] = Empty Then
  MsgBox " cell A7 chua co DVT"
  End If
Mong các AC giúp đỡ!!!!
Vụ gì vậy bạn hiền?
For... Next phát là xong chứ gì. Chẳng hạn:
Mã:
Sub Test()
  Dim n As Long, i As Long
  Dim sRes As String, arr
  arr = Array("Ngay", "Khach Hang", "Don Hang", "DVT")
  For i = 1 To 7 Step 2
    If Cells(i, "A") = Empty Then
      sRes = sRes & vbLf & "Cell " & "Cell A" & i & " chua co " & arr((i - 1) / 2)
    End If
  Next
  If Len(sRes) Then MsgBox sRes
End Sub
 
Upvote 0
Xin lỗi mọi người, em tính xé đoạn code đó ra để hỏi, nhưng khi em gán thử đoạn code của bạn Hau151978E vào thì đoạn code sau nó lại chay không được nên bây giờ em đưa nguyên code lên để mong mọi người giúp em khi không có dữ liệu ở Cell E8, E10, E12, E14 thì báo Msgbox. Mong mọi người thông cảm vì em tính học hỏi thêm mà kiến thức VBA của em "nghèo quá"
Mã:
Public Sub PX()Dim sArr(), dArr(), I As Long, J As Long, K As Long
Dim NGAY As Date, SPX As String, DVNH As String, DH As String
With Sheets("Xuat")
    NGAY = .[E8].Value: SPX = .[E10].Value: DVNH = .[E12].Value: DH = .[E14].Value
    sArr = .[E17:H28].Value
    If .[E8] = Empty Then[B][COLOR=#ff0000] <---------giúp em chổ này AH!!!!!![/COLOR][/B]
        MsgBox "Chua co NGAY", 64, "A.QUANG"
        .[E8].Select
                    Exit Sub '-------------------------------
    End If
End With
ReDim dArr(1 To UBound(sArr, 1), 1 To 8)
For I = 1 To UBound(sArr, 1)
    If sArr(I, 1) <> Empty Then
        K = K + 1: dArr(K, 1) = NGAY
        dArr(K, 2) = SPX: dArr(K, 3) = DVNH: dArr(K, 4) = DH
        For J = 1 To 4
            dArr(K, J + 4) = sArr(I, J)
        Next J
    End If
Next I
If K Then
    Sheets("CTX").[B60000].End(xlUp).Offset(1).Resize(K, 8) = dArr
    Sheets("Xuat").Range("E8,E10,E12,E14,D17:H28").ClearContents
    Sheets("Xuat").[E8].Select
    MsgBox "Da Luu xong", 64, "A.QUANG"
Else
    MsgBox "Khong co du lieu", 64, "A.QUANG"
End If

End Sub


 
Upvote 0
Em đã thêm đoạn code của bạn Hau151978 vào thì có hiện MsgBox báo lỗi, nhưng lại không chạy được code nhập liệu vào sheet"CTX"
Mã:
Public Sub PX()
Dim sArr(), dArr(), I As Long, J As Long, K As Long
Dim NGAY As Date, SPX As String, DVNH As String, DH As String
Dim tb As String
With Sheets("Xuat")
    NGAY = .[E8].Value: SPX = .[E10].Value: DVNH = .[E12].Value: DH = .[E14].Value
    sArr = .[E17:H28].Value
   If .[E8] = Empty Then tb = "E8 chua co Ngay, "
   If .[E10] = Empty Then tb = tb & "E10 chua co SPX, "
   If .[E12] = Empty Then tb = tb & "E12 chua co DVNH, "
   If .[E14] = Empty Then tb = tb & "E14 chua co DH, "
If Len(tb) > 0 Then MsgBox Left(tb, Len(tb) - 2)
     End With
          Exit Sub   '-------------------------------------
[B][COLOR=#ff0000]ReDim dArr(1 To UBound(sArr, 1), 1 To 8) [/COLOR][/B]   [B][COLOR=#0000ff]<---------------------từ chổ này code không chạy[/COLOR][/B]
[B][COLOR=#ff0000]For I = 1 To UBound(sArr, 1)
    If sArr(I, 1) <> Empty Then
        K = K + 1: dArr(K, 1) = NGAY
        dArr(K, 2) = SPX: dArr(K, 3) = DVNH: dArr(K, 4) = DH
        For J = 1 To 4
            dArr(K, J + 4) = sArr(I, J)
        Next J
    End If
Next I
If K Then
    Sheets("CTX").[B60000].End(xlUp).Offset(1).Resize(K, 8) = dArr
    Sheets("Xuat").Range("E8,E10,E12,E14,D17:H28").ClearContents
    Sheets("Xuat").[E8].Select
    MsgBox "Da Luu xong", 64, "A.QUANG"
Else
    MsgBox "Khong co du lieu", 64, "A.QUANG"
End If
End Sub[/COLOR][/B]
 
Upvote 0
Bạn sửa
If len(tb)>0 then msgbox left(tb,len(tb)-2)
End with
Exit sub
thành:
If len(tb)>0 then
msgbox left(tb,len(tb)-2)
Exit sub
End if
End with
 
Upvote 0
Cám ơn bạn Hau151978 mình đã làm được rồi, bạn có thể làm cho msgBox thiếu dữ liệu xuống từng dòng . Ví dụ:
E8 chua co Ngay
E10 chua co DVNH
E12 chua co DH
của bạn là : E8 chua co Ngay, E10 chua co DVNH....VV.VV
 
Upvote 0
Cám ơn bạn Hau151978 mình đã làm được rồi, bạn có thể làm cho msgBox thiếu dữ liệu xuống từng dòng . Ví dụ:
E8 chua co Ngay
E10 chua co DVNH
E12 chua co DH
của bạn là : E8 chua co Ngay, E10 chua co DVNH....VV.VV
Bạn sửa chỗ "E8 chưa có Ngay, " thành "E8 chua co Ngay" & chr(10), tương tự với E10, E12, E14.
Sửa msgbox left(tb,len(tb)-2) thành msgbox left(tb,len(tb)-1)
 
Upvote 0
Cám ơn bạn, mình đã làm được. Bạn có thể giải thích số(-2) và số(-1) cho mình biết với. Vì mình không thay đổi số nó vẫn hiện xuống dòng.
 
Upvote 0
Cám ơn bạn, mình đã làm được. Bạn có thể giải thích số(-2) và số(-1) cho mình biết với. Vì mình không thay đổi số nó vẫn hiện xuống dòng.
Chỗ -1 có thể bạn không nhìn rõ, đó là ký tự xuống dòng cuối cùng của tb. Nếu bạn dùng code ở trên để ra thông báo "E8 chua co Ngay, E10 chua co DVNH, " thì phải -2 để loại 2 ký tự ", " cuối chuỗi tb. Chắc bạn sẽ thắc mắc tại sao không dùng
if .[E14] = empty then tb = s & "cell E14 chua cos DVT" mà lại dùng if .[E14] = empty then tb = s & "cell E14 chua cos DVT, " (có ", " ở cuối). Bởi vì chưa chắc E14 có là ô trống hay không nên cần để ", " ở cuối mỗi lần nối thêm chuỗi, cuối cùng loại 2 ký tự cuối đi.
Đối với code -1 cũng tương tự để loại ký tự xuống dòng cuối cùng, không dùng -1 cũng không sao do ký tự này không nhìn thấy chỉ thêm 1 dòng thôi.
 
Upvote 0
Thể theo tinh thần vòng lặp của bài #3, viết như vầy:

Mã:
  Dim sRes As String, s, s1
  For Each s In Split("A1=Ngay, A3=Khach Hang, A5=Don Hang, A7=DVT", ",")
    s1 = Split(Trim(s), "=")
    If Range(s1(0)) = Empty Then
      sRes = sRes & vbNewLine & "Cell " & s1(0) & " chua co " & s1(1)
    End If
  Next
  If Len(sRes) Then
    MsgBox Mid(sRes, Len(vbNewLine) + 1)
    Exit Sub
  End If
 
Upvote 0
Em muốn hỏi trong Cột A em nhập số liệu
A1: ab1
A2: ab2
A3: bc1
A4: bc2
......
Tuy nhiên nếu trong cột A có giá trị đã nhập thì hiện thông báo lỗi và không cho nhập nữa thì làm thế nào ah
 
Upvote 0
Em muốn hỏi trong Cột A em nhập số liệu
A1: ab1
A2: ab2
A3: bc1
A4: bc2
......
Tuy nhiên nếu trong cột A có giá trị đã nhập thì hiện thông báo lỗi và không cho nhập nữa thì làm thế nào ah

Như vậy một khi đã nhập rồi thì chịu chết luôn, không cho sửa sai?
 
Upvote 0
Em muốn hỏi trong Cột A em nhập số liệu
A1: ab1
A2: ab2
A3: bc1
A4: bc2
......
Tuy nhiên nếu trong cột A có giá trị đã nhập thì hiện thông báo lỗi và không cho nhập nữa thì làm thế nào ah
Dùng Data Validation chắc là được, nhưng có điều nếu người ta không nhập tay mà copy dán vào thì Validation không nhận ra được. Muốn chắc ăn thì phải viết 1 đoạn code kiểm tra thôi
 
Upvote 0

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

Back
Top Bottom