Sai box: Nhờ tư vấn về macro

Liên hệ QC

4vuong4tron

Thành viên mới
Tham gia
21/5/18
Bài viết
29
Được thích
3
Có 1 a bên diễn đàn đã viết cod giúp mình (phai mình đã đính kèm ở trên), nhưng khi ấn lựa chon 2 xong các ô công thức mặc định (các ô bên phải ô chữ đỏ) đã bị xoá nên khi ấn lại lựa chọn 1 các ô đó sẽ bị mất công thức, nhờ ae giúp bổ sung đoạn macro (khi chọn 2 xong sẽ sửa công thức các ô bên phải ô chữ đỏ về như phai gốc ban đầu vì ngày bắt đầu và kết thúc mình sẽ căn chỉnh thường xuyên), mình xin gửi tiền cà phê, ăn sáng
Lưu ý: Lựa chọn 1 là: liên kết ô như hình 2 và Lựa chọn 2 là: trở về hình 1 (như lúc ban đầu)
Dòng cốt của a bên diễn đàn exel đây (phai có cod mình đã đính kèm ở trên):
Option Explicit
Sub merge()
Dim lr&, j&, ip&, cell As Range, celb As Range, bd, ngay
ip = InputBox(" Ban muon merge hay unmerge?" & vbLf & "1: merge" & vbLf & "2: unmerge")
lr = Cells(Rows.Count, "C").End(xlUp).Row
For Each cell In Range("CB10:CB" & lr)
If Not IsEmpty(cell) And IsNumeric(cell) Then
bd = cell + IIf(cell Mod 2 = 0, 1, 0)
ngay = (cell.Offset(, -1).Value - 1) / 2
For Each celb In Range("CD8:FO8")
If celb = bd Then
With Cells(cell.Row, celb.Column)
Application.DisplayAlerts = False
.UnMerge
If ip = 1 Then
.Resize(1, ngay).merge
.Resize(1, ngay).HorizontalAlignment = xlCenter
End If
Application.DisplayAlerts = True
End With
Exit For
End If
Next
End If
Next
End Sub

Hình 1.pngHình 2.png
 

File đính kèm

  • Tiến độ 4.1 (diễn đàn).xlsm
    492 KB · Đọc: 2
Lần chỉnh sửa cuối:
Bạn đã đăng sai box và bị khóa 1 lần rồi sao không rút kinh nghiệm nhỉ? Đăng trong box Lập trình với VBA ấy.
Sửa lại như sau (thêm 2 dòng đậm đậm, đỏ đỏ á):
Rich (BB code):
Sub merge()
Dim lr&, j&, ip&, cell As Range, celb As Range, bd, ngay
ip = InputBox(" Ban muon merge hay unmerge?" & vbLf & "1: merge" & vbLf & "2: unmerge")
lr = Cells(Rows.Count, "C").End(xlUp).Row
For Each cell In Range("CB10:CB" & lr)
    If Not IsEmpty(cell) And IsNumeric(cell) Then
        bd = cell + IIf(cell Mod 2 = 0, 1, 0)
        ngay = (cell.Offset(, -1).Value - 1) / 2
        For Each celb In Range("CD8:FO8")
            If celb = bd Then
                With Cells(cell.Row, celb.Column)
                    Application.DisplayAlerts = False
                    .UnMerge
                    If ip = 1 Then
                        .Resize(1, ngay).merge
                        .Resize(1, ngay).HorizontalAlignment = xlCenter
                    Else
                        .Copy .Resize(1, ngay)
                    End If
                    Application.DisplayAlerts = True
                End With
                Exit For
            End If
        Next
    End If
Next
End Sub
 
