Cho em xin code tự động thay đổi chiều cao của dòng

Liên hệ QC

tn001

Thành viên chính thức
Tham gia
29/12/08
Bài viết
78
Được thích
4
Cho em xin code tự động điều chỉnh độ cao của dòng dữ liệu. (Dòng dữ liệu và dòng kết quả đã Merge cell). Em xin cảm ơn!
 

File đính kèm

  • xincode.xls
    14.5 KB · Đọc: 99
Nếu muốn kỹ hơn, chỉ thay đổi độ cao của ô C7 của sheet1 khi ô C12 ở sheet2 thay đổi thì làm thủ tục sau:

Tại module của sheet2 bạn thực hiện thủ tục sau:

PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$C$12" Then
        With Application
            .EnableEvents = False
            .Calculation = xlCalculationManual
                With Sheet1.Range("C7")
                    .Value = Target.Value
                    .EntireRow.AutoFit
                End With
            .Calculation = xlCalculationAutomatic
            .EnableEvents = True
        End With
    End If
End Sub

Bây giờ bạn gõ gì ở ô C12 thì ô C7 cũng thay đổi theo (không cần công thức) và tự động fit hàng.

Bạn tự tin như thế vì Sheet1!C7 của bạn đâu có được merge. Chủ topic đã nói về merge trong bài #1
Code trong bài #10 của tôi được viết đặc biệt cho trường hợp merge cells
 
Lần chỉnh sửa cuối:
Upvote 0
Dạ! Em cảm ơn các anh ạ! Nhưng mà vấn đề của em vẫn còn mắc tý chút là cái cell kết quả không phải 1 ô, mà là nhiều cell đã được Merge lại rồi ạ.

Bạn ạ, các anh nào ở đây?
Tôi là người trả lời rất có trách nhiệm. Tôi thường đọc kỹ câu hỏi. Và do tôi tải tập tin AutoFit.xls trong bài #6 nên tôi biết rõ là cell C7 của bạn được merge.

