Chuyên mục xử lý, gỡ rối code VBA

Liên hệ QC
Status
Không mở trả lời sau này.

ndu96081631

Huyền thoại GPE
Thành viên BQT
Super Moderator
Tham gia
5/6/08
Bài viết
30,703
Được thích
53,930
Lệnh điều khiển máy in mình không rành, dùng tạm code
Mã:
Sub preview_td()
Dim p1 As Long, p2 As Long, n As Long, i As Long, j As Long
p1 = Sheet2.Range("P2").Value
p2 = Sheet2.Range("P3").Value
n = Sheet2.Range("P5").Value 'so bo can in
If IsNumeric(p1) = False Or IsNumeric(p2) = False Or IsNumeric(n) = False Then
  tb = MsgBox("So code va so bo can in phai la so.", , "Thông báo")
  Exit Sub
End If

If p1 > p2 Then
  tb = MsgBox("So code sau phai >= so code truoc.", , "Thông báo")
  Exit Sub
End If

If p1 < 1 Then
  tb = MsgBox("So code phai >= 1.", , "Thông báo")
  Exit Sub
End If

If n < 1 Then
  tb = MsgBox("So bo can in phai >= 1.", , "Thông báo")
  Exit Sub
End If

For i = p1 To p2
  Sheet2.Range("O1").Value = i
  For j = 1 To n
     'Sheet2.PrintOut
     Sheet2.PrintPreview
  Next j
Next

End Sub
Cảm ơn anh cái code này, đã in đc số lượng bộ nhiều. Nhưng nó ko in 1 lượt từ "p1" đến "p2" mà nó in "p1" 7 lần rồi "p2" 7 lần. Anh có thể chỉnh lại code này sao cho nó in 1 lượt từ p1 đến p2 rồi lặp lại p1 đến p2 với số lần là n đc không ạ? Thanks anh!
 
Upvote 0
Cảm ơn anh cái code này, đã in đc số lượng bộ nhiều. Nhưng nó ko in 1 lượt từ "p1" đến "p2" mà nó in "p1" 7 lần rồi "p2" 7 lần. Anh có thể chỉnh lại code này sao cho nó in 1 lượt từ p1 đến p2 rồi lặp lại p1 đến p2 với số lần là n đc không ạ? Thanks anh!
Chỉnh lại đoạn cuối
Mã:
For j = 1 To n
  For i = p1 To p2
    Sheet2.Range("O1").Value = i
    'Sheet2.PrintOut
    Sheet2.PrintPreview
  Next i
Nextj
 
Upvote 0
Các huynh cho em hỏi code dò dữ liệu theo 2 điều kiện. trong ví dụ thì như sau:
sheet ck sẽ là dữ liệu ban đầu có sẵn
trong sheet chenh lech thì i8 và i9 sẽ là điều kiện để lọc dữ liệu. i10 sẽ là kết quả. trong đó i10 sẽ thỏa mãn các điều kiện sau:
i10 là ô trong sheet ck là giao của hàng có giá trị là giá trị đang ở i8 và cột đang chứa giá trị của i9. E cảm ơn các anh ạ
 

File đính kèm

  • do 2 dk.xls
    35 KB · Đọc: 7
Upvote 0
Em hỏi code dò dữ liệu theo 2 điều kiện. trong ví dụ thì như sau:
sheet ck sẽ là dữ liệu ban đầu có sẵn
trong sheet chenh lech thì i8 và i9 sẽ là điều kiện để lọc dữ liệu. i10 sẽ là kết quả. trong đó i10 sẽ thỏa mãn các điều kiện sau:
i10 là ô trong sheet ck là giao của hàng có giá trị là giá trị đang ở i8 và cột đang chứa giá trị của i9.
Viết hẵn cho bạn 1 hàm tự tạo luôn, đây:
PHP:
Function SoChuyen(MaDV As String, Tháng As Integer)
 Dim Rng As Range, sRng As Range, Sh As Worksheet
 Set Sh = ThisWorkbook.Worksheets("CK")
 Set Rng = Sh.Columns("B:b")
 Set sRng = Rng.Find(MaDV, , xlFormulas, xlWhole)
 If sRng Is Nothing Then
    SoChuyen = "Nothing"
 Else
    SoChuyen = sRng.Offset(, Tháng).Value
    If SoChuyen = "" Then SoChuyen = "GPE.COM"
 End If
