Nhờ sửa câu lệnh xác định độ rộng của dãy cột

Liên hệ QC

TrungChinhs

Thành viên tích cực
Tham gia
18/2/08
Bài viết
1,475
Được thích
2,469
Nghề nghiệp
Công chức
Chào các bạn! Nhờ các bạn giúp câu lệnh xác định độ rộng của một dãy cột như sau:
- Câu lệnh [A2].Value = [D:D].ColumnWidth cho kết quả độ rộng cột D
- Câu lệnh [A2].Value = [D:E].ColumnWidth cũng chỉ cho kết quả độ rộng cột D
Vậy muốn xác định độ rộng của một dãy cột D:E thì dùng câu lệnh nào ?
Xin cảm ơn !
 
Dùng code như vầy được không?
PHP:
Sub chay() Set vung = [D:E] For i = 1 To vung.Columns.Count     k = k + vung.Cells(1, i).ColumnWidth Next [A2].Value = k End Sub
Thân.
 
Lần chỉnh sửa cuối:
Upvote 0
Dùng code như vầy được không?
PHP:
Sub chay()
Set vung = [D:E]
For i = 1 To vung.Columns.Count
    k = k + vung.Cells(1, i).ColumnWidth
Next
[A2].Value = k
End Sub
Thân.

Nên khai báo biến cho tường minh bạn ạ.

PHP:
Sub Chay()
    Dim i As Long, K As Double
    Dim Vung As Range
    Set Vung = [D:E]
    For i = 1 To Vung.Columns.Count
        K = K + Vung.Cells(1, i).ColumnWidth
    Next
    [A2].Value = K
End Sub


Thân!
 
Upvote 0
Dùng công thức để áp dụng được cho nhiều trường hợp luôn, không phải viết đi viết lại nhiều lần.
PHP:
Sub chay() [A2].Value = rong([D:E]) End Sub
PHP:
 Function rong(vung As Range) Dim i As Long, k As Double For i = 1 To vung.Columns.Count     k = k + vung.Cells(1, i).ColumnWidth Next rong = k End Function
Cảm ơn bác Mr Okebab Thân.
 
Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn Po_PikachuMr Okebab !
Nhờ được các bạn giúp đỡ mình vừa làm ra cái này: nó tự động căn chỉnh bảng tínhtự động chọn tỷ lệ trang in luôn luôn vừa khít trang A4, tiết kiệm được khá nhiều thời gian cho một công việc nhàm chán và hay sai sót.

Trong ví dụ này cột đầu tiên của bảng tính là cột D, cột cuối cùng là cột N và cột có độ rộng tuỳ biến là cột F
Các bạn xem có gì chưa ổn sửa giúp nhé. (nếu như thêm cái InPut để người dùng khai báo cột đầu và cột cuối thì ứng dụng bảng nào cũng được)
Mã:
[FONT=Courier New]Sub ChonTrangA4()
    Cells.Columns.AutoFit
    Dim vung As Range, i As Long, K As Long
        Set vung = [D:N]
            For i = 1 To vung.Columns.Count
                 K = K + vung.Cells(1, i).ColumnWidth
            Next
        Set vung = Nothing
            K1 = K - [F:F].ColumnWidth
                If K1 > 140 Then
                    [F:F].ColumnWidth = 140 - K1
                    ActiveSheet.PageSetup.Zoom = 100
                Else
                    [F:F].Columns.AutoFit
                    ActiveSheet.PageSetup.Zoom = 140 / K * 100
          Cells.Rows.AutoFit
          MsgBox "Ty le trang in la " & Round(140 / K * 100, 0) & "%"
        End If
End Sub[/FONT]
@ Po_Pikachu trước khi gửi bài hỏi các bạn, mình cũng đã làm được như thế này bằng "VBD", hôm nào gửi cho bạn vào bài "chuyện lạ có thật".
Thân.
 
Lần chỉnh sửa cuối:
Upvote 0
Tự canh chỉnh độ rộng cột thì cái này là ngắn nhất nè! Chỉ cần nhập vô là độ rộng tự canh theo chiều dài chữ luôn. Bạn copy code đặt vào trong sheet nào muốn chỉnh độ rộng.
PHP:
Private Sub Worksheet_Change(ByVal Target As Range) Columns(Target.Column).Columns.AutoFit End Sub
Chúc thành công! Thân.
 
Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn Po_PikachuMr Okebab !
Nhờ được các bạn giúp đỡ mình vừa làm ra cái này: nó tự động căn chỉnh bảng tínhtự động chọn tỷ lệ trang in luôn luôn vừa khít trang A4, tiết kiệm được khá nhiều thời gian cho một công việc nhàm chán và hay sai sót.

