Variación de Fórmula en Excel, según hoja de datos

Hola jcgonzalez31. Espero poder expresar bien lo que necesito. A ver ...
Tengo en un libro, llamado Ventas2009, con una primer hoja llamada DataBase, y el resto de las hojas, con el nombre de cada mes
Cada hoja de cada mes, es copia fiel de la primera (Enero), en su formato, y vacía de datos, las cuales se van llenando con una serie de ventas.
La primer hoja (DataBase), tiene un botón con una macro asignada a copiar un rango de datos, de una sola columna, de una hoja siguiente (supongamos, la llamada Marzo)
Yo ya hice que cada vez que ejecuto la macro, copia todo ese rango, siempre lo pegue en el mismo lugar, y si llega a haber una modificación, me aparece en el nuevo rango Pegado. ¿Bien?
Ahora, mi consulta es:
Quisiera generarle a esta primera hoja, la que tiene la macro, un listado de todos los nombres de cada una de las hojas con cada mes (una simple Validación de Datos), pero que lo que realmente haga es que, al ejecutar la macro, esta vaya al rango de la hoja que me especifica esa celda.
O sea, si en esa celda selecciono Mayo, al ejecutar la macro, esta copie el rango especificado, pero de la hoja Mayo, y la pegue en esa primera hoja, donde está la macro, y ya que estamos abusando de tu confianza, si puede hacerlo justo en la primera celda en blanco, después de las pegadas, anteriormente. Esto iría generando una columna con una serie de datos, por ejemplo Nombre de Cliente, pero de todas las hojas del Libro, con nombre de meses. Luego, con un PegarV le termino de hacer lo que necesito.
¿Hay posibilidad de hacer eso? De modificar un valor de una macro, ¿desde la misma hoja donde está?
Desde yá, muchas gracias por leer mi inquietud
Saludos
Hernán

1 Respuesta

Respuesta
1
Bueno para ir a la siguiente fila vacía se puede utilizar:
Range("A65500").Select
ActiveCell.End(xlUp).Select
ActiveCell.Offset(1, 0).Select
Para seleccionar la hoja se podrían meter en un ListBox y tomando en cuenta si la hoja está oculta o tiene un gráfico se puede poner en el evento Initialize del UserForm:
Private Sub UserForm_Initialize()
Dim SheetData() As String
Dim ShtCnt As Integer
Dim ShtNum As Integer
Dim Sht As Object
Dim ListPos As Integer
Set OriginalSheet = ActiveSheet
ShtCnt = ActiveWorkbook.Sheets.Count
ReDim SheetData(1 To ShtCnt, 1 To 4)
ShtNum = 1
For Each Sht In ActiveWorkbook.Sheets
If Sht.Name = ActiveSheet.Name Then _
ListPos = ShtNum - 1
SheetData(ShtNum, 1) = Sht.Name
Select Case TypeName(Sht)
Case "Hoja de trabajo"
SheetData(ShtNum, 2) = "Hoja"
SheetData(ShtNum, 3) = _
Application.CountA(Sht.Cells)
Case "Chart"
SheetData(ShtNum, 2) = "Gráfico"
SheetData(ShtNum, 3) = "N/A"
Case "DialogSheet"
SheetData(ShtNum, 2) = "Diálogo"
SheetData(ShtNum, 3) = "N/A"
End Select
If Sht.Visible Then
SheetData(ShtNum, 4) = "Verdadero"
Else
SheetData(ShtNum, 4) = "Falso"
End If
ShtNum = ShtNum + 1
Next Sht
With ListBox1
.ColumnWidths = "100 pt;30 pt;40 pt;50 pt"
.List = SheetData
.ListIndex = ListPos
End With
End Sub
Para ir a la hoja por medio de un botón se puede poner:
Private Sub OKButton_Click()
Dim UserSheet As Object
Set UserSheet = Sheets(ListBox1.Value)
If UserSheet.Visible Then
UserSheet.Activate
Else
If MsgBox("¿Hoja oculta?", _
vbQuestion + vbYesNoCancel) = vbYes Then
UserSheet.Visible = True
UserSheet.Activate
Else
OriginalSheet.Activate
End If
End If
Unload Me
End Sub
[email protected]

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas