Cần giúp đỡ viết code VBA ẩn dòng trống ko có dữ liệu và co dòng vừa trong trang >> (2 người xem)

Liên hệ QC

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

alibaba2209

Thành viên thường trực
Tham gia
4/12/10
Bài viết
283
Được thích
13
Cần giúp đỡ viết code VBA ẩn dòng trống ko có dữ liệu và co dòng vừa trong trang theo khống chế chiều cao dòng min và theo Range vùng điều kiện.. có file kèm theo bên dưới

- Nếu từ cột Range("B13:G107") dữ liệu trống sẽ tự động ẩn
- Và khóa phần Range("B108:G116") sẽ dồn vừa đủ trong trang >> có thể co dòng Range("B13:G107") chiều cao tối thiểu của dòng là 14. Nếu Range("B13:G107") đã co chiều cao dòng 14 mà Range("B13:G107") không nằm trong trang thì Vùng Range("B13:G107") chiều cao dòng sẽ dãn ra và thò sang trang mới tối thiểu Range("B108:G116") + thêm 4 dòng sát bên trên sẽ chuyển sang trang mới

Mong các đại ka giúp đỡ!
 
Lần chỉnh sửa cuối:
help me!.........................
 
Cần giúp đỡ viết code VBA ẩn dòng trống ko có dữ liệu và co dòng vừa trong trang theo khống chế chiều cao dòng min và theo Range vùng điều kiện.. có file kèm theo bên dưới

- Nếu từ cột Range("B13:G107") dữ liệu trống sẽ tự động ẩn
- Và khóa phần Range("B108:G116") sẽ dồn vừa đủ trong trang >> có thể co dòng Range("B13:G107") chiều cao tối thiểu của dòng là 14. Nếu Range("B13:G107") đã co chiều cao dòng 14 mà Range("B13:G107") không nằm trong trang thì Vùng Range("B13:G107") chiều cao dòng sẽ dãn ra và thò sang trang mới tối thiểu Range("B108:G116") + thêm 4 dòng sát bên trên (mầu hồng) nằm ở trang mới

Mong các đại ka giúp đỡ!

bạn thử xem, tôi cũng chỉ dzọc thử thôi, đại khái là dồn nó dzô một trang, ko dồn được thì dồn 2, 3 trang
Mã:
Sub pagsetup()
Dim i, lr
Range([b13], [b107]).EntireRow.Hidden = False

lr = Application.Match(1000, Range("A13:a107"))
If TypeName(lr) <> "Error" Then
    If lr < 107 Then Range("b" & lr - 1, "b107").EntireRow.Hidden = True
End If
    With ActiveSheet.PageSetup
        Do While .Zoom < 90
            i = i + 1
            .PrintArea = "b1:g116"
            .Zoom = False
            .FitToPagesWide = 1
            .FitToPagesTall = i
            ExecuteExcel4Macro ("PAGE.SETUP(,,,,,,,,,,,,{#N/A,#N/A})")
        Loop
    End With
End Sub
 
Lần chỉnh sửa cuối:
bạn thử xem, tôi cũng chỉ dzọc thử thôi, đại khái là dồn nó dzô một trang, ko dồn được thì dồn 2, 3 trang
Mã:
Sub pagsetup()
Dim i, lr
Range([b13], [b107]).EntireRow.Hidden = False

lr = Application.Match(1000, Range("A13:a107"))
If TypeName(lr) <> "Error" Then
    If lr < 107 Then Range("b" & lr - 1, "b107").EntireRow.Hidden = True
End If
    With ActiveSheet.PageSetup
        Do While .Zoom < 90
            i = i + 1
            .PrintArea = "b1:g116"
            .Zoom = False
            .FitToPagesWide = 1
            .FitToPagesTall = i
            ExecuteExcel4Macro ("PAGE.SETUP(,,,,,,,,,,,,{#N/A,#N/A})")
        Loop
    End With
End Sub
Anh ơi! ở trường hợp khi ô I7 kích lên số 1009 thì nó ẩn cả dòng có dữ liệu, kích lên 1010 thì nó ẩn lại không hết.. a sửa lại dùm với
 
Ô I7 kích lên 1011 thừa hẳn 1 trang mà nó ko dồn lại anh à
 
help me! đại ka sửa lại dùm code với! code vẫn bị ẩn dòng có dữ liệu, nó chỉ ẩn mạc định theo code từ dòng 94:107, nếu dòng 93 << ko có giữ liệu nó cũng không ẩn , và nếu dòng 94 >> có giữ liệu thì nó cũng ẩn luôn! mong giúp đỡ..
 
help me! đại ka sửa lại dùm code với! code vẫn bị ẩn dòng có dữ liệu, nó chỉ ẩn mạc định theo code từ dòng 94:107, nếu dòng 93 << ko có giữ liệu nó cũng không ẩn , và nếu dòng 94 >> có giữ liệu thì nó cũng ẩn luôn! mong giúp đỡ..

