2012-12-28 38 views
5

Tôi đã viết một số mã VBA tự động tạo biểu đồ. Một trong các trục trên biểu đồ này không sử dụng các nhãn thông thường mà là một hình ảnh. Tôi đã lưu trữ hình ảnh dưới dạng hình ảnh và tôi sử dụng các phương thức .Copy và .Paste để lấy một bản sao của hình ảnh này lên biểu đồ.Cách di chuyển hình dạng xoay đến một vị trí cụ thể trong excel 2010 bằng cách sử dụng vba

Đây là nơi mọi thứ trở nên khó hiểu. Tôi cần phải xoay hình ảnh để nó được căn chỉnh với trục (sử dụng thuộc tính .rotation). Nhưng khi tôi đặt thuộc tính .top và .left, hình dạng không kết thúc ở nơi tôi mong đợi. Trong thực tế, thiết lập các thuộc tính là 0 và 0 không làm những gì tôi mong chờ. Tôi đã thử thay đổi thứ tự của cách tôi đặt các thuộc tính trên đối tượng hình ảnh nhưng nó chỉ xuất hiện ở một vị trí khác (sai).

Tôi chắc chắn tôi thiếu một số khía cạnh quan trọng về cách VBA/Excel đặt đối tượng liên quan đến những gì tôi đang đặt thuộc tính trên cùng và bên trái. Về cơ bản mục tiêu của tôi là làm cho hình ảnh ở phía bên trái của biểu đồ với chiều rộng tương tự như chiều cao của khu vực âm mưu (kể từ khi hình ảnh được xoay tôi lý thuyết này sẽ làm cho nó cùng kích thước).

Mã này không làm việc:

Sheets(ImageSheet).Shapes("agreement").Copy 
c.Chart.Paste 
c.Chart.Shapes(1).Rotation=270 
c.Chart.Shapes(1).width = c.Chart.PlotArea.height 
c.Chart.shapes(1).left = 5 
c.Chart.Shapes(1).top = c.Chart.PlotArea.top 

Tôi cũng đã thử mã này

c.chart.Shapes(1).top = c.chart.PlotArea.top + c.Chart.PlotArea.height 

vì tôi nghĩ có lẽ nó đã được tính toán "top" như góc trên bên trái của đối tượng hình ảnh khi nó không được xoay (xoay 270 độ làm cho điểm này ở một nơi mà nó phải phù hợp với đáy của khu vực cốt truyện). Nhưng điều đó không làm những gì tôi mong đợi.

Hình ảnh là hình chữ nhật gầy hoạt động như một nhãn cho trục. Biểu đồ sẽ được đưa ra như sau: http://imgur.com/NrSXR và hình ảnh nhãn trục sẽ có dạng như thế này http://imgur.com/08EWU

Tôi thiếu gì ở đây?

+0

+1 cho câu hỏi chu đáo bằng văn bản. Nó có thể giúp đỡ nếu bạn có thể cung cấp một liên kết đến một số tệp giả với hình ảnh của bạn trong đó. –

Trả lời

1

Tôi đã kết thúc quay và thay đổi kích thước hình ảnh trước khi sao chép và dán vào biểu đồ và sau đó định vị nó. Tôi đã phải sử dụng phương pháp IncrementLeft và IncrementTop thay vì thiết lập các thuộc tính bên trái và trên trực tiếp bởi vì nó không có hiệu ứng mong muốn.

Khi thực hiện dán vào biểu đồ, đối tượng luôn kết thúc ở góc trên bên trái, vì vậy tôi có thể tăng sang bên trái theo số lượng nhỏ tôi muốn làm lề mà tôi muốn ở đó và tăng giá trị đầu PlotArea.top để căn chỉnh nó với khu vực ô.

Tôi cũng ngạc nhiên khi tạo bản sao hình ảnh của mình, nó giữ lại "tên" tôi gọi nó là khi tôi sao chép nó vào trang tính và biểu đồ mới. Điều này đặc biệt hữu ích khi định vị hình ảnh khi nó ở trên biểu đồ.

Tôi cũng cần thực thi mã này ở phần cuối của quy trình, sau khi mọi thứ khác được định vị và căn chỉnh, hoặc khi tôi định vị nhãn dữ liệu cho một trong các chuỗi của chúng, chúng sẽ không xuất hiện chính xác.

Dưới đây là đoạn code mà tôi đã kết thúc bằng:

'make a copy of the label image and refer to it with a variable for convenience 
    Sheets(ImageSheet).Shapes("maturity").Copy 
    i = Sheets(ImageSheet).Shapes.Count 
    Sheets(ImageSheet).Paste 
    Dim axisImage As Shape 
    Set axisImage = Sheets(ImageSheet).Shapes(i + 1) 

    'rotate and resize the image 
    With axisImage 
     .Rotation = 270 
     .width = c.Chart.PlotArea.height 
    End With 

    'cut and paste the new image to the chart 
    axisImage.Cut 
    c.Chart.Paste 

    'position it in the chart using IncrementTop and IncrementLeft because setting the properties directly does not have the desired effect 
    c.Chart.Shapes("maturity").IncrementTop c.Chart.PlotArea.top 
    c.Chart.Shapes("maturity").IncrementLeft c.Chart.PlotArea.left - c.Chart.Shapes("maturity").height 
+0

Sau 2 năm rưỡi ... bạn đã tìm thấy câu trả lời *. – bonCodigo

1

Bạn có thể căn chỉnh biểu đồ của mình thành vị trí mà hình dạng có thể căn chỉnh/căn chỉnh trên ô không?

NẾU CÓ thì đây là một gợi ý: -

  • Bạn có thể xác định vị trí shape thành một cell. Sau đó điều chỉnh kích thước cho những gì bạn cần. Và xoay.
  • Sau đó, thay đổi thuộc tính bring forward được hiển thị trên Chart.
  • Tiếp NhómChartShape

PS: tôi ghi lại một macro. Tuy nhiên, tốt nhất là bạn có thể cho chúng tôi biết hình ảnh chính xác của bạn (= cách trông giống như thế nào) của câu hỏi của bạn.

+0

Tôi nghĩ bạn nói đúng. Tôi nhận ra sau đó rằng nó có lẽ không làm những gì tôi mong đợi bởi vì hình ảnh đã chạm vào các cạnh của biểu đồ khi kịch bản đang thực hiện các hành động trên đó. Định kích thước và định vị nó trước khi đặt nó trên biểu đồ sẽ loại bỏ vấn đề đó. Tôi sẽ thử thứ hai này. –

Các vấn đề liên quan