Code về Borders

Liên hệ QC

ndu96081631

Huyền thoại GPE
Thành viên BQT
Super Moderator
Tham gia
5/6/08
Bài viết
30,703
Được thích
53,952
Tôi record macro công việc kẽ khung cho 1 vùng, kết quả đạt được như sau:
PHP:
Sub Macro1()
'
' Macro1 Macro
' Macro recorded 8/7/2008 by ndu
'

'
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    With Selection.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlInsideVertical)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlInsideHorizontal)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
End Sub
Tôi nhận thấy rằng các đoạn ở giữa With... End With cứ lập đi lập lại... Vậy có cách nào tạo 1 vòng lập để đơn giãn hóa code này không? Đai khái như sau:
PHP:
For i = 1 to 6
    With Selection.Borders(...cái gì đó...)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
Next
...cái gì đó... này sẽ thay đổi tuần tự: xlEdgeLeft rồi đến xlEdgeTop... vân vân... đến xlInsideHorizontal
Tôi đã thử nhưng không làm được! Mong các sư phụ chỉ dẩn
 
Đơn giản vậy được không?
Mã:
Sub chay() Selection.Borders(xlDiagonalDown).LineStyle = xlNone Selection.Borders(xlDiagonalUp).LineStyle = xlNone For i = 1 To 6 With Selection.Borders(i)         .LineStyle = xlContinuous         .Weight = xlThin         .ColorIndex = xlAutomatic     End With Next End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Tôi record macro công việc kẽ khung cho 1 vùng, kết quả đạt được như sau:
PHP:
Sub Macro1()
'
' Macro1 Macro
' Macro recorded 8/7/2008 by ndu
'

'
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    With Selection.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlInsideVertical)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlInsideHorizontal)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
End Sub
Tôi nhận thấy rằng các đoạn ở giữa With... End With cứ lập đi lập lại... Vậy có cách nào tạo 1 vòng lập để đơn giãn hóa code này không? Đai khái như sau:
PHP:
For i = 1 to 6
    With Selection.Borders(...cái gì đó...)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
Next
...cái gì đó... này sẽ thay đổi tuần tự: xlEdgeLeft rồi đến xlEdgeTop... vân vân... đến xlInsideHorizontal
Tôi đã thử nhưng không làm được! Mong các sư phụ chỉ dẩn
Tôi thấy cũng được nhưng chưa biết cách chuyển từ "ThuNghi" -> ThuNghi, cụ thể là bien trong sub
Sub Macro1()
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
Vitri = Array("xlEdgeLeft", "xlEdgeTop")
For j = 0 To 1
bien = Vitri(j)
MsgBox bien
With Selection.Borders(bien)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With

Next

End Sub
 
Upvote 0
Cãm ơn các bạn! Tôi cũng vừa tìm ra
PHP:
Sub Kekhung()
    Dim Bor As Byte
    For Bor = 1 To 4
        With Selection.Borders(Bor)
          .LineStyle = 7
          .Weight = 2
          .ColorIndex = 0
       End With
    Next
End Sub
i chạy từ 1 đến 4 là đủ
----------------------------
Ah... code của ThuNghi bị lổi tại dòng này:
With Selection.Borders(bien)
 
Lần chỉnh sửa cuối:
Upvote 0
Code này Rất hay. Cái câu
.ColorIndex = 0
không có làm gì trong này nên bỏ nó luôn
Hình như câu .Weight = 2
cũng mặc định, ta thử cho bay luôn không Dígita?
 
Upvote 0
Đúng vậy!
1 trong 2 món: LineStyleWeight có thể bỏ đi 1, nhưng không thể bỏ cả 2 đồng thời (ColorIndex nếu không ghi vào thì sẽ được chọn Auto)
Ngoài ra còn có chiêu khác:
PHP:
Sub Kekhung()
  For i = 7 To 12
    With Selection.Borders(i)
        .LineStyle = 7
    End With
  Next
End Sub
Hồi nãy i chạy từ 1 đến 4... bây giờ i chạy từ 7 đến 12... Vẩn chạy tốt
Hoặc:
PHP:
Sub Kekhung()
  For i = 11 To 12
    With Selection.Borders(i)
        .LineStyle = 7
    End With
  Next
  Selection.BorderAround LineStyle:=7
End Sub
i = 11 to 12 để kẽ khung bên trong và BorderAround bao vòng ngoài
 
Lần chỉnh sửa cuối:
Upvote 0
Thêm 1 chiêu nữa, cực ngắn:
Kẽ khung:
PHP:
Sub Kekhung()
        Application.SendKeys ("^+7^+.^+,^+7")
End Sub
Xóa khung
PHP:
Sub Xoakhung()
    Application.SendKeys ("^+-")
End Sub
 
Upvote 0
À tôi biết rồi. Tuyệt chiêu của ndu96081631 dùng sendkey mà chỉ áp phê khi chạy trong XL. Nếu kích hoạt trong VBE thì nó là .... hư chiêu.

Cám ơn ThuNghi.
 
Upvote 0
À tôi biết rồi. Tuyệt chiêu của ndu96081631 dùng sendkey mà chỉ áp phê khi chạy trong XL. Nếu kích hoạt trong VBE thì nó là .... hư chiêu.

Cám ơn ThuNghi.
Là sao ta? Tôi chưa hiểu lắm ý bạn
Tôi làm thí nghiệm như sau:
PHP:
Sub Kekhung()
 Dim DS As Range
 Set DS = [C3].CurrentRegion
 DS.Select
 Application.SendKeys ("^+7^+.^+,^+7")
End Sub
Với C3:H20 là vùng dử liệu... Thấy code chạy bình thường mà...
 
Upvote 0
Tôi hiểu nghĩa của đoạn mã: "^+7^+.^+,^+7"
và tôi thực hiện bằng bàn phím được (chọn vùng, ấn giữ Ctrl - Shitf rồi gõ các phím
7 . , 7
Rất tốt.
Nhưng chép mã của ndu96081631 thì chạy macro báo lỗi (debug). Xin hỏi có phải đặt tham số gì trong màn hình Visual Basic?
Nhờ các anh chị em chỉ giúp.
 
Upvote 0
Tôi đã thủ trực tiếp trên Excel:
Chọn vùng, ấn giữ Ctrl – Shift và gõ 7 , . 7 thì thành công
Nhưng chép mã của ndu96081631 vào Visual Basic thì không chạy được.
Xin các anh chị chỉ giúp, có phải cài đặt gì thêm?
 
Upvote 0
Tôi hiểu nghĩa của đoạn mã: "^+7^+.^+,^+7"
và tôi thực hiện bằng bàn phím được (chọn vùng, ấn giữ Ctrl - Shitf rồi gõ các phím
7 . , 7
Rất tốt.
Nhưng chép mã của ndu96081631 thì chạy macro báo lỗi (debug). Xin hỏi có phải đặt tham số gì trong màn hình Visual Basic?
Nhờ các anh chị em chỉ giúp.
Bạn thử đưa nguyên văn đoạn code bị lổi lên xem thử! Nếu có dử liệu thì đưa file lên luôn càng tốt
 
Upvote 0
Web KT

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

Back
Top Bottom