End Function
 
Upvote 0
Viết hẵn cho bạn 1 hàm tự tạo luôn, đây:
PHP:
Function SoChuyen(MaDV As String, Tháng As Integer)
 Dim Rng As Range, sRng As Range, Sh As Worksheet
 Set Sh = ThisWorkbook.Worksheets("CK")
 Set Rng = Sh.Columns("B:b")
 Set sRng = Rng.Find(MaDV, , xlFormulas, xlWhole)
 If sRng Is Nothing Then
    SoChuyen = "Nothing"
 Else
    SoChuyen = sRng.Offset(, Tháng).Value
    If SoChuyen = "" Then SoChuyen = "GPE.COM"
 End If
End Function
tks bạn, để mình thử ạ
 
Upvote 0
Mọi người cho em hỏi ah: em chạy code nhưng excel tự động tắt là sao ah? mặc dù chạy code khác thì bình thường. Giúp em với ah!
Em chạy trên cả 2 office 2007 và 2010 đều không được ah.
 
Upvote 0
Em chạy code nhưng excel tự động tắt là sao ah? mặc dù chạy code khác thì bình thường. Giúp em với ah!
Em chạy trên cả 2 office 2007 và 2010 đều không được ah.

Vậy thì 1 trong 2 thứ í bị bệnh nặng lắm rồi: Excel hay Code của bạn!
Nếu là do Excel, thì cài lại;
Nếu là do Code thì nên đưa lên diễn đàn để i bác sỹ hội chẩn cho.

Chúc vui!
 
Upvote 0
Em có một thắc mắc tại sao khi chạy code VBA thì ta sẽ không thể Undo lại được nữa?
 
Upvote 0
Mọi người chỉ giúp em với, em muốn paste dữ liệu từ cột clipboard vào useform nhưng không được, mọi người có cách nào không ?
 

File đính kèm

  • 22552606_1855092237851758_1999908251608793798_n.jpg
    22552606_1855092237851758_1999908251608793798_n.jpg
    62.2 KB · Đọc: 5
  • test.xlsm
    17.7 KB · Đọc: 1
Upvote 0
Em có mượn code của thầy Ndu và sửa thành
PHP:
Dim Temp as Object

  Set Temp = CreateObject("VBScript.RegExp")
  Temp.Global = True
  Temp.Pattern = "[^0-9]"

...
dArr(K, 2) = dArr(K, 2) + Temp.Replace(sArr(i, j), "")

Với mục đích tách và tính tổng nhưng kết quả chỉ ra một dãy số là các số được tách là sao ạ?
 
Upvote 0
Nó Default rồi bạn ak. Còn sâu bên trong nữa chắc hỏi ông viết ra cái này :)
Mình hiểu là nó thay hết chữ thành khoảng trống. Vậy như công thức mảng trên thì thay xong ra một con số, sau đó chuyển sang ô tiếp theo lại tách tiếp ra một con số và con số này cộng với con số trước đó. Kì lạ là nó không như cách mình hiểu.
 
Upvote 0
Em học lỏm thêm được như sau

dArr(K, 2) = Evaluate(dArr(K, 2))

