Liên hệ QC

lenolim

Thành viên hoạt động
Tham gia
8/9/15
Bài viết
179
Được thích
19
Nhờ mọi người trợ giúp:
- Giãn dòng khi hòa ô để dữ liệu vừa khít với vùng đã chọn.
- Nội dung đính kèm theo file
 

File đính kèm

  • Gian Dong.xlsb
    22 KB · Đọc: 64
" Giãn dòng khi hòa ô bằng Vba "


Vụ này có nhiều bài rồi á.
 
" Giãn dòng khi hòa ô bằng Vba "


Vụ này có nhiều bài rồi á.
+. Đúng là có nhiều bài nói về chủ đề này. Nhưng việc giãn dòng có 2 đặc điểm chính:
1. Giãn dòng những vùng ô chỉ định sẵn trong Code.
2. Giãn dòng tất cả những vùng ô trang Sheet (trang tính). (Nếu nhiều thì Code chạy hơi chậm)
+. Ở đây. Việc giãn dòng sẽ theo ý muốn của người sử dụng. Khi những vùng, ô muốn giãn dòng thì ta nhập trực tiếp vào Form mẫu
Mong nhận được được sự trợ giúp Anh cùng mọi người !
 
Mong nhận được sự quan tâm và giúp đỡ từ tất cả mọi người !
 
@lenolim Bạn tham khảo bài viết mới bên này, việc co giãn dòng sẽ trở nên đơn giản với hàm viết bằng VBA

 
@lenolim Bạn tham khảo bài viết mới bên này, việc co giãn dòng sẽ trở nên đơn giản với hàm viết bằng VBA

+. Cảm ơn sự quan tâm của bạn !.
@lenolim Bạn tham khảo bài viết mới bên này, việc co giãn dòng sẽ trở nên đơn giản với hàm viết bằng VBA

+. Mình đang xem có áp dụng được cho yêu cầu của mình không.
+. Tuy nhiên: Vẫn Nhờ bạn xem và giúp đỡ bài của mình.
*. Với yêu cầu của mình có 2 nội dung chính:
1. Chọn và gán những ô (vùng ô) vào bảng mẫu. Lưu lại những tùy chọn này.
2. Dùng Code để giãn dòng các ô (vùng ô) đã chọn. (Các ô, vùng ô khác trong bảng vẫn giữ nguyên mặc định (Nói chung là Code không tác động vào các vùng không được chọn))
Xin được cảm ơn bạn !
 
Nhờ mọi người trợ giúp:
- Giãn dòng khi hòa ô để dữ liệu vừa khít với vùng đã chọn.
- Nội dung đính kèm theo file
Bạn dùng sub này trong module:
Rich (BB code):
Sub MergeCellFit(ByVal MergeCells As Range)
    Dim Diff As Single
    Dim FirstCell As Range, MergeCellArea As Range
    Dim Col As Long, ColCount As Long, RowCount As Long
    Dim FirstCellWidth As Double, FirstCellHeight As Double, MergeCellWidth As Double
    If MergeCells.Count = 1 Then
        Set MergeCellArea = MergeCells.MergeArea
    Else
        Set MergeCellArea = MergeCells
    End If
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    Application.Calculation = xlCalculationManual
    With MergeCellArea
        ColCount = .Columns.Count
        RowCount = .Rows.Count
        .WrapText = True
        If RowCount = 1 And ColCount = 1 Then
            .EntireRow.AutoFit
            GoTo ExitSub
        End If
        Set FirstCell = .Cells(1, 1)
        FirstCellWidth = FirstCell.ColumnWidth
        Diff = 0.75
        For Col = 1 To ColCount
            MergeCellWidth = MergeCellWidth + .Cells(1, Col).ColumnWidth + Diff
        Next
        .MergeCells = False
        FirstCell.ColumnWidth = MergeCellWidth - Diff
        .EntireRow.AutoFit
        FirstCellHeight = FirstCell.RowHeight
        .MergeCells = True
        FirstCell.ColumnWidth = FirstCellWidth
        FirstCellHeight = FirstCellHeight / RowCount
        .RowHeight = FirstCellHeight
    End With
ExitSub:
    Application.Calculation = xlCalculationAutomatic
    Application.EnableEvents = True
    Application.ScreenUpdating = True
End Sub

Và sub sự kiện sau trong sheet code cần tự động giãn dòng:
Rich (BB code):
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("A1:A130")) Is Nothing Then
        MergeCellFit Target
        Target.HorizontalAlignment = xlJustify
'        Target.HorizontalAlignment = xlLeft
    End If
End Sub

Căn chỉnh Justify hay left là tùy bạn.
 
+. Mình đang xem có áp dụng được cho yêu cầu của mình không.
+. Tuy nhiên: Vẫn Nhờ bạn xem và giúp đỡ bài của mình.
*. Với yêu cầu của mình có 2 nội dung chính:
1. Chọn và gán những ô (vùng ô) vào bảng mẫu. Lưu lại những tùy chọn này.
2. Dùng Code để giãn dòng các ô (vùng ô) đã chọn. (Các ô, vùng ô khác trong bảng vẫn giữ nguyên mặc định (Nói chung là Code không tác động vào các vùng không được chọn))
Xin được cảm ơn bạn !
Bạn đọc qua bài viết đấy.
Xong bạn tải tệp tin ví dụ về, có Ví dụ ở Sheet Biên Bản.
Nếu đọc xong và xem ví dụ xong mà chưa hiểu thì bạn hãy tiếp tục đăng câu hỏi.

