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 de fejoal
1
1
fejoal, Por falta de tiempo para responder como me gusta hacerlo suspendo...
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?