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,946
Chào mọi người. Em có 1 file excel dùng code để in cho nhanh! (file đính kèm)Nhưng mỗi lần in chỉ đc 1 bộ.
Nhờ mọi người chỉ cho em thêm 1 đoạn code để có thể thiết lập in được nhiều bộ với chỉ 1 lần click nút print ( ví dụ in 7 bộ)
Thanks mọi người!
Pass VBA: 123
 

File đính kèm

  • 1.20171009-BBNT THANH THAI - KHOI DE -XayTuong.xlsm
    271.2 KB · Đọc: 2
Upvote 0
PHP:
Dim i As Integer, j As Integer
Dim r1 As Integer, r2 As Integer

HR = Sheets("HR").Range("A8:B" & Range("B" & Rows.Count).End(xlUp).Row).Value
ReDim K_HR(1 To UBound(HR, 1), 1 To 1)
For i = 1 To UBound(HR, 1)
    If HR(i, 1) = 9 Then
        r1 = r1 + 1
        K_HR(r1, 1) = HR(i, 2)
    End If
    MsgBox r1
Next i
If r1 Then
Sheets("Report").Range("R1").Resize(r1, 1) = K_HR
End If
End Sub
Cho em hỏi code này sai ở đâu? Nếu tại sheet HR em chạy thì r1 lần lượt hiện tại msgbox là 1 2 3 và 4. Nhưng nếu chạy tại sheet Report thì kết quả hoàn toàn khác, msgbox lần lượt là 0 0 0 và 1.
 
Upvote 0
PHP:
Dim i As Integer, j As Integer
Dim r1 As Integer, r2 As Integer

HR = Sheets("HR").Range("A8:B" & Range("B" & Rows.Count).End(xlUp).Row).Value
ReDim K_HR(1 To UBound(HR, 1), 1 To 1)
For i = 1 To UBound(HR, 1)
    If HR(i, 1) = 9 Then
        r1 = r1 + 1
        K_HR(r1, 1) = HR(i, 2)
    End If
    MsgBox r1
Next i
If r1 Then
Sheets("Report").Range("R1").Resize(r1, 1) = K_HR
End If
End Sub
Cho em hỏi code này sai ở đâu? Nếu tại sheet HR em chạy thì r1 lần lượt hiện tại msgbox là 1 2 3 và 4. Nhưng nếu chạy tại sheet Report thì kết quả hoàn toàn khác, msgbox lần lượt là 0 0 0 và 1.
HR = Sheets("HR").Range("A8:B" &Sheets("HR"). Range("B" & Rows.Count).End(xlUp).Row).Value
 
Upvote 0
HR = Sheets("HR").Range("A8:B" &Sheets("HR"). Range("B" & Rows.Count).End(xlUp).Row).Value

Chạy ngon lành rồi anh ạ. Nhưng làm thế nào để chuyển cái "dọc" thành cái "ngang" anh? Kết quả đang trả về là một cột nhiều dòng, em muốn thành 1 dòng nhiều cột thì làm như nào ạ?
 
Upvote 0
Chạy ngon lành rồi anh ạ. Nhưng làm thế nào để chuyển cái "dọc" thành cái "ngang" anh? Kết quả đang trả về là một cột nhiều dòng, em muốn thành 1 dòng nhiều cột thì làm như nào ạ?
thử code
Mã:
HR = Sheets("HR").Range("A8:B" &Sheets("HR"). Range("B" & Rows.Count).End(xlUp).Row).Value
ReDim K_HR( 1 To 1, 1 To UBound(HR, 1))
For i = 1 To UBound(HR, 1)
    If HR(i, 1) = 9 Then
        r1 = r1 + 1
        K_HR(1, r1) = HR(i, 2)
    End If
    MsgBox r1
Next i
If r1 Then
Sheets("Report").Range("R1").Resize(, r1) = K_HR
End If
 
Upvote 0
Sub print_td()
Dim p1, p2, i&
p1 = Sheet15.Range("P2").Value
p2 = Sheet15.Range("P3").Value

If IsNumeric(p1) = False Or IsNumeric(p2) = False Then
tb = MsgBox("So code 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 Or p2 < 1 Then
tb = MsgBox("So code phai >= 1.", , "Thông báo")
Exit Sub
End If

If p1 <= p2 Then
For i = p1 To p2
Sheet15.Range("O1").Value = i
Sheet15.PrintOut
Next
End If

End Sub
Cho em xin thêm 1 dòng code để giá trị i lặp lại n lần theo ô "P4" ở sheet15 với ạ!
For i = p1 To p2
Sheet15.Range("O1").Value = i
Sheet15.PrintOut
 
Upvote 0
nói rỏ lại câu:
"Cho em xin thêm 1 dòng code để giá trị i lặp lại n lần theo ô "P4" ở sheet15 với ạ!"
và cho ví vụ cụ thể
Vâng, file excel của em như thế này. Em dùng vba print từ code 1 đến code 7, mỗi lần in chỉ đc 1 bộ. Giờ a có thể chèn giùm em thêm 1 đoạn code vào vba đó để em có thể đánh thêm 1 số là số bộ cần in (ví dụ cần in 7 lần, in từ code 1 đến 7, rồi lặp lại từ 1 đến 7 cho đến khi đủ 7 lần)
 

File đính kèm

  • 1.20171009-BBNT THANH THAI - KHOI DE -XayTuong.xlsm
    271.2 KB · Đọc: 3
Upvote 0
Em mới học vba và tạo được đoạn code . Chạy model "loc_du_lieu" thì không sao, nhưng chạy model "tan_suat_hd" thì excel tự tắt và khởi động lại. Mong mọi người giúp đỡ, gỡ rối giùm em ah. Thanks!
 

File đính kèm

  • HD_PCC_17.xlsm
    793 KB · Đọc: 5
Upvote 0
Vâng, file excel của em như thế này. Em dùng vba print từ code 1 đến code 7, mỗi lần in chỉ đc 1 bộ. Giờ a có thể chèn giùm em thêm 1 đoạn code vào vba đó để em có thể đánh thêm 1 số là số bộ cần in (ví dụ cần in 7 lần, in từ code 1 đến 7, rồi lặp lại từ 1 đến 7 cho đến khi đủ 7 lần)
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
 
Upvote 0
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
Status
Không mở trả lời sau này.
Web KT

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

Back
Top Bottom