Ingresar-Modificar datos de mi macro

Estoy intentando aprender para hacer mis propias macros con excel 2007, pero me encuentro encallado, me explico:

1. Quisiera una macro para ingresar-modificar datos en otra hoja (posiblemente después la mande a otro libro como copia de seguridad).

2. Que no permita ingresar valores iguales a una celda (donde iría la fecha).

3. Que la pudiera modificar y me la anotase en la hoja sin hacerlo directamente.

La tengo iniciada y casi lista pero en los puntos 2 y 3 me encallo y no consigo avanzar, de aquí que recurra a los expertos, cualquier ayuda me seria muy útil, si necesitan el proyecto para echar un vistazo y/o entenderla mejor no tengo inconveniente en enviarlo.

Gracias de antemano y perdonen por las posibles molestias, en espera de respuesta hasta pronto.

1 respuesta

Respuesta
1

Para el punto 2, puedes poner la siguiente macro:

Hola "aprendemos":

No consigo visualizar la rutina, solo veo ( Para el punto 2, puedes poner la siguiente macro:), me la podrías repetir.

No me comentas nada del punto 3 ¿Supongo que sera mas latoso?

No sé por qué no se pegó la macro, necesito un experto para que me diga como usar esto, ja ja, te la mando otra vez:

Para el punto 2, tienes que poner la macro en la hoja en la que estás trabajando, no en un módulo, es decir, ya estando en Visual Basic, del lado izquierdo tienes una carpeta que se llama VBAProject y abajo tus hojas, en la hoja que quieres la macro, le das doble click y te abre un panel del lado derecho, ahí copias la siguiente macro:

***

Private Sub Worksheet_Change(ByVal Target As Range)
'Creada por DAM
If Range("C3").Value = Range("C2").Value Then
Beep
MsgBox ("Fechas iguales")
Beep
Range("C3").Clear
Range("C3").Select
End If
End Sub

***

Para el punto 3, no entendí bien lo que necesitas, me puedes poner un ejemplo de cómo quieres que quede.

Hola "aprendemos":

Punto 2 lo ire probando por ahora no lo consigo, supongo que debo de entenderlo para que salga bien.

Punto 3 Tengo 3 hojas

"Datos" (introducir datos en diferentes celdas).

"Base" (Guardar datos ingresados desde "Datos")

"Modificar" (La intención seria recuperar los datos de la hoja "Base", actúalizar los valores que necesitase y volver a guardar en la "Base")

De todas maneras si quieres el libro para verlo te lo puedo enviar a algún correo, aquí no veo la manera de adjuntarlo.

Muchísimas gracias por la paciencia, supongo que al no explicarme mas claro lo complica todo.

Los puntos 2 y 3 son diferentes, por favor, podrías crear una nueva pregunta para el punto 3.

Para el punto 2, también puedes aplicar una validación de datos, en el menú / Datos / Validación.

Hola "aprendemos":

En cuanto al punto 3, si debo abrir otra pregunta asi lo hago.

Punto 2 sigo sin conseguirlo, tengo la fecha que quisiera que no se repita en la hoja "Datos" en la celda "B6" que la paso con la macro a la hoja "Base" para guardar los datos.

Como me dijiste pruebo con tu macro en la hoja "Base" VBA doble clic y la coloco pero no responde, te dejo la macro para que le eche un vistazo haber si te va mejor que mi mala explicación:

Sub Guardar()
' Guardar Macro
'' Acceso directo: Ctrl+Mayus+G
'Range("H6:H80").Select
Selection.Copy
Sheets("Base").Select
Range("A30").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
Range("A30").Select
Application.CutCopyMode = False
Selection.NumberFormat = "m/d/yyyy"
Range("B30:BW30").Select
Selection.NumberFormat = "General"
Range("A2:BW30").Select
Range("BW30").Activate
ActiveWorkbook.Worksheets("Base").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Base").Sort.SortFields.Add
Key:=Range("A2:A30"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Base").Sort
.SetRange Range("A2:BW30")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("A30").Select
Sheets("DATOS").Select
Range("B7").Select
Selection.ClearContents
Range("B6").Select
ActiveCell.FormulaR1C1 = "=TODAY()"
Range("B7").Select
End Sub

Pero para que funcione en automático tienes que poner :

Private Sub Guardar(ByVal Target As Range)

Intentalo nuevamente y me dices.

Hola "aprendemos":

Lo siento pero estoy fuera de juego, no doy pie con bola, no se como enfocarlo y estoy tan liado que no soy capaz de encontrarme, no se que hacer después de darle tanta vueltas.

Puedes recrear un ejemplo de la información real que tienes en tu hoja y con las columnas reales, para entender dónde quieres la validación de la fecha.

Hola "aprendemos":

A ver si me explico bien:

Hoja "Datos" celda H6 Fecha, H7:H80 anotaciones y las paso a la hoja "Base" a la celda A30 (=H6 fecha) que se ordena de menor a mayor (A2:A29) y copia (en la fila) los datos introducidos en las celdas (H7:H80).

Mi intención seria que comprobase que no se repiten las fechas en las celdas (A2:A29) ya que querría decir que esta anotación ya esta hecha con lo cual se trataría de modificar y no de introducir datos nuevos.

Otra idea que se me ocurre sobre la marcha es que en la hoja "Datos" al poner la fecha comprobase que en la hoja "Base" celdas (A2:A29) no esta repetida, saltase una alarma este valor esta introducido no puedes seguir deberías de modificarlo no crearlo.

Te anexo la macro para validar una fecha que se captura en la hoja datos y la valida contra la hoja base.

Nota: Regresa tu macro Guardar a donde la tenías.

Instrucciones
1. Abre tu hoja de excel
2. Para abrir Vba-macros y poder pegar la macro, Presiona ALt + F11
3. Del lado izquierdo dice: VBAProject, abajo dale doble click a worksheet(datos)
4. Del lado derecho copia la macro

***Macro***

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'Valida fecha en otra hoja
'Por.daM
Application.MoveAfterReturn = False
'Range("H6").Select
Range("H6").NumberFormat = "dd-mm-yy;@"
If Target.Address = "$H$6" Then
    ifecha = Target.Value
    If ifecha <> "" Then
        Application.Goto ActiveWorkbook.Sheets("base").Range("A2:A29")
        Set wfecha = Selection.Find(What:=ifecha, After:=ActiveCell, LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False)
        If Not wfecha Is Nothing Then
            Beep
            MsgBox ("Fechas ya exite en la BASE, capture una fecha diferente")
            Beep
            Worksheets("datos").Select
            Range("H6").Clear
            Range("H6").Select
        End If
    End If
Worksheets("datos").Select
End If
End Sub

Esta macro lo único que va a realizar, es validar que la fecha que capturas en la hoja datos en la celda H6, no se encuentre en la hoja base rango A2:A29.

Saludos. DaM

No olvides cerrar la pregunta

Muchísimas gracias al final he conseguido entenderlo, ya se sabe cuando algo es nuevo siempre cuesta algo mas, santa paciencia la del experto pero ayudáis mucho, hasta siempre.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas