2010-09-19 40 views
6

Khi ảnh được chèn vào trang tính Excel bằng phương pháp Shapes.AddPicture (...), Excel sẽ tự động đặt tên cho nó là "Hình 1", "Hình 2".Cách lấy tên nội bộ của Hình dạng trong Excel

Tên này có thể được sử dụng để tham chiếu đến đối tượng hình dạng này trong Bộ sưu tập hình dạng như Shapes.Item ("Hình 1"). Nếu tên được thay đổi trong Excel bằng cách sử dụng Hộp tên, có hai tên khác nhau (hoặc một trong số chúng là khóa/Chú thích) mà qua đó đối tượng Hình dạng có thể được tham chiếu. Vì vậy, nếu tôi thay đổi tên thành "MyPic" Tôi có thể sử dụng bất kỳ trong số này để tham khảo một hình dạng trong bộ sưu tập Shapes:

Shapes.Item("Picture 1") 
OR 
Shapes.Item("MyPic") 

Tên có thể được truy cập bằng tài sản Shape.Name trong VBA nhưng làm thế nào chúng ta có thể truy cập khác giá trị (MyPic) mà dường như không thay đổi trong nội bộ?

CẬP NHẬT
Điều tôi đang cố gắng làm là liên kết ô với hình ảnh trong Excel. Tôi giữ dữ liệu hình ảnh trong bình luận của ô. Đây là các tình huống:

  1. Nếu tôi giữ tên ảnh (tên bên ngoài) sao chép tên và ô sẽ trỏ đến cùng một cấu trúc.
  2. Nếu tôi giữ tên nội bộ thì sao chép-dán vào trang tính khác sẽ tạo ra vấn đề giống như tên nội bộ có thể tồn tại trên một số trang tính khác trong cùng một bảng tính.
  3. Nếu tôi lấy ID, tôi sẽ không thể để có được những tài liệu tham khảo Hình ảnh từ nó

Đối với tôi nhận được tên nội bộ là rất quan trọng. Tôi có tham chiếu hình dạng nhưng không có ý tưởng làm thế nào để có được tên nội bộ từ ref này.

Trả lời

7

Ngay sau khi bạn đã thêm hình dạng vào trang tính (oSht), bạn có thể sử dụng oSht.Shapes(Osht.Shapes.count) để tham chiếu nó. Vì vậy, oSht.Shapes(osht.shapes.count).Name sẽ cung cấp cho bạn tên của nó.

Nếu bạn muốn tìm chỉ mục của hình dạng trong bộ sưu tập Hình dạng và bạn biết tên của nó thì bạn cần phải lặp qua Shapes.Name cho đến khi bạn tìm thấy nó. Nếu bạn biết chỉ mục, thì bạn có thể tạo tên thay thế "Hình ảnh n" hoặc bạn có thể lưu trữ tên thay thế "Hình ảnh n". Bạn cũng có thể lưu trữ thuộc tính ID của hình dạng và sau đó tham chiếu hình dạng bằng cách lặp qua bộ sưu tập Hình dạng cho đến khi bạn tìm thấy Shape.ID

Nếu người dùng di chuyển hình dạng đến một trang tính khác và đặt lại tên, không có cách nào xác định nó là hình dạng ban đầu, bởi vì tên bên ngoài, tên thay thế, chỉ mục Hình dạng và ID sẽ khác nhau. Vì vậy, nếu đây là một vấn đề trong kịch bản của bạn, bạn sẽ cần phải xem xét sao chép bóng hoặc bảo vệ tờ.

+0

+1: "Nếu bạn biết chỉ mục thì bạn có thể tạo tên thay thế" Hình n "- điều này có thể không đúng vì nếu ảnh ở chỉ mục 2 bị xóa khỏi bộ sưu tập hình dạng, chúng tôi có thể có" Hình ảnh 3 "tại chỉ số 2. Tôi không nghĩ rằng tên nội bộ sẽ được thay đổi để phù hợp với chỉ mục. – A9S6

+0

Nếu tôi thêm một hình dạng trong VBA, giá trị trả về từ Shapes.AddPicture (...) sẽ cho tôi tham chiếu đến nó để không cần phải làm một hình dạng (Đếm) ở đây. Ngoài ra, đối với một đối tượng mới được tạo, cả tên nội bộ và tên hiển thị sẽ giống nhau, do đó, shape.Name sẽ hoạt động tại thời điểm đó. Vấn đề là làm thế nào để có được tên nội bộ bằng cách sử dụng tham chiếu hình dạng sau này (người dùng có thể đã thay đổi tên hiển thị) – A9S6

+0

Nếu bạn có một tham chiếu hợp lệ cho một đối tượng hình dạng thì Shape.name sẽ cung cấp cho bạn tên bên ngoài của nó. –

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