XD360 KÍNH CHÚC CHO MỌI NHÀ VẠN SỰ AN LÀNH!

Phần mềm ôn thi sát hạch chứng chỉ hành nghề xây dựng

 Quên mật khẩu
 Đăng ký mới
Anh Trần HòeBùi Quốc Hưng
Xem: 2149|Trả lời: 16
In Chủ đề trước Tiếp theo
Thu gọn cột thông tin

Chỉnh bề rộng của cột trong excell theo điều kiện

[Lấy địa chỉ]

Hãy đăng nhập để có nhiều chức năng hữu dụng hơn và xem ảnh rõ hơn!

Bạn phải đăng nhập để xem được nội dung, nếu bạn chưa có tài khoản? hãy Đăng ký mới

x
Em đang cần in 1 số biên bản (bên mảng giao thông) trong 1 khung in mà trong đó số cột của mỗi biên bản sẽ thay đổi theo điều kiện có khối lượng phát sinh hay không có khối lượng phát sinh. Khi không có phát sinh 2 muốn in 7 cột, khi có phát sinh e muốn in có 8 cột. Do số lượng cột thay đổi nên phải chỉnh lại bề rộng của cột cho phù hợp với khung in.

Cụ thể khi không có phát sinh e muốn chỉnh cột I và L rộng 12, khi không có phát sinh e muốn chỉnh cột I và L rộng 20. Em đã viết code trong VBA nhưng kết quả không được như mong muốn. Nhờ diễn đàn và anh Fubi giúp e với. VD.xls (28 KB, Lượt tải về: 675)

www.xaydung360.vn XÂY TÂM, DỰNG TẦM CHUYÊN NGHIỆP

2#
tranhungdao12a3 Đăng lúc 22/8/2014 08:23 | Chỉ xem của tác giả
Bỏ 1 điểm thưởng đi bạn, nhìn rất buồn cười, mình đang đi nhờ người khác mà còn kêu người ta mua điểm, hơi ngược.
Bạn copy cái này vô sheets("VD") trong file. Còn nếu bạn muốn in nhiều bản liên tục thì gửi đủ file lên, tôi nhớ không lầm thì anh Fubi đã có một bài về in hàng loạt biên bản rồi đó!
[Visual Basic] 纯文本查看 复制代码
Private Sub worksheet_change(ByVal target As Range)
        If [N15] = 0 Then
        [I:I,L:L].ColumnWidth = 20
        Else
        [I:I,L:L].ColumnWidth = 12
        End If
End Sub

Theo tôi bạn nên để thế này:
[Visual Basic] 纯文本查看 复制代码
Private Sub worksheet_change(ByVal target As Range)
        With Range([i9], [i65536].End(xlUp))
        .WrapText = True
        .MergeCells = False
        End With
        With Range([l9], [l65536].End(xlUp))
        .WrapText = True
        .MergeCells = False
        End With
End Sub

Vì nếu bạn để 20 hay 12 nếu bề rộng chuỗi trong cell lớn hơn thì nó tràn sang cell khác.

Đánh giá

Chia sẻ hay! Thanks bạn nhé!: 5.0
Ah! đúng thế anh, em không để ý ruột!  Đăng lúc 22/8/2014 14:18
Ô chứa Khối lượng thì không dùng WrapText, nếu là ô chứa văn bản thì mới dùng WrapText.  Đăng lúc 22/8/2014 10:29
Chia sẻ hay! Thanks bạn nhé!: 5
  Đăng lúc 22/8/2014 10:26

Số người tham gia 1Thanked +2 Thu lại Lý do
hunterkilluka + 2 Thật thú vị! Thanks!

Xem tất cả

www.xaydung360.vn XÂY TÂM, DỰNG TẦM CHUYÊN NGHIỆP

3#
jackcon Đăng lúc 22/8/2014 09:13 | Chỉ xem của tác giả

Có một cách không cần viết code VBA là bạn bấm Ctrl P ở mục setting bạn chọn mục cuối cùng thay No scaling thành Fit All columns One Pages. . excel sẽ tự động căn chỉnh bảng tính cho bạn khi bạn chèn thêm hay bỏ đi một cột. mình gửi lại file tính có chỉnh sửa cho bạn

VD1.xls

33.5 KB, Lượt tải về: 585

www.xaydung360.vn XÂY TÂM, DỰNG TẦM CHUYÊN NGHIỆP

4#
 Tác giả| hunterkilluka Đăng lúc 22/8/2014 09:19 | Chỉ xem của tác giả
Đầu tiên em rất cảm ơn anh đã giúp đỡ. Em lấy đoạn code đầu của anh thay cho đoạn em viết thì đã đúng với mong muốn của em. Anh có thể giải thích bản chất 2 đoạn đó khác nhau thế nào mà kết quả trả về lại không giống nhau (em nhìn vẫn thây giống nhau).
Đoạn code thứ 2 của anh, em không hiểu bản chất lắm chỉ hiểu nôm na là chỉnh bề rộng của cột phù hợp với bề rộng của chuỗi mà không chỉnh cố định 12 hay 20 như của em. K biết em hiểu có đúng không? Còn đoạn Mergecell=false e không hiểu có tác dụng gì?
Về điểm thưởng file em rất áy náy. Do lâu rồi em quên các thủ tục trong đăng bài nên chỉ nghĩ đó là một bước bắt buộc. Đăng lên rồi lại không biết cách gỡ nó như thế nào cả. Nhờ anh chỉ giúp em để e gỡ nó xuống gấp

www.xaydung360.vn XÂY TÂM, DỰNG TẦM CHUYÊN NGHIỆP

5#
 Tác giả| hunterkilluka Đăng lúc 22/8/2014 09:26 | Chỉ xem của tác giả
jackcon gửi lúc 22/8/2014 09:13
Có một cách không cần viết code VBA là bạn bấm Ctrl P ở mục setting bạn chọn mục cuố ...

Vấn đề của mình in tự động nhiều biên bản nên việc chỉnh bề rộng cũng phải tự động theo điều kiện. Cách bạn nói hình như chỉ chỉnh được khi mỗi lẫn in chỉ in 1 biên bản.

www.xaydung360.vn XÂY TÂM, DỰNG TẦM CHUYÊN NGHIỆP

6#
tranhungdao12a3 Đăng lúc 22/8/2014 09:31 | Chỉ xem của tác giả
hunterkilluka gửi lúc 22/8/2014 09:19
Đầu tiên em rất cảm ơn anh đã giúp đỡ. Em lấy đoạn code đầu của anh thay cho đoạn ...

Giải thích bản chất 2 đoạn nào đó bạn.
Đoạn code đầu chỉ là fix bề rộng của 2 cột I và L là 20 hoặc 12 thôi, đặt nó trong sự kiên change thì nó tự chạy mà bạn không cần gọi code.
Còn đoạn code bên dưới thì fix bề rộng cột vừa với chuỗi tùy theo dữ liệu nhập, cái .mergecells=false là không cho mergecells thôi.

www.xaydung360.vn XÂY TÂM, DỰNG TẦM CHUYÊN NGHIỆP

7#
 Tác giả| hunterkilluka Đăng lúc 23/8/2014 07:13 | Chỉ xem của tác giả
tranhungdao12a3 gửi lúc 22/8/2014 09:31
Giải thích bản chất 2 đoạn nào đó bạn.
Đoạn code đầu chỉ là fix bề rộng của 2 c ...

ý em hỏi là sự khác nhau giữa đoạn 2 viết và anh viết
Đoạn em viết:
Dim PS As Integer
PS = Sheets("VD").Range("S").Value
If PS = 0 Then
    Range("I:I,L").ColumnWidth = 20
        Else 'PS<>0
        Range("I:I,L").ColumnWidth = 12
    End If
Còn đoạn a viết:
If [N15] = 0 Then
        [I:I,L].ColumnWidth = 20
        Else
        [I:I,L].ColumnWidth = 12
        End If
e không thấy sự khác nhau giữa 2 đoạn đó nhưng kết quả lại khác nhau?
Và sự khác nhau giữa đoạn này
    Range("I:I,L").Select
        Selection.ColumnWidth = 20
(kết quả là toàn bộ cột nằm trong khung in đều chỉnh về 20)
và đoạn này
Range("I:I,L:L").ColumnWidth = 20
(kết quả là 2 cột I và L chỉnh về 20)
Do em mới bắt đầu học về VBA nên câu hỏi của e có thể buồn cười nhưng mong được anh chỉ điểm cho.
        

Đánh giá

Sửa lại nhé!. Code thì cho vào hộp code (biểu tượng <> trong phần soạn thảo)  Đăng lúc 23/8/2014 10:03

www.xaydung360.vn XÂY TÂM, DỰNG TẦM CHUYÊN NGHIỆP

8#
 Tác giả| hunterkilluka Đăng lúc 23/8/2014 07:20 | Chỉ xem của tác giả
Hix trong code lại có những đoạn trùng với biểu tượng, cái này e không biêt cách sửa nhưng chắc là a đọc được

www.xaydung360.vn XÂY TÂM, DỰNG TẦM CHUYÊN NGHIỆP

9#
tranhungdao12a3 Đăng lúc 23/8/2014 08:15 | Chỉ xem của tác giả
hunterkilluka gửi lúc 23/8/2014 07:13
ý em hỏi là sự khác nhau giữa đoạn 2 viết và anh viết
Đoạn em viết:
Dim PS As Integer ...

Đoạn trên của bạn và mình không có sự khác nhau mà, Bạn gán PS=N15 thì nó giống nhau.
Còn đoạn dưới:
của bạn là     Range("I:I,L").Select
        Selection.ColumnWidth = 20
Do bạn chọn phương thức select nên nếu các cell của cột I và L, có cell nào được Merge với các cell khác thì nó sẽ chọn cả vùng chứa cell Merge
File của bạn có ô Tổng, ô tiêu đề chỉnh bề rộng..., ô diện tích và ô khối lượng là Merge dẫn đến kết quả sai thôi.
Nếu bạn viết luôn là:
Range("I:I,L").columnwidth=20 thì kết quả sẽ đúng.

www.xaydung360.vn XÂY TÂM, DỰNG TẦM CHUYÊN NGHIỆP

10#
 Tác giả| hunterkilluka Đăng lúc 25/8/2014 06:26 | Chỉ xem của tác giả
tranhungdao12a3 gửi lúc 23/8/2014 08:15
Đoạn trên của bạn và mình không có sự khác nhau mà, Bạn gán PS=N15 thì nó giống n ...

e đã đặt vùng PS=N15 rồi
Sau đó gán
[Visual Basic] 纯文本查看 复制代码
PS = Sheets("VD").Range("PS").Value

Như thế mà vẫn khác với anh.
Trước đó e đã thử rất nhiều cách và e phát hiện ra lỗi của e chỉ ở dòng gán trên.Không ngờ cách giải quyết vấn đề lại đơn giản như a làm.
Còn đoạn kia thì e hiểu rồi.

www.xaydung360.vn XÂY TÂM, DỰNG TẦM CHUYÊN NGHIỆP

11#
tranhoe Đăng lúc 25/8/2014 09:46 | Chỉ xem của tác giả
hunterkilluka gửi lúc 25/8/2014 06:26
e đã đặt vùng PS=N15 rồi
Sau đó gán [mw_shl_code=vb,true]PS = Sheets("VD").Range("PS").Va ...

Khác nhau và có lỗi do Bạn định nghĩa kiểu Biến sai: Dim PS As Integer (là số nguyên)

Chính xác là: Dim PS As Single (là số thực) hoặc chỉ cần Dim PS thôi.

www.xaydung360.vn XÂY TÂM, DỰNG TẦM CHUYÊN NGHIỆP

12#
 Tác giả| hunterkilluka Đăng lúc 25/8/2014 22:46 | Chỉ xem của tác giả
tranhoe gửi lúc 25/8/2014 09:46
Khác nhau và có lỗi do Bạn định nghĩa kiểu Biến sai: Dim PS As Integer (là số nguyên)
...

A nhắc e mới nhớ lỗi định nghĩa biến sai, tuy nhiên e sửa lại định nghĩa biến như a nói nhưng kết quả trả về vẫn sai. E có thấy a nói khác nhau và lỗi nhưng chưa thấy a phân tích 2 đoạn code đó khác nhau điểm nào?

www.xaydung360.vn XÂY TÂM, DỰNG TẦM CHUYÊN NGHIỆP

13#
tranhoe Đăng lúc 25/8/2014 23:36 | Chỉ xem của tác giả
hunterkilluka gửi lúc 25/8/2014 22:46
A nhắc e mới nhớ lỗi định nghĩa biến sai, tuy nhiên e sửa lại định nghĩa biến như  ...

Tải file của Em về xem code mới thấy sai: Gán
[Visual Basic] 纯文本查看 复制代码
PS = Sheets("VD").Range("PS").Value
ở trước vòng lặp thì PS luôn có giá trị cố định. Muốn PS thay đổi phải đưa nó vào trong vòng lặp.
Sửa code như sau:
[Visual Basic] 纯文本查看 复制代码
Sub Dieukienvalap()
    Dim SoInTu As Integer
    Dim SoDen As Integer
    Dim PS As Integer
    ''''''''''''''''''''''''''''''''''''''''''''''
    SoInTu = Sheets("VD").Range("SoInTu").Value
    SoDen = Sheets("VD").Range("SoDen").Value
    For i = SoInTu To SoDen
        Sheets("VD").Select
        Sheets("VD").Range("CellXuatIn").Value = i
        Cells.Select
        Selection.EntireRow.Hidden = False
        Selection.EntireColumn.Hidden = False
        PS = Sheets("VD").Range("PS").Value
        If PS = 0 Then
            Range("I:I,L:L").ColumnWidth = 20
        Else 'PS<>0
            Range("I:I,L:L").ColumnWidth = 12
        End If
        Columns("A:A").Select
        Selection.SpecialCells(xlCellTypeFormulas, 2).Select
        Selection.EntireRow.Hidden = True
        Rows("1:1").Select
        Selection.SpecialCells(xlCellTypeFormulas, 2).Select
        Selection.EntireColumn.Hidden = True
        ActiveWindow.SelectedSheets.PrintOut Copies:=1
    Next i
End Sub

www.xaydung360.vn XÂY TÂM, DỰNG TẦM CHUYÊN NGHIỆP

Phiên bản Mobile|Phần mềm ôn thi sát hạch chứng chỉ hành nghề xây dựng  

Phần mềm dự toán xây dựng excel | Hướng dẫn lập dự toán xây dựng | Phần mềm tư vấn giám sát | Phần mềm quản lý chất lượng xây dựng |

Phần mềm ôn thi sát hạch chứng chỉ hành nghề xây dựng

Phần mềm ôn thi sát hạch chứng chỉ hành nghề Kiến Trúc sư

Phần mềm ôn thi sát hạch chứng chỉ hành nghề Đấu thầu

GMT+7, 7/11/2025 01:34 , Processed in 0.205820 second(s), 29 queries .

Powered by Discuz! X3.2

© 2001-2013 Kiso Comsenz Inc.