Lần chỉnh sửa cuối:
Bạn đã đăng sai box và bị khóa 1 lần rồi sao không rút kinh nghiệm nhỉ? Đăng trong box Lập trình với VBA ấy.
Sửa lại như sau (thêm 2 dòng đậm đậm, đỏ đỏ á):
Rich (BB code):
Sub merge()
Dim lr&, j&, ip&, cell As Range, celb As Range, bd, ngay
ip = InputBox(" Ban muon merge hay unmerge?" & vbLf & "1: merge" & vbLf & "2: unmerge")
lr = Cells(Rows.Count, "C").End(xlUp).Row
For Each cell In Range("CB10:CB" & lr)
    If Not IsEmpty(cell) And IsNumeric(cell) Then
        bd = cell + IIf(cell Mod 2 = 0, 1, 0)
        ngay = (cell.Offset(, -1).Value - 1) / 2
        For Each celb In Range("CD8:FO8")
            If celb = bd Then
                With Cells(cell.Row, celb.Column)
                    Application.DisplayAlerts = False
                    .UnMerge
                    If ip = 1 Then
                        .Resize(1, ngay).merge
                        .Resize(1, ngay).HorizontalAlignment = xlCenter
                    Else
                        .Copy .Resize(1, ngay)
                    End If
                    Application.DisplayAlerts = True
                End With
                Exit For
            End If
        Next
    End If
Next
End Sub
vẫn ko được ad ơi, ý em là copy ô công thức mẫu (ô vàng-bên phải ngày cuối) và dán sang ô xanh (cột ngày 1 đến ngày cuối) từ trên xuống dưới
 

File đính kèm

  • Hình 3.png
    Hình 3.png
    126.9 KB · Đọc: 2
Lần chỉnh sửa cuối:

File đính kèm

  • Tiến độ 4.1 (diễn đàn).xlsm
    491.6 KB · Đọc: 4
dạ em cảm ơn anh, em muốn khi gõ 1 thì chữ màu đỏ sẽ hiện ra, còn khi gõ 2 chữ màu đỏ sẽ ẩn đi (các ô bôi xanh đó anh), nhờ a giúp em với
Thêm 1 chút ở chỗ If ip = 1 then
Rich (BB code):
                    If ip = 1 Then
                        .Resize(1, ngay).merge
                        .Resize(1, ngay).HorizontalAlignment = xlCenter
                        .Resize(1, ngay).Font.Color = vbRed
                    Else
                        .Copy .Resize(1, ngay)
                        .Resize(1, ngay).Font.Color = vbBlack
                    End If
 
Thêm 1 chút ở chỗ If ip = 1 then
Rich (BB code):
                    If ip = 1 Then
                        .Resize(1, ngay).merge
                        .Resize(1, ngay).HorizontalAlignment = xlCenter
                        .Resize(1, ngay).Font.Color = vbRed
                    Else
                        .Copy .Resize(1, ngay)
                        .Resize(1, ngay).Font.Color = vbBlack
                    End If
dạ em muốn khi ấn 2 chữ màu đỏ sẽ không thấy đó anh (mặc định ô xanh khi chưa ấn 1 sẽ ẩn không thấy), ở trên đang để màu đen
 
Thay vbBlack bằng .Interior.Color !!! (có dấu chấm trước Interior)
nhờ a giúp em bổ sung trường hợp này với: khi chọn 1 nó mới hiện chữ đỏ, còn trường hợp khác thì toàn bộ ô màu xanh sẽ ko hiện chữ (để nếu e có thay đổi ngày bắt đầu chữ đỏ sẽ ko hiện), e cần vùng ô xanh từ cột cd(ngày 1) đến cột fo(ngày cuối) ẩn chữ
 
Lần chỉnh sửa cuối:
nhờ a giúp em với: khi chọn 1 nó mới hiện chữ đỏ, còn trường hợp khác thì toàn bộ ô màu xanh sẽ ko hiện chữ (để nếu e có thay đổi ngày bắt đầu chữ đỏ sẽ ko hiện), e cần vùng ô xanh từ cột cd(ngày 1) đến cột fo(ngày cuối) ẩn chữ
Vậy thì thay dòng .Resize(1, ngay).Font.Color = vbBlack ở bài #8 bằng dòng:

Range("CD" & cell.Row & ":FO" & cell.Row).Font.Color = .Interior.Color
 
Web KT
Back
Top Bottom