2010-09-19 16 views
6

Cuando una imagen se inserta en una hoja de cálculo de Excel utilizando el método Shapes.AddPicture (...), Excel le da un nombre "Imagen 1", "Foto 2", etc automáticamente.¿Cómo obtener el nombre interno de la forma en Excel

Este nombre se puede utilizar para obtener una referencia a este objeto de forma en la recolección de formas como Shapes.Item ("Imagen 1"). Si el nombre se cambia en Excel utilizando el cuadro de nombre, hay dos nombres diferentes (o uno de ellos es una clave/título) a través del cual se puede hacer referencia al objeto de forma. Así que si cambio el nombre a "mypic" Puedo utilizar cualquiera de ellos para hacer referencia a una forma en la recolección de Formas:

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

El nombre se puede acceder mediante la propiedad Shape.Name en VBA pero ¿cómo podemos acceder a la otra valor (MyPic) que no parece cambiar internamente?

ACTUALIZADO
Lo que estoy tratando de hacer es vincular una celda a una imagen en Excel. Guardo los datos de la imagen en el comentario de la célula. Estos son los escenarios:

  1. Si me quedo con el nombre de la imagen (nombre externo) y luego copiar y pegar la estructura en la misma hoja de cálculo se duplicará el nombre y la célula se apuntan a la misma estructura.
  2. Si sigo el nombre interno continuación, copiar y pegar a otra hoja de trabajo va a crear un problema como el mismo nombre interno puede existir en alguna otra hoja de cálculo en el mismo libro.
  3. Si tomo ID, no será capaz de obtener la imagen de referencia de ella

por conseguirme el nombre interno es importante. Tengo la referencia de forma, pero no tengo idea de cómo obtener el nombre interno de esta referencia.

Respuesta

7

Inmediatamente después de haber agregado la forma de una hoja de cálculo (oSht) se puede utilizar oSht.Shapes(Osht.Shapes.count) hacer referencia a ella. Por lo tanto, oSht.Shapes(osht.shapes.count).Name le dará su nombre.

Si desea encontrar el índice de una forma en la colección de Shapes y sabe su nombre, debe recorrer el Shapes.Name hasta encontrarlo. Si conoce el índice, puede construir el nombre alternativo "Imagen n" o puede almacenar el nombre alternativo "Imagen n". También puede almacenar la propiedad ID de la forma y luego hacer referencia a la forma recorriendo las colecciones Shapes hasta encontrar Shape.ID

Si el usuario mueve la forma a una hoja diferente y luego la renombra, no hay forma de identificándolo como la forma original, porque el nombre externo, el nombre alternativo, el índice Shapes y el ID serán todos diferentes. Entonces, si esto es un problema en su escenario, debería considerar la copia oculta o la protección de hoja.

+0

1: "Si conoce el Índice de entonces se puede construir el 'Picture n' nombre alternativo" - esto no siempre puede ser cierto ya que si una imagen en el índice 2 se elimina de la colección de formas, podríamos tener "Imagen 3 "en el índice 2. No creo que el nombre interno se cambie para que coincida con el índice. – A9S6

+0

Si agrego una Forma en VBA, el valor de retorno de Shapes.AddPicture (...) me dará la referencia para que no haya necesidad de hacer una Forma (Cuenta) aquí. Además, para un objeto recién creado, tanto el nombre interno como el nombre para mostrar serán los mismos, por lo que shape.Name funcionará en ese momento. El problema es cómo conseguir que el nombre interno utilizando la referencia de la forma en un momento posterior (usuario podría haber cambiado el nombre para mostrar) – A9S6

+0

Si usted tiene una referencia válida para un objeto de forma Shape.name luego le dará su nombre externo. –

Cuestiones relacionadas