Vẽ đường thẳng trong excel

Euler

Biên Tập Viên
1. Vẽ đường thẳng:
Đầu tiên ta thử record macro xem sao nhé:
Bạn cần đăng nhập để thấy đính kèm

Mã:
Sub Macro1()
    ActiveSheet.Shapes.AddConnector(msoConnectorStraight, 79, 31, 175, 63).Select
End Sub
Để vẽ đường thẳng, ta thấy rằng code trên đã sử dụng phương thức AddConnector đối với shapes. Đường thẳng là một "Connector" phải không nào ^_^ Bạn nào làm về điện chắc đã nghe tới Connector nhiều rồi phải không, về vật lý nó là giắc kết nối hai đầu dây điện với nhau.
Tham số của phương thức AddConnector, đầu tiên là "sử dụng chủng loại connector nào". Và dưới đây là bảng định nghĩa:
Bạn cần đăng nhập để thấy đính kèm


Lần này ta sử dụng đường thẳng liên tục, cho nên tham số của nó là msoConnectorStraight .
Tiếp theo, ta cần chỉ định điểm đầu và điểm cuối cho phương thức AddConnector. Và vì vậy sẽ có bốn tham số truyền cho nó.
BeginX BeginY là điểm đầu.
EndX EndY là điểm cuối.
X ở đây là khoảng cách tới mép trái của worksheet.
Y là khoảng cách tới mép trên của worksheet.
Bạn cần đăng nhập để thấy đính kèm


2. Cho ràng buộc vào cells.
Chúng ta sẽ cho đường thẳng ràng buộc vào các cells trên bảng tính. Như vậy thì sẽ đảm bảo đường thẳng được kéo từ nơi có dữ liệu cần minh họa một cách chính xác.
Chúng ta biết rằng cells có các thuộc tính mà ta có thể lợi dụng, như là :Left, Top,..
Mã:
Sub Macro2()
    ActiveSheet.Shapes.AddConnector msoConnectorStraight, Range("B2").Left, Range("B2").Top, Range("D5").Left, Range("D5").Top
End Sub
Bạn cần đăng nhập để thấy đính kèm


Việc viết code như trên thật là phiền hà nếu muốn sửa code. Bây giờ ta sẽ làm cho code trở nên sáng sủa. Khi cần thay đổi thông số thì cũng dễ dàng nhanh chóng hơn.
Mã:
Sub Macro3()
    Dim BeginX As Single    ''Điểm bắt đầu, cự ly tính từ mép trái
    Dim BeginY As Single    ''Điểm bắt đầu, cự ly tính từ mép trên
    Dim EndX As Single      ''Điểm kết thúc, cự ly tính từ mép trái
    Dim EndY As Single      ''Điểm kết thúc, cự ly tính từ mép trên
    BeginX = Range("B2").Left
    BeginY = Range("B2").Top
    EndX = Range("D5").Left
    EndY = Range("D5").Top
    ActiveSheet.Shapes.AddConnector msoConnectorStraight, BeginX, BeginY, EndX, EndY
End Sub
3. Đường thẳng bắt đầu từ trong cells.
Ở mục trên ta cho đường thẳng ràng buộc vào các đỉnh của cells. Bây giờ ta sẽ cho nó ràng buộc vào giữa cells xem sao nhé.
Bạn cần đăng nhập để thấy đính kèm


Mã:
Sub Macro4()
    Dim BeginX As Single    ''Điểm bắt đầu, cự ly tới mép trái
    Dim BeginY As Single    ''Điểm bắt đầu, cự ly tới mép trên
    Dim EndX As Single      ''Điểm kết thúc, cự ly tới mép trái
    Dim EndY As Single      ''Điểm kết thúc, cự ly tới mép trên
    BeginX = Range("B2").Left
    BeginY = Range("B2").Top + Range("B2").Height / 2
    EndX = Range("C5").Left + Range("C5").Width / 2
    EndY = Range("C5").Top
    ActiveSheet.Shapes.AddConnector msoConnectorStraight, BeginX, BeginY, EndX, EndY
End Sub
Suy nghĩ trên là vì tôi muốn làm việc như dưới đây:
Mã:
Sub Macro5()
    Dim i As Long, FC As Range
    For i = 2 To 9
        Set FC = Range("C2:C9").Find(What:=Cells(i, 1), Lookat:=xlWhole)
        If Not FC Is Nothing Then
            ActiveSheet.Shapes.AddConnector msoConnectorStraight, _
                Cells(i, 1).Offset(0, 1).Left, _
                Cells(i, 1).Top + Cells(i, 1).Height / 2, _
                FC.Left, _
                FC.Top + FC.Height / 2
        End If
    Next i
End Sub
Bạn cần đăng nhập để thấy đính kèm


Diễn đàn tuhocvba.net dịch từ:
 
Top