¿Cómo puedo automatizar la creación de referencias con nombre en Excel? Quiero que el primer campo de cada fila sea mi referencia

StackOverflow https://stackoverflow.com/questions/627377

  •  06-07-2019
  •  | 
  •  

Pregunta

La primera columna de mi hoja de cálculo es una clave única (en cuanto a datos, nada que ver con Excel). Otra de mis columnas contiene enlaces a otras filas (a la clave única de esa fila). Cuando inserto estos hipervínculos, necesito señalar '' nombres definidos '' ya que el orden de las filas cambiará con el tiempo.

No quiero tener que crear el nombre definido cada vez que inserto una nueva fila. ¿Hay alguna manera de definir automáticamente el texto de una columna como el " nombre definido " ;?

Espero que esto esté claro.

Muchas gracias.

¿Fue útil?

Solución 2

Lo tengo. Mike R. me puso en el camino correcto. Gracias.

Tenga en cuenta la necesidad de eliminar caracteres no alfanuméricos para los nombres. Además, duplicar un nombre solo sobrescribe la referencia anterior.

Private Sub Worksheet_Change(ByVal Target As Range)
    If (Target.Column = 1 And Target.Text <> "" And Target.Cells.Count = 1) Then
        ThisWorkbook.Names.Add _
            Name:=StripChar(Target.Text), _
            RefersTo:=Target, _
            Visible:=True
    End If
End Sub

Function StripChar(s As String) As String
    With CreateObject("vbscript.regexp")
        .Global = True
        .ignorecase = True
        .Pattern = "[^\dA-Z]"
        StripChar = .Replace(s, "")
    End With
End Function

Otros consejos

Debe buscar en Workbook.Names o Worksheet.Names (si desea restringir el nombre definido a la hoja de trabajo).

Los ejemplos que se muestran en los enlaces anteriores son bastante buenos. En su caso, desearía usar Range.Value o Range.Text que se encuentra en la celda para usar como la cadena que se pasa como argumento 'Nombre' para el método Names.Add ().

Usando VBA podría verse más o menos así:

ThisWorkbook.Names.Add _
    Name:=Sheet1.Range("A1").Text, _
    RefersTo:=Sheet1.Range("A:A"), _
    Visible:=True 

Lo anterior establece el nombre definido para la columna A como el valor (texto) encontrado en la celda del encabezado A1.

Espero que esto ayude!

Mike

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top