La guía paso a paso o código que hallarás en este post es la resolución más fácil y válida que encontramos a esta duda o problema.
Solución:
Hacer referencia a una hoja por su nombre en clave siempre implica la hoja en ThisWorkbook
es decir, el libro de trabajo que contiene el código que está ejecutando.
Parece que no hay una forma sencilla de calificar completamente una hoja en un libro de trabajo diferente usando su nombre en clave.
Esta función te ayudará a hacer esto:
Function GetSheetWithCodename(ByVal worksheetCodename As String, Optional wb As Workbook) As Worksheet
Dim iSheet As Long
If wb Is Nothing Then Set wb = ThisWorkbook ' mimics the default behaviour
For iSheet = 1 To wb.Worksheets.Count
If wb.Worksheets(iSheet).CodeName = worksheetCodename Then
Set GetSheetWithCodename = wb.Worksheets(iSheet)
Exit Function
End If
Next iSheet
End Function
Ejemplo de uso:
GetSheetWithCodename("Sheet1", Workbooks("Book2")).Cells(1, 1) = "Sheet1 in Book2"
GetSheetWithCodename("Sheet1", ActiveWorkbook).Cells(1, 1) = "Sheet1 in ActiveWorkbook"
GetSheetWithCodename("Sheet1").Cells(1, 1) = "Sheet1 in ThisWorkbook"
Tenga en cuenta que la última línea es equivalente a simplemente decir:
Sheet1.Cells(1, 1) = "Sheet1 in ThisWorkbook"
porque, como se mencionó anteriormente, referirse a una hoja por su nombre en clave siempre implica la hoja en ThisWorkbook
.
Puede hacer esto agregando el segundo Libro de trabajo como referencia y llamando al libro de trabajo por el nombre del Proyecto VBA.
Obviamente, es una buena idea cambio ¡el nombre del proyecto VBA del predeterminado ‘VBAProject’!
Probé esto creando dos nuevos libros de trabajo, cada uno con una hoja, con un valor de 1 o 2 en la celda A1. Los proyectos de VBA se denominaron ‘Proj1’ y ‘Proj2’, y los CodeNames de las hojas de trabajo se dejaron como ‘Sheet1’.
Este es el código que usé:
Sub test()
Debug.Print Proj1.Sheet1.Cells(1, 1)
Debug.Print Proj2.Sheet1.Cells(1, 1)
End Sub
Dando una salida de:
1
2
Se puede hacer referencia a las hojas de trabajo por su nombre en clave cuando el código está en el mismo libro de trabajo, por lo que no es necesario calificar por completo. No puede hacer referencia a otra hoja de libros de trabajo por nombre en clave directamente a menos que recorra cada hoja y verifique el nombre en clave
así que esto es suficiente sin necesidad de crear una variable
with WsSummary
.Cells(1,1).Value = "Test"
end with
Si conservas alguna desconfianza o capacidad de arreglar nuestro artículo te sugerimos dejar un paráfrasis y con deseo lo leeremos.