cái này chỉ ẩn dòng thôi, còn định dạng trang ko chơi....hihiih
Mã:
Sub pagsetup()
Dim i, lr
Range([b13], [b107]).EntireRow.Hidden = False

lr = Application.Match(1000, Range("b13:b107"))
If TypeName(lr) <> "Error" Then
    If lr < 107 Then Range("b" & lr + 12, "b107").EntireRow.Hidden = True
End If
    
End Sub
 
cái việc định dạng trang này tôi cũng đã từng gặp qua, dữ liệu thì luôn luôn thay đổi , lúc ít lúc nhiều, mà khách hàng thì cứ bảo khăn khăn cho nó nằm vào 1 trang, chỉnh đi chỉnh lại vài lần rồi bye bye luôn
 
cái này chỉ ẩn dòng thôi, còn định dạng trang ko chơi....hihiih
Mã:
Sub pagsetup()
Dim i, lr
Range([b13], [b107]).EntireRow.Hidden = False

lr = Application.Match(1000, Range("b13:b107"))
If TypeName(lr) <> "Error" Then
    If lr < 107 Then Range("b" & lr + 12, "b107").EntireRow.Hidden = True
End If
    
End Sub
nguyên code ẩn dòng cũng không ổn rồi bác ơi!
 
không biết có thể thực hiện như ý e trình bầy được không nhỉ.. em làm xây dựng nên phải làm nhiều bảng khối lượng chi tiết và bảng cao độ chi tiết, mỗi 1 đoạn lại phải căn chỉnh mất rất nhiều thơi gian.. còn bác nào cao thủ giúp em vơi!
 
không biết có thể thực hiện như ý e trình bầy được không nhỉ.. em làm xây dựng nên phải làm nhiều bảng khối lượng chi tiết và bảng cao độ chi tiết, mỗi 1 đoạn lại phải căn chỉnh mất rất nhiều thơi gian.. còn bác nào cao thủ giúp em vơi!

tôi cũng có chỉnh chiều cao của row để chép qua word
bạn phải ước lượng
thí dụ, tối đa 50 hàng có thể nhét vào một trang==>tính xem mỗi hàng cao bao nhiêu, khi nó chỉ có 30,20,10 hàng thì chiều cao bao nhiêu
tương tự như vậy, với 2 trang, 3 trang
nói chung là khá công phu và tốn nhiều thời gian, nên chắc bạn phải tư làm thôi...............hihihihih
 
tôi cũng có chỉnh chiều cao của row để chép qua word
bạn phải ước lượng
thí dụ, tối đa 50 hàng có thể nhét vào một trang==>tính xem mỗi hàng cao bao nhiêu, khi nó chỉ có 30,20,10 hàng thì chiều cao bao nhiêu
tương tự như vậy, với 2 trang, 3 trang
nói chung là khá công phu và tốn nhiều thời gian, nên chắc bạn phải tư làm thôi...............hihihihih
em không thạo về vba chỉ biết sử dụng. Em nghĩ vba có thể logic được, giống như các phần mềm dự toán khi insert hạng mục vào nó căn chỉnh được trong khổ trang giấy như kiểu em trình bầy đó
 
tôi cũng có chỉnh chiều cao của row để chép qua word
bạn phải ước lượng
thí dụ, tối đa 50 hàng có thể nhét vào một trang==>tính xem mỗi hàng cao bao nhiêu, khi nó chỉ có 30,20,10 hàng thì chiều cao bao nhiêu
tương tự như vậy, với 2 trang, 3 trang
nói chung là khá công phu và tốn nhiều thời gian, nên chắc bạn phải tư làm thôi...............hihihihih

- Bảng tính của em dòng nó không cố định khoảng 1~3 trang nếu để 3 trang trong khi có đoạn 1 trang thì chữ kí nằm ở trang thứ 3 (2 trang trống thì rất vô lí chữ kí ở trang đó không có giá trị)
- Em không thạo về vba chỉ biết sử dụng. Em nghĩ vba có thể logic được, giống như các phần mềm dự toán khi insert hạng mục vào nó căn chỉnh được trong khổ trang giấy như kiểu em trình bầy đó
 
Kỹ thuật không có gì mới mẻ, bạn dễ dàng tạo ra liên kết giữa CDPS với SNK thông qua sử dụng Name NHATKY_Range đã được định nghĩa trong Workbook nhật ký bằng việc sử dụng kết hợp hàm INDIRECT. Công thức sau sẽ liên kết thông tin từ SNK sang CDPS ở mức Worksheet:
 
chạy thử file này xem sao

Đại sư phụ! wow quá tuyệt e test rồi chạy ngon lắm, Cái ô J5 có ý nghĩa gì đấy ạ
Anh có thể update thêm code vùng in luôn đến cái dòng có dữ liêu cuối cùng, em sửa code chỗ vùng in không chạy được không biết sai cái gì nhỉ a ( .PageSetup.PrintArea = .Range("B1:G" & .Range("G" & Row.Count).End(3).Row))
 
Lần chỉnh sửa cuối:
Đại sư phụ! wow quá tuyệt e test rồi chạy ngon lắm, Cái ô J5 có ý nghĩa gì đấy ạ
Anh có thể update thêm code vùng in luôn đến cái dòng có dữ liêu cuối cùng, em sửa code chỗ vùng in không chạy được không biết sai cái gì nhỉ a ( .PageSetup.PrintArea = .Range("B1:G" & .Range("G" & Row.Count).End(3).Row))

11.7 là chiều dài khổ giấy A4 , khi bạn nhấn vào nút Print preview có ghi thông số khổ giấy đang chọn là A4 ( 8.27 x 11.69)
bạn mà in khổ giấy khác thì ô J5 phải sửa theo chiều dài của khổ giấy đó


J8hqGZRYEjs1ywjlPeExKuXvn_3yqmStL82lrUPfrg8=w436-h388-no


khi code đang chạy thì bắt buộc phải chọn vùng in là "B1:G300" . code chạy xong rồi muốn in vùng nào tùy . bạn trang trí vùng "B1:G116" mà hỏi code tìm dòng cuối là sao ?

muốn chọn lại vùng in thì chèn thêm 1 dòng nữa vào cuối của sub pagsetup() đại khái như

Mã:
    ...........................
    tRowHei = (lp * pageHei - lp * headRowHei - .Range("A1:A10").Height) / rowCount
        .Range("A13:A107").SpecialCells(xlCellTypeVisible).EntireRow.RowHeight = tRowHei
    End If
    .PageSetup.PrintArea = "B1:G116"
End With
ActiveWindow.View = xlNormalView
Application.ScreenUpdating = True
End Sub
 
11.7 là chiều dài khổ giấy A4 , khi bạn nhấn vào nút Print preview có ghi thông số khổ giấy đang chọn là A4 ( 8.27 x 11.69)
bạn mà in khổ giấy khác thì ô J5 phải sửa theo chiều dài của khổ giấy đó


J8hqGZRYEjs1ywjlPeExKuXvn_3yqmStL82lrUPfrg8=w436-h388-no


khi code đang chạy thì bắt buộc phải chọn vùng in là "B1:G300" . code chạy xong rồi muốn in vùng nào tùy . bạn trang trí vùng "B1:G116" mà hỏi code tìm dòng cuối là sao ?

muốn chọn lại vùng in thì chèn thêm 1 dòng nữa vào cuối của sub pagsetup() đại khái như

Mã:
    ...........................
    tRowHei = (lp * pageHei - lp * headRowHei - .Range("A1:A10").Height) / rowCount
        .Range("A13:A107").SpecialCells(xlCellTypeVisible).EntireRow.RowHeight = tRowHei
    End If
    .PageSetup.PrintArea = "B1:G116"
End With
ActiveWindow.View = xlNormalView
Application.ScreenUpdating = True
End Sub
Ngon rồi sư phụ à! còn 1 việc nữa!
Nếu dùng nguyên A4 thì sửa lại code J5 như nào ạ "pageHei = .[J5].Value * 73 - .PageSetup.TopMargin - .PageSetup.BottomMargin" >> * 73 trong này có ý nghĩa như nào sư phụ
Muốn update cho tất cả các sheep trong file thì làm như nào ạ
 
Lần chỉnh sửa cuối:
Ngon rồi sư phụ à! còn 1 việc nữa!
Nếu dùng nguyên A4 thì sửa lại code J5 như nào ạ "pageHei = .[J5].Value * 73 - .PageSetup.TopMargin - .PageSetup.BottomMargin" >> * 73 trong này có ý nghĩa như nào sư phụ
Muốn update cho tất cả các sheep trong file thì làm như nào ạ
đừng kêu tôi là sư phụ . tôi nghe nhức đầu . tôi cũng chỉ giống như bạn đã từng gặp vấn đề đã từng hỏi . giờ tôi có tí kinh nghiệm thì tôi giúp lại người khác . nguyên A4 là cái gì ? không hiểu .
số đó phải là 72 đó tôi viết nhầm . nó là hệ số chuyển đơn vị từ inches sang points
1 inches = 72 points
trong file bạn đưa lên có 2 sheet mà tôi thấy đã khác xa nhau về cấu trúc thì làm sao tôi dám viết code áp dụng trên mọi sheet
 
11.7 là chiều dài khổ giấy A4 , khi bạn nhấn vào nút Print preview có ghi thông số khổ giấy đang chọn là A4 ( 8.27 x 11.69)
bạn mà in khổ giấy khác thì ô J5 phải sửa theo chiều dài của khổ giấy đó
[/CODE]

nhiều chuyện chút nha đai ca........hihihihi
sao đai ca ko lấy thông số page setup vào luôn mà phải nhập tay
chơi luôn cho "ló máu"..........hihihihii
 
Web KT

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

Back
Top Bottom