Chỉ có điều giúp bạn rất khó. Bạn không miêu tả bạn đã thao tác lần lượt như thế nào. Và bạn không trước sau như một. Lúc thì bạn đưa tập tin mà text trong cell được nhập vào bằng công thức, lúc thì chả có công thức (AutoFit.xls ở bài #6) - người đọc sẽ đoán mò là text được nhập vào bằng cách gõ trực tiếp.

Code tôi đưa trong bài #10 được viết đặc biệt cho các cell merge.
Do bạn gọi sub AutoFitMergedCellRowHeight trong Worksheet_Change của Sheet1 nên chỉ khi sẩy ra sự kiện thì sub AutoFitMergedCellRowHeight mới được thực hiện.

Vậy thì nếu ta "làm gì đó" mà không sẩy ra Worksheet_Change của Sheet1 nhưng ta vẫn muốn sub AutoFitMergedCellRowHeight được thực hiện thì làm thế nào? Thì ... cứ gọi nó thôi chứ có ai cấm đâu???

Code của Sheet2:
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target = Range("C12") Then
        AutoFitMergedCellRowHeight Sheet1.Range("C7")
    End If
End Sub

Ta thêm code của Sheet1:
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target = Range("C7") Then     
        AutoFitMergedCellRowHeight Target
    End If
End Sub

Và code Module1 với sub của tôi ở bài #10
Mã:
Sub AutoFitMergedCellRowHeight(Target As Range)
Dim NewRwHt As Single
Dim cWdth As Single, MrgeWdth As Single
Dim c As Range, cc As Range
Dim ma As Range

    With Target
        If .MergeCells And .WrapText Then
            Set c = Target.Cells(1, 1)
            cWdth = c.ColumnWidth
            Set ma = c.MergeArea
            For Each cc In ma.Cells
                MrgeWdth = MrgeWdth + cc.ColumnWidth
            Next
            Application.ScreenUpdating = False
            ma.MergeCells = False
            c.ColumnWidth = MrgeWdth
            c.EntireRow.AutoFit
            NewRwHt = c.RowHeight
            c.ColumnWidth = cWdth
            ma.MergeCells = True
            ma.RowHeight = NewRwHt
            cWdth = 0: MrgeWdth = 0
            Application.ScreenUpdating = True
        End If
    End With
End Sub

-------------
Với code như trên bạn có 2 lựa chọn:

1. Một ngày đẹp trời bạn gõ công thức vào Sheet 1!C7, vd. =Sheet2!C12. Khi bạn thay đổi text trong Sheet2!C12 thì ô Sheet1!C7 tự động co dãn.

2. Một ngày xấu trời bạn xóa công thức trong Sheet1!C7 và bạn muốn gõ text trực tiếp trong C7. Bạn cứ gõ tự nhiên và ô C7 tự co dãn.

Sub của tôi là viết tổng quát để bạn tùy cơ ứng biến, xử dụng trong mỗi trường hợp.

Với code trong bài #17 thì nếu tôi không lầm thì bạn chỉ thao tác được khi ngày đẹp trời mà thôi. Tức bạn chỉ có 1 khả năng.
 
Lần chỉnh sửa cuối:
Upvote 0
Với code như trên bạn có 2 lựa chọn:

1. Một ngày đẹp trời bạn gõ công thức vào Sheet 1!C7, vd. =Sheet2!C12. Khi bạn thay đổi text trong Sheet2!C12 thì ô Sheet1!C7 tự động co dãn.

2. Một ngày xấu trời bạn xóa công thức trong Sheet1!C7 và bạn muốn gõ text trực tiếp trong C7. Bạn cứ gõ tự nhiên và ô C7 tự co dãn.

Sub của tôi là viết tổng quát để bạn tùy cơ ứng biến, xử dụng trong mỗi trường hợp.

Với code trong bài #17 thì nếu tôi không lầm thì bạn chỉ thao tác được khi ngày đẹp trời mà thôi. Tức bạn chỉ có 1 khả năng.

Dạ, em đã test code của anh rồi, em cảm ơn anh. Thật sự là vấn đề của em đã giải quyết được rồi ạ. Các anh nhiệt tình thật, khuya muộn mà vẫn giúp đỡ em! Một lần nữa em xin cảm ơn các anh. Chúc GPE, các anh sức khỏe, thành công, hạnh phúc!
 
Upvote 0
Bạn ạ, các anh nào ở đây?
Tôi là người trả lời rất có trách nhiệm. Tôi thường đọc kỹ câu hỏi. Và do tôi tải tập tin AutoFit.xls trong bài #6 nên tôi biết rõ là cell C7 của bạn được merge.

Chỉ có điều giúp bạn rất khó. Bạn không miêu tả bạn đã thao tác lần lượt như thế nào. Và bạn không trước sau như một. Lúc thì bạn đưa tập tin mà text trong cell được nhập vào bằng công thức, lúc thì chả có công thức (AutoFit.xls ở bài #6) - người đọc sẽ đoán mò là text được nhập vào bằng cách gõ trực tiếp.

Code tôi đưa trong bài #10 được viết đặc biệt cho các cell merge.
Do bạn gọi sub AutoFitMergedCellRowHeight trong Worksheet_Change của Sheet1 nên chỉ khi sẩy ra sự kiện thì sub AutoFitMergedCellRowHeight mới được thực hiện.

Vậy thì nếu ta "làm gì đó" mà không sẩy ra Worksheet_Change của Sheet1 nhưng ta vẫn muốn sub AutoFitMergedCellRowHeight được thực hiện thì làm thế nào? Thì ... cứ gọi nó thôi chứ có ai cấm đâu???

Code của Sheet2:
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target = Range("C12") Then
        AutoFitMergedCellRowHeight Sheet1.Range("C7")
    End If
End Sub

Ta thêm code của Sheet1:
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target = Range("C7") Then     
        AutoFitMergedCellRowHeight Target
    End If
End Sub

Và code Module1 với sub của tôi ở bài #10
Mã:
Sub AutoFitMergedCellRowHeight(Target As Range)
Dim NewRwHt As Single
Dim cWdth As Single, MrgeWdth As Single
Dim c As Range, cc As Range
Dim ma As Range

    With Target
        If .MergeCells And .WrapText Then
            Set c = Target.Cells(1, 1)
            cWdth = c.ColumnWidth
            Set ma = c.MergeArea
            For Each cc In ma.Cells
                MrgeWdth = MrgeWdth + cc.ColumnWidth
            Next
            Application.ScreenUpdating = False
            ma.MergeCells = False
            c.ColumnWidth = MrgeWdth
            c.EntireRow.AutoFit
            NewRwHt = c.RowHeight
            c.ColumnWidth = cWdth
            ma.MergeCells = True
            ma.RowHeight = NewRwHt
            cWdth = 0: MrgeWdth = 0
            Application.ScreenUpdating = True
        End If
    End With
End Sub

-------------
Với code như trên bạn có 2 lựa chọn:

1. Một ngày đẹp trời bạn gõ công thức vào Sheet 1!C7, vd. =Sheet2!C12. Khi bạn thay đổi text trong Sheet2!C12 thì ô Sheet1!C7 tự động co dãn.

2. Một ngày xấu trời bạn xóa công thức trong Sheet1!C7 và bạn muốn gõ text trực tiếp trong C7. Bạn cứ gõ tự nhiên và ô C7 tự co dãn.

Sub của tôi là viết tổng quát để bạn tùy cơ ứng biến, xử dụng trong mỗi trường hợp.

Với code trong bài #17 thì nếu tôi không lầm thì bạn chỉ thao tác được khi ngày đẹp trời mà thôi. Tức bạn chỉ có 1 khả năng.

Anh siwtom ơi, anh cho em hỏi thêm vấn đề này nhé. Code của anh em dùng rất ok nhưng phát sinh một vấn đề là: Nếu việc đặt column width càng nhỏ thì độ cao của dòng kết quả sẽ bị thừa tương đối. Giả sử em định dạng ô kết quả như sau: Format Cells/Alignment/Vretical (center) thì sẽ thừa trên và thừa dưới tương đối nhiều.
Em gửi anh file TestautoFix anh xem lại hộ em nhé. Em để kết quả thể hiện cả 3 sheet là sheet1, sheet3 và sheet4
Có cách nào mà dù căn được chiều cao mà không phụ thuộc vào column width không anh?
 

File đính kèm

  • TestautoFix.xls
    49.5 KB · Đọc: 23
Upvote 0
Anh siwtom ơi, anh cho em hỏi thêm vấn đề này nhé. Code của anh em dùng rất ok nhưng phát sinh một vấn đề là: Nếu việc đặt column width càng nhỏ thì độ cao của dòng kết quả sẽ bị thừa tương đối. Giả sử em định dạng ô kết quả như sau: Format Cells/Alignment/Vretical (center) thì sẽ thừa trên và thừa dưới tương đối nhiều.
Em gửi anh file TestautoFix anh xem lại hộ em nhé. Em để kết quả thể hiện cả 3 sheet là sheet1, sheet3 và sheet4
Có cách nào mà dù căn được chiều cao mà không phụ thuộc vào column width không anh?

Tôi cũng không hiểu sao như vậy. Tôi cũng thử kiếm cách sửa code nhưng không thành công. Thôi tôi đành chịu thua. Phất cờ trắng đầu hàng.

Các sư phụ vào giúp chủ topic với.
 
Upvote 0
Anh siwtom ơi, anh cho em hỏi thêm vấn đề này nhé. Code của anh em dùng rất ok nhưng phát sinh một vấn đề là: Nếu việc đặt column width càng nhỏ thì độ cao của dòng kết quả sẽ bị thừa tương đối. Giả sử em định dạng ô kết quả như sau: Format Cells/Alignment/Vretical (center) thì sẽ thừa trên và thừa dưới tương đối nhiều.
Em gửi anh file TestautoFix anh xem lại hộ em nhé. Em để kết quả thể hiện cả 3 sheet là sheet1, sheet3 và sheet4
Có cách nào mà dù căn được chiều cao mà không phụ thuộc vào column width không anh?

xem file kèm, và đọc các dòng sau,

Tôi cũng không hiểu sao như vậy. Tôi cũng thử kiếm cách sửa code nhưng không thành công. Thôi tôi đành chịu thua. Phất cờ trắng đầu hàng.

Các sư phụ vào giúp chủ topic với.


Đó là vì sự õng ẹo của Excel khi đối xử độ rộng thật sự và độ rộng đo qua column.width (thực ra là mỗi column, ngoài số đo đó excel còn chừa lề cho text)

Vì thê cần thêm 1 gia số điều chỉnh bác siwtom ah

cụ thể thêm như sau cho đoạn tính Mrgewidth

PHP:
        Tmp = cc.ColumnWidth
        MrgeWdth = MrgeWdth + Tmp + 0.45 * IIf(Tmp <= 0.6, Tmp / 0.67, 1.1)

code trong file kèm, cũng đã sửa thêm cho linh động cho phép merged các ô từ nhiều rows (khi đó độ cao các rows sẽ fit bằng nhau và tổng đủ autofit)


chú ý: Gia số điều chỉnh-tạm lấy theo test các trường hợp==> người dùng code vận dụng sao uyển chuyển và thay đổi hợp lý với cụ thể các trường hợp của mình



và code đầy đủ Sub AutoFitMergedCellRowHeight

PHP:
Sub AutoFitMergedCellRowHeight(Target As Range)
Dim cWdth As Single, MrgeWdth As Single, NewRwHt As Single, Tmp As Single
Dim c As Range, cc As Range, ma As Range
If Target.MergeCells And Target.WrapText Then
    Application.ScreenUpdating = False
    Set c = Target.Cells(1, 1): cWdth = c.ColumnWidth:  Set ma = c.MergeArea
    For Each cc In ma.Resize(1)
        Tmp = cc.ColumnWidth
        MrgeWdth = MrgeWdth + Tmp + 0.45 * IIf(Tmp <= 0.6, Tmp / 0.67, 1.1)
    Next cc
    ma.MergeCells = False
    c.ColumnWidth = MrgeWdth:   c.EntireRow.AutoFit:    NewRwHt = c.RowHeight / ma.Rows.Count
    c.ColumnWidth = cWdth:      ma.MergeCells = True
    For Each cc In ma.Resize(, 1)
        cc.RowHeight = NewRwHt
    Next cc
    Application.ScreenUpdating = True
End If
End Sub
 

File đính kèm

  • TestautoFix.xls
    66 KB · Đọc: 90
Lần chỉnh sửa cuối:
Upvote 0
code trong file kèm, cũng đã sửa thêm cho linh động cho phép merged các ô từ nhiều rows (khi đó độ cao các rows sẽ fit bằng nhau và tổng đủ autofit)

chú ý: Gia số điều chỉnh-tạm lấy theo test các trường hợp==> người dùng code vận dụng sao uyển chuyển và thay đổi hợp lý với cụ thể các trường hợp của mình

Sửa lại AutoFitMergedCellRowHeight cho chuẩn và nhanh hơn
vẫn lưu ý về Gia số điều chỉnh như bài trước

PHP:
Sub AutoFitMergedCellRowHeight(Target As Range)
Dim cWdth As Single, MrgeWdth As Single, NewRwHt As Single, Tmp As Single
Dim c As Range, cc As Range, ma As Range
If Target.MergeCells And Target.WrapText Then
    Application.ScreenUpdating = False
    Set c = Target.Cells(1, 1)
    With c
        cWdth = .ColumnWidth:  Set ma = .MergeArea
        For Each cc In ma.Resize(1)
            Tmp = cc.ColumnWidth
            MrgeWdth = MrgeWdth + Tmp + 0.45 * IIf(Tmp <= 0.6, Tmp / 0.67, 1.1)
        Next cc
        ma.MergeCells = False:  .ColumnWidth = MrgeWdth
        .EntireRow.AutoFit:     NewRwHt = .RowHeight / ma.Rows.Count:  .ColumnWidth = cWdth
        ma.MergeCells = True:   ma.RowHeight = NewRwHt
    End With
    Application.ScreenUpdating = True
End If
End Sub


Tại code gọi sub AutoFitMergedCellRowHeight ở trang code-sheet của sheet2 sửa thành

PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target = Range("C16") Then
        On Error GoTo 1
        Application.EnableEvents = False
        AutoFitMergedCellRowHeight Sheet1.Range("D18")
        AutoFitMergedCellRowHeight Sheet3.Range("D18")
        AutoFitMergedCellRowHeight Sheet4.Range("D18")
        AutoFitMergedCellRowHeight Sheet5.Range("D18")
        AutoFitMergedCellRowHeight Sheet6.Range("D18")
        AutoFitMergedCellRowHeight Sheet7.Range("D18")
1:     Application.EnableEvents = True
    End If
End Sub
 
Upvote 0
Cám ơn vodoi2x đã tới giải cứu

xem file kèm, và đọc các dòng sau,




Đó là vì sự õng ẹo của Excel khi đối xử độ rộng thật sự và độ rộng đo qua column.width (thực ra là mỗi column, ngoài số đo đó excel còn chừa lề cho text)

Vì thê cần thêm 1 gia số điều chỉnh bác siwtom ah

cụ thể thêm như sau cho đoạn tính Mrgewidth

PHP:
        Tmp = cc.ColumnWidth
        MrgeWdth = MrgeWdth + Tmp + 0.45 * IIf(Tmp <= 0.6, Tmp / 0.67, 1.1)

code trong file kèm, cũng đã sửa thêm cho linh động cho phép merged các ô từ nhiều rows (khi đó độ cao các rows sẽ fit bằng nhau và tổng đủ autofit)


chú ý: Gia số điều chỉnh-tạm lấy theo test các trường hợp==> người dùng code vận dụng sao uyển chuyển và thay đổi hợp lý với cụ thể các trường hợp của mình



và code đầy đủ Sub AutoFitMergedCellRowHeight

PHP:
Sub AutoFitMergedCellRowHeight(Target As Range)
Dim cWdth As Single, MrgeWdth As Single, NewRwHt As Single, Tmp As Single
Dim c As Range, cc As Range, ma As Range
If Target.MergeCells And Target.WrapText Then
    Application.ScreenUpdating = False
    Set c = Target.Cells(1, 1): cWdth = c.ColumnWidth:  Set ma = c.MergeArea
    For Each cc In ma.Resize(1)
        Tmp = cc.ColumnWidth
        MrgeWdth = MrgeWdth + Tmp + 0.45 * IIf(Tmp <= 0.6, Tmp / 0.67, 1.1)
    Next cc
    ma.MergeCells = False
    c.ColumnWidth = MrgeWdth:   c.EntireRow.AutoFit:    NewRwHt = c.RowHeight / ma.Rows.Count
    c.ColumnWidth = cWdth:      ma.MergeCells = True
    For Each cc In ma.Resize(, 1)
        cc.RowHeight = NewRwHt
    Next cc
    Application.ScreenUpdating = True
End If
End Sub

Tôi cũng đã nghĩ nhiều nhưng thấy khó chiến thắng với Excel.
Nếu ta chọn hệ số sai số thì cũng chỉ cho text nhất định. Với text có độ dài khác, cỡ phông chữ khác thì hệ số đó có thể lại quá nhỏ hoặc quá lớn.
Chả nhẽ mỗi lần có text lại chạy code --> nếu thấy thiếu/thừa thì chỉnh hệ số? Có thể vài lần mới được "khít"? Thế thì kéo khít dòng bằng chuột nhanh hơn.
Và nếu trên cùng 1 sheet ta có vài ô merge với text có độ dài khác nhau và do vậy cần các hệ số khác nhau thì phải truyền các hệ số đó vào hàm chứ không "đặt" bất di bất dịch được. Mà như trên tôi đã nói nếu có text mới mà phải test để xác định hệ số sai số cho khớp thì kéo dòng bằng chuột nhanh hơn.

Mà chưa nói tới chuyện code. Tôi làm bằng tay đã thấy có vấn đề. Hoặc đầu óc mụ mẫm nên thao tác sai?
Nếu bạn nào tò mò thì thử làm như sau:

Trong tập tin của tn001: xóa công thức trong ô D18 của Sheet3 --> bỏ chọn merge cho D18 --> kéo cột D sao cho rộng khoảng gần như D18 khi merge --> nhập vào D18 text mới bằng 2 lần text trong ô C16 của Sheet2 (copy rồi dán 2 lần liên tiếp) và kết thúc bằng hic hic (để biết nó kết thúc ở đâu) --> chọn Home / Format / AutoFit Row Height.
Sau khi thao tác như trên tôi không nhìn thấy đoạn cuối của text do chiều cao quá nhỏ.
Chả nhẽ tôi thao tác sai? Có ai AutoFit sao cho vừa khít text kể trên không (Excel 2007)?
 
Upvote 0
Sửa lại AutoFitMergedCellRowHeight cho chuẩn và nhanh hơn
vẫn lưu ý về Gia số điều chỉnh như bài trước

PHP:
Sub AutoFitMergedCellRowHeight(Target As Range)
Dim cWdth As Single, MrgeWdth As Single, NewRwHt As Single, Tmp As Single
Dim c As Range, cc As Range, ma As Range
If Target.MergeCells And Target.WrapText Then
    Application.ScreenUpdating = False
    Set c = Target.Cells(1, 1)
    With c
        cWdth = .ColumnWidth:  Set ma = .MergeArea
        For Each cc In ma.Resize(1)
            Tmp = cc.ColumnWidth
            MrgeWdth = MrgeWdth + Tmp + 0.45 * IIf(Tmp <= 0.6, Tmp / 0.67, 1.1)
        Next cc
        ma.MergeCells = False:  .ColumnWidth = MrgeWdth
        .EntireRow.AutoFit:     NewRwHt = .RowHeight / ma.Rows.Count:  .ColumnWidth = cWdth
        ma.MergeCells = True:   ma.RowHeight = NewRwHt
    End With
    Application.ScreenUpdating = True
End If
End Sub


Tại code gọi sub AutoFitMergedCellRowHeight ở trang code-sheet của sheet2 sửa thành

PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target = Range("C16") Then
        On Error GoTo 1
        Application.EnableEvents = False
        AutoFitMergedCellRowHeight Sheet1.Range("D18")
        AutoFitMergedCellRowHeight Sheet3.Range("D18")
        AutoFitMergedCellRowHeight Sheet4.Range("D18")
        AutoFitMergedCellRowHeight Sheet5.Range("D18")
        AutoFitMergedCellRowHeight Sheet6.Range("D18")
        AutoFitMergedCellRowHeight Sheet7.Range("D18")
1:     Application.EnableEvents = True
    End If
End Sub

Bạn thử nhập vào ô C16 của sheet2 text = 2 lần text hiện có và viết thêm hic hic. Bạn sẽ thấy text tại sheet1, 3, và 4 bị cụt. Nếu với mỗi text mới trong C16 lại phải test để xác định hệ số sai số thì kéo dòng bằng chuột nhanh hơn.
 
Upvote 0
Em cảm ơn các anh Hoàng Trọng Nghĩa, siwtom, vodoi2x cùng mọi người đã quan tâm giúp giải quyết vấn đề của em. Vì dữ liệu trong phạm vi của em thì code của anh siwtom và vodoi2x là ok rồi ạ. Tuy nhiên, đúng như anh siwtom nói:
Nếu dữ liệu text nhiều hơn thì vấn đề autofix vẫn phải xem lại.
 
Upvote 0
Bạn thử nhập vào ô C16 của sheet2 text = 2 lần text hiện có và viết thêm hic hic. Bạn sẽ thấy text tại sheet1, 3, và 4 bị cụt. Nếu với mỗi text mới trong C16 lại phải test để xác định hệ số sai số thì kéo dòng bằng chuột nhanh hơn.

Thua, có thể gia số điều chỉnh còn phụ thuộc độ dài, kích cỡ font chữ ....... (cái này chắc phải đợi Microsoft khi nào opensource bộ office mới hiểu bản chất được)

Mà bài này như viết cho vui vậy, chứ trong 1 file excel thông thường mấy khi ng ta merged cell đâu, có chăng thì khoảng 5-7 cells --> khi đó làm tay nhanh hơn

Vậy thì ngon nữa thì đẩy cái gia số về người dùng tự nhập vào thui, hihihii

túm lại, là người dùng quyết định món ăn: đặc sản ngon thì lại độc, bình dân thì phải chấp nhận khổ hihiiiiiiii
 
Lần chỉnh sửa cuối:
Upvote 0
Thua, có thể gia số điều chỉnh còn phụ thuộc độ dài, kích cỡ font chữ ....... (cái này chắc phải đợi Microsoft khi nào opensource bộ office mới hiểu bản chất được)

Mà bài này như viết cho vui vậy, chứ trong 1 file excel thông thường mấy khi ng ta merged cell đâu, có chăng thì khoảng 5-7 cells --> khi đó làm tay nhanh hơn

Vậy thì ngon nữa thì đẩy cái gia số về người dùng tự nhập vào thui, hihihii

túm lại, là người dùng quyết định món ăn: đặc sản ngon thì lại độc, bình dân thì phải chấp nhận khổ hihiiiiiiii
Vâng, vấn đề của em thì ok rồi anh ạ. Em chia nhỏ cột ra như vậy là vì lý do file excel của em dùng để làm báo cáo, trong báo cáo vừa có nhiều bảng dữ liệu, lại có chỗ nhiều phần soạn thảo nữa. Nên em để cột nhỏ như vậy sẽ căn chỉnh chính xác và phù hợp với công việc của em hơn anh ah.
 
Upvote 0
Quá Hay !! Cảm ơn Bác ! Hoàng Trọng Nghĩa quả là đơn giản mà hay quá đâu cũng là mục mà em đang quan tâm, Rất mong Bác đóng góp những cao kiến vào diễn đàn.



 
Upvote 0
Em có file BBNT. em muốn khi thay đổi tên công việc tại các biên bản nghiệm thu thì dòng tên công việc tự động thay đổi kích thước..e đã tham khảo các bài viết trong topic nhưng chưa làm được. Các anh có thể giúp em được không a.
Cảm ơn các anh nhiều.!.
cách này đầy trên diễn đàn đấy bạn. tham khảo đại 1 trang này nha
http://www.giaiphapexcel.com/forum/...it-Row-với-Merge-Cells-(nhiều-hàng-nhiều-cột)
 
Upvote 0
Đoạn code này:
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    Call AutoFitMergedCellRowHeight(Target)
End Sub
Bạn sửa thành:
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Intersect(Range("[COLOR=#ff0000][B]gì gì đó[/B][/COLOR]"), Target) is Nothing then
    If Target.Count = 1 then Call AutoFitMergedCellRowHeight(Target)
  End If
End Sub
Cái gì gì đó chính là vùng mà bạn muốn giới hạn (chẳng hạn là A1:A100)
Thầy ơi E chạy đoạn Code trên thấy báo lỗi, mong thầy giúp Em , E cám ơn thầy1.jpg
 
Upvote 0
Không biết có bạn nào dùng VBA giải quyết được vấn đề này không?
VD: tự canh chỉnh chiều cao là 18 khi ô có 01 dòng chữ; 30 khi ô có 02 dòng chữ; 45 khi ô có 03 dòng chữ; 60 khi ô có 04 dòng chữ; 75 khi ô có 05 dòng chữ;....
 
Upvote 0
Web KT

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

Back
Top Bottom