Bản cập nhật tiếp theo sẽ có tính năng giãn Trang, như các mục, chỉ mục, vừa khớp với Trang hoặc dịch chuyển mục, chỉ mục xuống Trang mới nếu cần thiết.

Bạn theo dõi bài viết để biết cập nhật mới.
 
Bạn đọc qua bài viết đấy.
Xong bạn tải tệp tin ví dụ về, có Ví dụ ở Sheet Biên Bản.
Nếu đọc xong và xem ví dụ xong mà chưa hiểu thì bạn hãy tiếp tục đăng câu hỏi.

Bản cập nhật tiếp theo sẽ có tính năng giãn Trang, như các mục, chỉ mục, vừa khớp với Trang hoặc dịch chuyển mục, chỉ mục xuống Trang mới nếu cần thiết.

Bạn theo dõi bài viết để biết cập nhật mới.
Để mình theo dõi bài viết này. Mình sẽ tổng hợp các câu hỏi để hỏi sau.
Xin cảm ơn !
 
Bạn dùng sub này trong module:
Rich (BB code):
Sub MergeCellFit(ByVal MergeCells As Range)
    Dim Diff As Single
    Dim FirstCell As Range, MergeCellArea As Range
    Dim Col As Long, ColCount As Long, RowCount As Long
    Dim FirstCellWidth As Double, FirstCellHeight As Double, MergeCellWidth As Double
    If MergeCells.Count = 1 Then
        Set MergeCellArea = MergeCells.MergeArea
    Else
        Set MergeCellArea = MergeCells
    End If
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    Application.Calculation = xlCalculationManual
    With MergeCellArea
        ColCount = .Columns.Count
        RowCount = .Rows.Count
        .WrapText = True
        If RowCount = 1 And ColCount = 1 Then
            .EntireRow.AutoFit
            GoTo ExitSub
        End If
        Set FirstCell = .Cells(1, 1)
        FirstCellWidth = FirstCell.ColumnWidth
        Diff = 0.75
        For Col = 1 To ColCount
            MergeCellWidth = MergeCellWidth + .Cells(1, Col).ColumnWidth + Diff
        Next
        .MergeCells = False
        FirstCell.ColumnWidth = MergeCellWidth - Diff
        .EntireRow.AutoFit
        FirstCellHeight = FirstCell.RowHeight
        .MergeCells = True
        FirstCell.ColumnWidth = FirstCellWidth
        FirstCellHeight = FirstCellHeight / RowCount
        .RowHeight = FirstCellHeight
    End With
ExitSub:
    Application.Calculation = xlCalculationAutomatic
    Application.EnableEvents = True
    Application.ScreenUpdating = True
End Sub

Và sub sự kiện sau trong sheet code cần tự động giãn dòng:
Rich (BB code):
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("A1:A130")) Is Nothing Then
        MergeCellFit Target
        Target.HorizontalAlignment = xlJustify
'        Target.HorizontalAlignment = xlLeft
    End If
End Sub

Căn chỉnh Justify hay left là tùy bạn.
Xin cảm ơn sự quan tâm của bạn.
Mình đã xem và cho chạy thử Code. Nhưng có vấn đề chưa thỏa mãn yêu cầu của mình:
+. Mình muốn Code chỉ tác động ở những vùng ô được gán trong mẫu (Mẫu này tùy biến theo từng Sheet khác nhau).
***. Trong Code của bạn, nó lại tác động hết (Những ô đã chọn (A1:A130))
Mong bạn xem lại và nhận được sự giúp đỡ !
 
Xin cảm ơn sự quan tâm của bạn.
Mình đã xem và cho chạy thử Code. Nhưng có vấn đề chưa thỏa mãn yêu cầu của mình:
+. Mình muốn Code chỉ tác động ở những vùng ô được gán trong mẫu (Mẫu này tùy biến theo từng Sheet khác nhau).
***. Trong Code của bạn, nó lại tác động hết (Những ô đã chọn (A1:A130))
Mong bạn xem lại và nhận được sự giúp đỡ !
Đã biết vùng tác động thì bạn sửa lại địa chỉ để dùng chứ
 
Xin cảm ơn sự quan tâm của bạn.
Mình đã xem và cho chạy thử Code. Nhưng có vấn đề chưa thỏa mãn yêu cầu của mình:
+. Mình muốn Code chỉ tác động ở những vùng ô được gán trong mẫu (Mẫu này tùy biến theo từng Sheet khác nhau).
***. Trong Code của bạn, nó lại tác động hết (Những ô đã chọn (A1:A130))
Mong bạn xem lại và nhận được sự giúp đỡ !
Bài viết, có phần hướng dẫn tận dụng hàm, bạn đọc qua giúp tôi.
Đọc bài hướng dẫn mà không hiểu thì tôi không còn cách hướng dẫn nào khác.
Và tôi cũng có để tệp hướng dẫn.

Viết từng hàm cho từng dòng có ô gộp, nha bạn, không phải một hàm cho A1:A130.
Nếu không được thì bạn nên chờ thành viên khác giúp bạn.
 
Bài viết, có phần hướng dẫn tận dụng hàm, bạn đọc qua giúp tôi.
Đọc bài hướng dẫn mà không hiểu thì tôi không còn cách hướng dẫn nào khác.
Và tôi cũng có để tệp hướng dẫn.

Viết từng hàm cho từng dòng có ô gộp, nha bạn, không phải một hàm cho A1:A130.
Nếu không được thì bạn nên chờ thành viên khác giúp bạn.
Hic! Bạn ấy nói tôi đấy.
 
Web KT
Back
Top Bottom