Mà chẳng hiểu sao lại cần như vậy :((
 
Upvote 0
Xin các anh chị chỉnh dùm đoạn code sau, mới học, còn yếu lắm, rất cảm ơn. Em thấy nó không được gọn mà em chưa biết dùng for...next trong trường hợp này. Xin anh chị tận tình chỉ giúp.

Private Sub CommandButton1_Click()
Dim TT As Boolean
TT = MsgBox("Hanh dong nay se xoa toan bo du lieu da nhap truoc day. Bam OK de xoa du lieu cu, nhap du lieu moi. Bam CANCEL de tiep tuc dung du lieu truoc day!", vbOKCancel, "CHU Y!")
If TT = True Then
pass = Application.InputBox("Xin nhap password")
If pass = "123" Then
Sheet1.Range("D6:F11").ClearContents
Sheet2.Range("A5:r40").ClearContents
Sheet3.Range("i5:l40").ClearContents
Sheet3.Range("P5:p40").ClearContents
Sheet3.Range("r5:r40").ClearContents
Sheet3.Range("t5:t40").ClearContents
Sheet3.Range("u5:y40").ClearContents
Sheet3.Range("aa5:aa40").ClearContents
Sheet3.Range("ac5:ac40").ClearContents
Sheet3.Range("ae5:ae40").ClearContents
Sheet3.Range("af5:al40").ClearContents
Sheet5.Range("i5:l40").ClearContents
Sheet5.Range("P5:p40").ClearContents
Sheet5.Range("r5:r40").ClearContents
Sheet5.Range("t5:t40").ClearContents
Sheet5.Range("u5:y40").ClearContents
Sheet5.Range("aa5:aa40").ClearContents
Sheet5.Range("ac5:ac40").ClearContents
Sheet5.Range("ae5:ae40").ClearContents
Sheet5.Range("af5:al40").ClearContents
Sheet7.Range("i5:l40").ClearContents
Sheet7.Range("P5:p40").ClearContents
Sheet7.Range("r5:r40").ClearContents
Sheet7.Range("t5:t40").ClearContents
Sheet7.Range("u5:y40").ClearContents
Sheet7.Range("aa5:aa40").ClearContents
Sheet7.Range("ac5:ac40").ClearContents
Sheet7.Range("ae5:ae40").ClearContents
Sheet7.Range("af5:al40").ClearContents
Sheet9.Range("i5:l40").ClearContents
Sheet9.Range("P5:p40").ClearContents
Sheet9.Range("r5:r40").ClearContents
Sheet9.Range("t5:t40").ClearContents
Sheet9.Range("u5:y40").ClearContents
Sheet9.Range("aa5:aa40").ClearContents
Sheet9.Range("ac5:ac40").ClearContents
Sheet9.Range("ae5:ae40").ClearContents
Sheet9.Range("af5:al40").ClearContents
Else
MsgBox ("Sai mat khau!")
End If
End If
End Sub
 
Upvote 0
Xin các anh chị chỉnh dùm đoạn code sau, mới học, còn yếu lắm, rất cảm ơn. Em thấy nó không được gọn mà em chưa biết dùng for...next trong trường hợp này. Xin anh chị tận tình chỉ giúp.

Private Sub CommandButton1_Click()
Dim TT As Boolean
TT = MsgBox("Hanh dong nay se xoa toan bo du lieu da nhap truoc day. Bam OK de xoa du lieu cu, nhap du lieu moi. Bam CANCEL de tiep tuc dung du lieu truoc day!", vbOKCancel, "CHU Y!")
If TT = True Then
pass = Application.InputBox("Xin nhap password")
If pass = "123" Then
Sheet1.Range("D6:F11").ClearContents
Sheet2.Range("A5:r40").ClearContents
Sheet3.Range("i5:l40").ClearContents
Sheet3.Range("P5:p40").ClearContents
Sheet3.Range("r5:r40").ClearContents
Sheet3.Range("t5:t40").ClearContents
Sheet3.Range("u5:y40").ClearContents
Sheet3.Range("aa5:aa40").ClearContents
Sheet3.Range("ac5:ac40").ClearContents
Sheet3.Range("ae5:ae40").ClearContents
Sheet3.Range("af5:al40").ClearContents
Sheet5.Range("i5:l40").ClearContents
Sheet5.Range("P5:p40").ClearContents
Sheet5.Range("r5:r40").ClearContents
Sheet5.Range("t5:t40").ClearContents
Sheet5.Range("u5:y40").ClearContents
Sheet5.Range("aa5:aa40").ClearContents
Sheet5.Range("ac5:ac40").ClearContents
Sheet5.Range("ae5:ae40").ClearContents
Sheet5.Range("af5:al40").ClearContents
Sheet7.Range("i5:l40").ClearContents
Sheet7.Range("P5:p40").ClearContents
Sheet7.Range("r5:r40").ClearContents
Sheet7.Range("t5:t40").ClearContents
Sheet7.Range("u5:y40").ClearContents
Sheet7.Range("aa5:aa40").ClearContents
Sheet7.Range("ac5:ac40").ClearContents
Sheet7.Range("ae5:ae40").ClearContents
Sheet7.Range("af5:al40").ClearContents
Sheet9.Range("i5:l40").ClearContents
Sheet9.Range("P5:p40").ClearContents
Sheet9.Range("r5:r40").ClearContents
Sheet9.Range("t5:t40").ClearContents
Sheet9.Range("u5:y40").ClearContents
Sheet9.Range("aa5:aa40").ClearContents
Sheet9.Range("ac5:ac40").ClearContents
Sheet9.Range("ae5:ae40").ClearContents
Sheet9.Range("af5:al40").ClearContents
Else
MsgBox ("Sai mat khau!")
End If
End If
End Sub
Có lẽ bạn nên up file
 
Upvote 0
Xin các anh chị chỉnh dùm đoạn code sau, mới học, còn yếu lắm, rất cảm ơn. Em thấy nó không được gọn mà em chưa biết dùng for...next trong trường hợp này. Xin anh chị tận tình chỉ giúp.

Private Sub CommandButton1_Click()
Dim TT As Boolean
TT = MsgBox("Hanh dong nay se xoa toan bo du lieu da nhap truoc day. Bam OK de xoa du lieu cu, nhap du lieu moi. Bam CANCEL de tiep tuc dung du lieu truoc day!", vbOKCancel, "CHU Y!")
If TT = True Then
pass = Application.InputBox("Xin nhap password")
If pass = "123" Then
Sheet1.Range("D6:F11").ClearContents
Sheet2.Range("A5:r40").ClearContents
Sheet3.Range("i5:l40").ClearContents
Sheet3.Range("P5:p40").ClearContents
Sheet3.Range("r5:r40").ClearContents
Sheet3.Range("t5:t40").ClearContents
Sheet3.Range("u5:y40").ClearContents
Sheet3.Range("aa5:aa40").ClearContents
Sheet3.Range("ac5:ac40").ClearContents
Sheet3.Range("ae5:ae40").ClearContents
Sheet3.Range("af5:al40").ClearContents
Sheet5.Range("i5:l40").ClearContents
Sheet5.Range("P5:p40").ClearContents
Sheet5.Range("r5:r40").ClearContents
Sheet5.Range("t5:t40").ClearContents
Sheet5.Range("u5:y40").ClearContents
Sheet5.Range("aa5:aa40").ClearContents
Sheet5.Range("ac5:ac40").ClearContents
Sheet5.Range("ae5:ae40").ClearContents
Sheet5.Range("af5:al40").ClearContents
Sheet7.Range("i5:l40").ClearContents
Sheet7.Range("P5:p40").ClearContents
Sheet7.Range("r5:r40").ClearContents
Sheet7.Range("t5:t40").ClearContents
Sheet7.Range("u5:y40").ClearContents
Sheet7.Range("aa5:aa40").ClearContents
Sheet7.Range("ac5:ac40").ClearContents
Sheet7.Range("ae5:ae40").ClearContents
Sheet7.Range("af5:al40").ClearContents
Sheet9.Range("i5:l40").ClearContents
Sheet9.Range("P5:p40").ClearContents
Sheet9.Range("r5:r40").ClearContents
Sheet9.Range("t5:t40").ClearContents
Sheet9.Range("u5:y40").ClearContents
Sheet9.Range("aa5:aa40").ClearContents
Sheet9.Range("ac5:ac40").ClearContents
Sheet9.Range("ae5:ae40").ClearContents
Sheet9.Range("af5:al40").ClearContents
Else
MsgBox ("Sai mat khau!")
End If
End If
End Sub
Bạn thử Code dưới đây xem sao
Mã:
Private Sub CommandButton1_Click()
Dim TT As Boolean, i As Long
TT = MsgBox("Hanh dong nay se xoa toan bo du lieu da nhap truoc day. Bam OK de xoa du lieu cu, nhap du lieu moi. Bam CANCEL de tiep tuc dung du lieu truoc day!", vbOKCancel, "CHU Y!")
If TT = True Then
pass = Application.InputBox("Xin nhap password")
If pass = "123" Then
    Sheet1.Range("D6:F11").ClearContents
    Sheet2.Range("A5:r40").ClearContents
    For i = 3 To 9
        With Sheets(i)
            .Range("i5:l40").ClearContents
            .Range("P5:p40").ClearContents
            .Range("r5:r40").ClearContents
            .Range("t5:t40").ClearContents
            .Range("u5:y40").ClearContents
            .Range("aa5:aa40").ClearContents
            .Range("ac5:ac40").ClearContents
            .Range("ae5:ae40").ClearContents
            .Range("af5:al40").ClearContents
    End With
    Next
Else
    MsgBox ("Sai mat khau!")
End If
End If
End Sub
 
Upvote 0
Bạn đang gọi tới Sheet qua CodeName nên dùng cách sau. ;)
PHP:
Sub ClearRange(ByVal ws As Worksheet)
    With ws
        Union(.Range("P5:P40"), .Range("R5:R40"), .Range("T5:T40"), .Range("U5:Y40"), _
                .Range("AA5:AA40"), .Range("AC5:AC40"), .Range("AE5:AE40"), .Range("AF5:AL40")).ClearContents
    End With
End Sub

Private Sub CommandButton1_Click()
    '....'
    If pass = "123" Then
        Sheet1.Range("D6:F11").ClearContents
        Sheet2.Range("A5:R40").ClearContents
        ClearRange Sheet3
        ClearRange Sheet5
        ClearRange Sheet7
        ClearRange Sheet9
    Else
    '....'
End Sub
 
Upvote 0
Bạn đang gọi tới Sheet qua CodeName nên dùng cách sau. ;)
PHP:
Sub ClearRange(ByVal ws As Worksheet)
    With ws
        Union(.Range("P5:P40"), .Range("R5:R40"), .Range("T5:T40"), .Range("U5:Y40"), _
                .Range("AA5:AA40"), .Range("AC5:AC40"), .Range("AE5:AE40"), .Range("AF5:AL40")).ClearContents
    End With
