Necesito información sobre la utilización de formularios y macros con Microsoft Excel

Fejoal, que bueno que este por aquí de nuevo, mi pregunta es la siguiente:
Tengo un formulario que pide dos valores: Una fecha y un Valor, necesito ejecutar una macro que busque en una hoja que tiene dos columnas, Columna A=fechas Ordenadas y Columna B valores, si la fecha ingresada no existe que inserte una fila en el lugar que le corresponde y ponga el valor ingresado al frente, si ya existe, que muestre en otro formulario el valor existente y pregunte si lo desea cambiar, si se oprime que si, que ponga el nuevo valor, si no, que deje el que estaba.
Otra pregunta, es que necesito una Macro que estando parado en una hoja especifica, la guarde como solo valores, conservando el formato en un libro nuevo y que dicho libro se llame como el nombre de una fecha que existe en una casilla. Seria muy bueno que le preguntara al usuario en que ubicación del disco lo quiere guardar.
Muchas gracias como siempre.
IVAN

1 Respuesta

Respuesta
1
Acabo de llegar de mis vacaciones anuales y vi que, extrañamente, he sido habilitado por alguien para recibir más preguntas.
Lo cierto es que estuve sumamente atareado y no me era posible contestar preguntas en este sitio, del modo que me gusta hacerlo.
Este año parece que no será distinto en ese sentido, así que en la medida que el trabajo lo permita, estaré por aquí para ayudar.
Respecto a tu pregunta, tal vez ya la hays resuelto, pero no quise dejarla pendiente así que aquí sigue la solución que le dí:
Primero asumí un único formulario con los siguientes controles:
- Una etiqueta (label1) con el texto "fecha"
- Una etiqueta (label2) con el texto "valor"
- Una etiqueta (label3) sin texto (la macro colocará allí el valor encontrado, si lo hubiere)
- Una etiqueta (label4) con el texto "valor actual"
- Un botón de comando (CommandButton1) con el texto:
"Reemplaza valor
Actual con el
Nuevo informado"
- Un botón de comando (CommandButton2) con el texto:
"Continuar"
- Un botón de comando (CommandButton3) con el texto:
"Terminar"
En el panel de macros del formulario, pega estos procedimientos para operar cada control en el formulario:
Private Sub UserForm_Initialize()
Label4.Visible = False
Label3.Visible = False
CommandButton1.Enabled = False
End Sub
Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
V_fecha = CLng(CDate(TextBox1.Value))
Range("B_Fechas").Cells(1, 1).Select
Do While ActiveCell.Value < V_fecha
If IsEmpty(ActiveCell) Then
Exit Do
Else
ActiveCell.Offset(1).Select
End If
Loop
On Error Resume Next
V_valor = Application.WorksheetFunction.VLookup(V_fecha, Sheets("Hoja1").Range("B_Fechas"), 2, 0)
If Err.Number = 1004 Then
ActiveCell.EntireRow.Insert
With ActiveCell
.Value = V_fecha
.Offset(0, 1).Value = CLng(TextBox2.Value)
End With
Else
Label4.Visible = True
Label3.Visible = True
Label3.Caption = V_valor
CommandButton1.Enabled = True
CommandButton2.Enabled = True
End If
End Sub
Private Sub CommandButton1_Click()
ActiveCell.Offset(0, 1).Value = CLng(TextBox2.Value)
End Sub
Private Sub CommandButton2_Click()
TextBox2.Value = ""
TextBox1.Value = ""
TextBox1.SetFocus
Label4.Visible = False
Label3.Visible = False
CommandButton1.Enabled = False
End Sub
Private Sub CommandButton3_Click()
Unload Me
End Sub
---
Y en un módulo aparte, la siguiente macro para activar el formulario de carga:
Sub FORMFECHA()
UserForm1.Show
End Sub
Una cosa más:
Crea un rango (desde los títulos de columna inclsive)que comprenda fechas y valores en tu hoja, con el nombre: B_Fechas
Activando la macro FORMFECHA tendrás un formulario donde caras la feca y el valor.
Si estuviera, el valor aparecerá en uno de las etiquetsa que colocaste en el formulario (label3) y el botón para reemplazar el valor se habilitará. Si no lo deseas cambiar presiona "Continuar" para ingresar otra fecha y valor.
Si no estuviera, la macro insertará la línea faltante donde corresponda y colocara la fecha y valor indicados.
El botón continuar deja en blanco ambos campos para continuar con la carga.
---
Respecto a la segunda cuestión (generar un nuevo archivo con valores), puedes colocar el siguiente macro a continuación de la que activa el userform, en el mismo módulo:
Sub GUARDAENT()
NameDate = "dia" & CStr(Range("C2").Value)
NameDate = Application.WorksheetFunction.Substitute(NameDate, "/", "-")
fileSaveName = Application.GetSaveAsFilename(InitialFilename:=NameDate, fILEfILTER:="Libro de Microsoft Excel (*.xls), *.xls", Title:=">>>>>>> Indique donde guardará el archivo de valores <<<<<<<")
If fileSaveName <> False Then
Application.ScreenUpdating = True
ActiveSheet.Copy
Cells.Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Range("A1").Select
Application.CutCopyMode = False
ActiveWorkbook.SaveAs FileName:=fileSaveName
MsgBox "GUARDADO como " & fileSaveName
Else
MsgBox "Este archivo NO fue guardado"
End If
End Sub
Según la fecha en la celda indicada grabara el nombre del archivo en el directorio que se le seleccione.
Espero que esto te sea útil, a pesar de la demora.
Un abrazo!
Fernando
La presente respuesta ha demandado un tiempo de lectura, análisis, elaboración y redacción.
A cambio, simplemente, pretendo que te tomes un minuto para FINALIZARLA, si
hubiera satisfecho -en alguna medida- tu requerimiento.
(Considera que la valoración que figura predeterminada
es 3/5. Tal vez quieras cambiarla...)
Por una limitación del sitio, el hecho de que no la hayas cerrado, impide que otros usuarios puedan efectuarme consultas.
Te agraceré que te tomes un minuto para finalizarla, ¿si?

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas