In hàng loạt có điều kiện trong Excel

Blue Softs Liên hệ QC

andyhop

Thành viên mới
Tham gia ngày
19 Tháng năm 2009
Bài viết
18
Được thích
25
Mọi người cho mình hỏi
Mình có làm 1 file excel về viết và in nhật ký thi công.
mình đã viết VBA để in hàng loạt (chọn khoảng thời gian in) nhưng nó in hết toàn bộ ngày trong khoảng thời gian mình yêu cầu.
mình đang muốn là VBA chỉ cho in ngày có thi công, ngày trống thì ko in
Tks mọi người (Có file đính kèm)
 

File đính kèm

  • HĐ19-2021 - QTKH. LÊ THỊ MINH PHÚ (TL 1.2-01-07,08).xlsm
    248.4 KB · Đọc: 14

Maika8008

Tích cực để lên đời
Tham gia ngày
12 Tháng sáu 2020
Bài viết
1,977
Được thích
2,148
Donate (Momo)
Donate
Giới tính
Nam
Tôi sửa công thức tại J24 (Cái Spinner sẽ không hoạt động đúng nữa) và sửa code In
 

File đính kèm

  • HĐ19-2021 - QTKH. LÊ THỊ MINH PHÚ (TL 1.2-01-07,08).xlsm
    236.2 KB · Đọc: 15

Maika8008

Tích cực để lên đời
Tham gia ngày
12 Tháng sáu 2020
Bài viết
1,977
Được thích
2,148
Donate (Momo)
Donate
Giới tính
Nam
Lần chỉnh sửa cuối:

Maika8008

Tích cực để lên đời
Tham gia ngày
12 Tháng sáu 2020
Bài viết
1,977
Được thích
2,148
Donate (Momo)
Donate
Giới tính
Nam
ok đc rồi. tks bạn nha
vậy giờ chỉ muốn in những ngày có thi công, còn ngày không thi công thì ko in ra. Thì làm sao bạn?
Thay bằng Sub này
Rich (BB code):
Sub IN_NHAT_KY()
    Dim i As Long, printFrom As Long, printTo As Long
    With Sheet15
        printFrom = .Range("l8").Value
        printTo = .Range("l9").Value
        For i = printFrom To printTo
            .Range("J24").Value = i
            If .Range("C13") <> "" Then
                .PrintOut preview:=Flase
            End If
        Next i
        .Range("J24").FormulaR1C1 = "=RC[3]"
    End With
End Sub
 

andyhop

Thành viên mới
Tham gia ngày
19 Tháng năm 2009
Bài viết
18
Được thích
25
Thay bằng Sub này
Rich (BB code):
Sub IN_NHAT_KY()
    Dim i As Long, printFrom As Long, printTo As Long
    With Sheet15
        printFrom = .Range("l8").Value
        printTo = .Range("l9").Value
        For i = printFrom To printTo
            .Range("J24").Value = i
            If .Range("C13") <> "" Then
                .PrintOut preview:=Flase
            End If
        Next i
        .Range("J24").FormulaR1C1 = "=RC[3]"
    End With
End Sub

Thay bằng Sub này
Rich (BB code):
Sub IN_NHAT_KY()
    Dim i As Long, printFrom As Long, printTo As Long
    With Sheet15
        printFrom = .Range("l8").Value
        printTo = .Range("l9").Value
        For i = printFrom To printTo
            .Range("J24").Value = i
            If .Range("C13") <> "" Then
                .PrintOut preview:=Flase
            End If
        Next i
        .Range("J24").FormulaR1C1 = "=RC[3]"
    End With
End Sub
Mình làm đc rồi. Tks bạn nhiều nha
 

andyhop

Thành viên mới
Tham gia ngày
19 Tháng năm 2009
Bài viết
18
Được thích
25
Thay bằng Sub này
Rich (BB code):
Sub IN_NHAT_KY()
    Dim i As Long, printFrom As Long, printTo As Long
    With Sheet15
        printFrom = .Range("l8").Value
        printTo = .Range("l9").Value
        For i = printFrom To printTo
            .Range("J24").Value = i
            If .Range("C13") <> "" Then
                .PrintOut preview:=Flase
            End If
        Next i
        .Range("J24").FormulaR1C1 = "=RC[3]"
    End With
End Sub
Mình mới ghi thêm thêm VBA (Module 9), tự động ẩn dòng nếu phần nhân công trống.
Nhưng mình thử kết hợp 2 VBA (Module 1 và 9) để khi in hàng loạt thì sẽ chạy cả 2 đoạn VBA cùng 1 lúc nhưng không được.
Bạn giúp mình được ko?
Tks
 

VetMini

Chuyên gia GPE
Tham gia ngày
21 Tháng mười hai 2012
Bài viết
12,028
Được thích
15,326
Có thể tạm thế này:

Sub Chay2Sub()
call sub1
call sub2
End Sub
Thế là ka ô đê xê rồi.

1626927386600.png

Bạn nên bảo người ta cái mục pa-ra-leo pơ-ro-gơ-ram-ming ở đây có người chỉ dẫn rồi. Chịu khó tìm. Nếu khong biết cách tìm thì dẹp cái tư tưởng ấy đi và đừng thử. Bởi vì chỉ có thế mà không tìm được là chưa đủ trình độ để rớ vảo.
 

buiquangthuan

Thành viên tiêu biểu
Tham gia ngày
17 Tháng mười hai 2010
Bài viết
637
Được thích
279
Giới tính
Nam
mình có thể lồng 2 đoạn VBA vào thành 1 VBA để chạy 1 lúc ko bạn?
Mã:
Sub IN_NHAT_KY()
    Dim i As Long, printFrom As Long, printTo As Long, Rng As Range
    With Sheet15
        printFrom = .Range("l5").Value
        printTo = .Range("l6").Value
        For i = printFrom To printTo
            .Rows("18:43").EntireRow.Hidden = False
            .Range("j10").Value = i
            If .Range("c10") <> "" Then
                For Each Rng In .Range("B18:B43")
                    If Rng.Value = Empty Then
                        Rng.EntireRow.Hidden = True
                    End If
                Next
                .PrintPreview
            End If
        Next i
        .Range("J10").FormulaR1C1 = "=RC[3]"
    End With
    
End Sub
Bạn thử thay đoạn sub này bằng cho modul1 coi
và modul10 thì xóa dòng call andong đi xem có đúng ý không
Bài đã được tự động gộp:

mình đã làm như vậy trong file. Nhưng nó chạy sub 1, xong mới chạy sub 2.
cái mình muốn là chạy 2 sub cùng 1 lúc
Bạn viết được macro mà hỏi câu này thấy lạ lạ. Sao có thể chạy cùng 1 lúc được. Kể cả 1 sub của bạn. Nó cũng làm lần lượt theo code bạn viết mà.
Nói đơn giản. Nếu bạn paste dữ liệu vào ô nào đó xong bôi màu chính ô đó xảy ra cùng lúc thì câu bạn hỏi mới trả lời được
 
Lần chỉnh sửa cuối:

Maika8008

Tích cực để lên đời
Tham gia ngày
12 Tháng sáu 2020
Bài viết
1,977
Được thích
2,148
Donate (Momo)
Donate
Giới tính
Nam
Mình mới ghi thêm thêm VBA (Module 9), tự động ẩn dòng nếu phần nhân công trống.
Nhưng mình thử kết hợp 2 VBA (Module 1 và 9) để khi in hàng loạt thì sẽ chạy cả 2 đoạn VBA cùng 1 lúc nhưng không được.
Bạn giúp mình được ko?
Tks
1/ Bạn thay sub sau vào Module1:
Rich (BB code):
Sub IN_NHAT_KY()
    Dim i As Long, printFrom As Long, printTo As Long
    With Sheet15
        printFrom = .Range("l5").Value
        printTo = .Range("l6").Value
        For i = printFrom To printTo
            Range("j10").Value = i
            If .Range("c10") <> "" Then
                An_Dong   'Sub An_Dong chen vao day
                .PrintOut preview:=Flase
            End If
        Next i
        .Range("J10").FormulaR1C1 = "=RC[3]"
    End With
End Sub
2/ Code trên để cho bạn biết cách chứ nó chạy chậm.
3/ Code của bạn: đã With Sheet15 rồi nhưng trong ruột vẫn cứ Sheet15.ABC_XYZ là thừa. Phải viết là .ABC_XYZ (dấu chấm thay cho Sheet15.)
 
Top Bottom