Trong ví dụ này cột đầu tiên của bảng tính là cột D, cột cuối cùng là cột N và cột có độ rộng tuỳ biến là cột F
Các bạn xem có gì chưa ổn sửa giúp nhé. (nếu như thêm cái InPut để người dùng khai báo cột đầu và cột cuối thì ứng dụng bảng nào cũng được)
Mã:
[FONT=Courier New]Sub ChonTrangA4()
    Cells.Columns.AutoFit
    Dim vung As Range, i As Long, K As Long
        Set vung = [D:N]
            For i = 1 To vung.Columns.Count
                 K = K + vung.Cells(1, i).ColumnWidth
            Next
        Set vung = Nothing
            K1 = K - [F:F].ColumnWidth
                If K1 > 140 Then
                    [F:F].ColumnWidth = 140 - K1
                    ActiveSheet.PageSetup.Zoom = 100
                Else
                    [F:F].Columns.AutoFit
                    ActiveSheet.PageSetup.Zoom = 140 / K * 100
          Cells.Rows.AutoFit
          MsgBox "Ty le trang in la " & Round(140 / K * 100, 0) & "%"
        End If
End Sub[/FONT]
@ Po_Pikachu trước khi gửi bài hỏi các bạn, mình cũng đã làm được như thế này bằng "VBD", hôm nào gửi cho bạn vào bài "chuyện lạ có thật".
Thân.

Nếu chỉ vì muốn vừa trang in thì bạn chỉ cần dòng code sau :

PHP:
Sub InAutoFit()
    With ActiveSheet.PageSetup
        .PaperSize = xlPaperA4  ''' Chon giay A4
        .Zoom = False             ''' Bo che do Zoom
        .FitToPagesWide = 1    ''' Chieu ngang luon vừa 1 trang
        .FitToPagesTall = 2      ''' Chiều dọc lớn nhất là 2 trang, nếu = 1 thì toàn bộ trang in luôn vừa 1 trang A4
    End With
End Sub

Bạn thử thay đổi các chỉ số xem thấy hiệu quả thế nào nhé.

Thân!
 
Upvote 0
Dùng công thức để áp dụng được cho nhiều trường hợp luôn, không phải viết đi viết lại nhiều lần.
PHP:
Sub chay()
[A2].Value = rong([D:E])
End Sub
PHP:
Function rong(vung As Range)
Dim i As Long, k As Double
For i = 1 To vung.Columns.Count
    k = k + vung.Cells(1, i).ColumnWidth
Next
rong = k
End Function
Cảm ơn bác Mr Okebab
Thân.
Nếu là 2 hoặc nhiều vùng không liên tục thì sao?
Ẹc... Ẹc...
 
Upvote 0
Đúng là không biết nên khóc hay nên cười đây nữa, bác ndu96081631!
PHP:
Sub chay() [A2].Value = rong([D:E], [F:H]) End Sub
PHP:
 Function rong(ParamArray rng() As Variant) As Double Dim i As Long, k As Double Application.Volatile For Each vung In rng     For i = 1 To vung.Columns.Count         k = k + vung.Cells(1, i).ColumnWidth     Next Next rong = k End Function
Chỉ biết nói rằng cảm ơn bác ndu96081631 nha! Thân.
 
Lần chỉnh sửa cuối:
Upvote 0
Nếu chỉ vì muốn vừa trang in thì bạn chỉ cần dòng code sau :

PHP:
Sub InAutoFit()
    With ActiveSheet.PageSetup
        .PaperSize = xlPaperA4  ''' Chon giay A4
        .Zoom = False             ''' Bo che do Zoom
        .FitToPagesWide = 1    ''' Chieu ngang luon vừa 1 trang
        .FitToPagesTall = 2      ''' Chiều dọc lớn nhất là 2 trang, nếu = 1 thì toàn bộ trang in luôn vừa 1 trang A4
    End With
End Sub
Bạn thử thay đổi các chỉ số xem thấy hiệu quả thế nào nhé.

Thân!

Cảm ơn Mr Okebab ! đoạn code này rất hay nhưng mình muốn các Bạn viết tiếp giúp mình để sub này thêm chức năng: Tự động điều chỉnh độ rộng cột F sao cho tỷ lệ trang in luôn >= 80%.
 
Upvote 0
Cảm ơn Mr Okebab ! đoạn code này rất hay nhưng mình muốn các Bạn viết tiếp giúp mình để sub này thêm chức năng: Tự động điều chỉnh độ rộng cột F sao cho tỷ lệ trang in luôn >= 80%.

Đặt trường hợp : nếu độ rộng cột F = 0 mà tỷ lệ trang in vẫn chỉ là 70% (để cho vừa 1 trang in) thì làm sao hả bạn ?? Vì muốn tăng tỷ lệ trang in thì độ rộng của cột phải giảm. Nay đã giảm =0 rồi thì không thể giảm nữa.

Hay là dùng biện pháp này :

PHP:
Sub InAutoFit()
    Columns("F:F").Columns.AutoFit
    With ActiveSheet.PageSetup
        .PaperSize = xlPaperA4  ''' Chon giay A4
        .Zoom = False             ''' Bo che do Zoom
        .FitToPagesWide = 1    ''' Chieu ngang luon vừa 1 trang
        .FitToPagesTall = 2      ''' Chiều dọc lớn nhất là 2 trang, nếu = 1 thì toàn bộ trang in luôn vừa 1 trang A4
    End With
End Sub
Thân
 
Upvote 0
Web KT

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

Back
Top Bottom