End Sub

Private Sub CommandButton1_Click()
    '....'
    If pass = "123" Then
        Sheet1.Range("D6:F11").ClearContents
        Sheet2.Range("A5:R40").ClearContents
        ClearRange Sheet3
        ClearRange Sheet5
        ClearRange Sheet7
        ClearRange Sheet9
    Else
    '....'
End Sub

ủa rồi For ... Next nằm ở chỗ nào vậy anh gì ơi ? +-+-+-++-+-+-+
 
Upvote 0
ủa rồi For ... Next nằm ở chỗ nào vậy anh gì ơi ? +-+-+-++-+-+-+
Muốn có For ... Next thì thêm vào thôi -+*/
Mã:
Sub ClearRange(ByVal ws As Worksheet, i)
    With ws
        Union(.Range("P5:P40"), .Range("R5:R40"), .Range("T5:T40"), .Range("U5:Y40"), _
                .Range("AA5:AA40"), .Range("AC5:AC40"), .Range("AE5:AE40"), .Range("AF5:AL40")).ClearContents
    End With
    i = Len("AutoHello")
End Sub

Private Sub CommandButton1_Click()
    '....'
    'If pass = "123" Then
        Sheet1.Range("D6:F11").ClearContents
        Sheet2.Range("A5:R40").ClearContents
        For i = 1 To 9
          ClearRange Sheet3, i
          ClearRange Sheet5, i
          ClearRange Sheet7, i
          ClearRange Sheet9, i
          i = i
        Next i
    'Else
    '....'
End Sub
 
Upvote 0
Status
Không mở trả lời sau này.
Web KT
Back
Top Bottom