Jump to content

Como pausar una macro para que el usuario interactue y reanudarla


Recommended Posts

Buenos Días compañeros,

Soy nuevo en programación en VBA y estoy un poco perdido, agradeceria que me ayudarais en este tema.

Estoy creando una macro donde necesito que el usuario interactue. Es decir la macro empieza, y con un msgbox le pide al usuario que introduzca unos valores a partir de la celda C7. El usuario tiene que copiar una información que tendrá guardada donde el quiera, a partir de esta celda C7 y cuando lo del al boton acceptar del msgbox me gustaria que la macro se reanudará en el puesto donde se paro.

esto es possible?

Link to comment
Share on other sites

buenas antonio,

La macro realiza un resumen de unos documentos que tengo dentro de una carpeta, va abriendo cada uno de los archivos y copia siempre los mismos valores de cada archivo en una hoja nueva, pero hay alguno de estos archivos que corresponden a mas de un modulo, por eso tengo una macro que me busca las referencias y me pone X en las que afectan acada archivo abierto. Así obtengo un resumen de los valores utiles para mi.

El problema es que el usuario tiene que introducir estos modulos, y los debe copiar a partir de la C7:Cxxx, lo que quiero hacer es mandar un mensaje al usuario en el que le pido:

Msgvalue = MsgBox("Copie las referencia del modelo de calculo empezando en la celda C7 y acontinuación pulse OK", 0, "Información para el sistema")

entonces que el usuario pueda copiar o escribir los modulos y al apretar ok, la macro continue por donde estaba.

te el inicio del codigo copiado aqui, espero que pueda ayudarte:

Sub resumen_valoraciones()

Dim limpiar As String

limpiar = MsgBox("Desea limpiar el resumen de valoraciones obtenido?", vbOKCancel, "Información del sistema")

If limpiar = 1 Then

'Limpiamos la hoja "listado"

Windows("macro_resume_1").Activate

Sheets("Listado").Select

Cells.ClearContents

'Limpiamos la hoja "Resumen valoraciones"

Windows("macro_resume_1").Activate

Sheets("Resumen valoraciones").Select

Cells.ClearContents

Cells.Select

Selection.Borders(xlDiagonalDown).LineStyle = xlNone

Selection.Borders(xlDiagonalUp).LineStyle = xlNone

Selection.Borders(xlEdgeLeft).LineStyle = xlNone

Selection.Borders(xlEdgeTop).LineStyle = xlNone

Selection.Borders(xlEdgeBottom).LineStyle = xlNone

Selection.Borders(xlEdgeRight).LineStyle = xlNone

Selection.Borders(xlInsideVertical).LineStyle = xlNone

Selection.Borders(xlInsideHorizontal).LineStyle = xlNone

ElseIf limpiar = 0 Then

End If

'Listado de Ficheros de la Carpeta, para comprobar las que tenemos que calcular y las que no

Windows("macro_resume_1").Activate

Sheets("Listado").Select

LISTA = MsgBox("Listando las valoraciones encontradas", vbOKOnly, "Información del sistema")

Dim Ruta As String

'Creamos el objeto FileSystemObject que proporciona acceso al sistema de archivos de un equipo

Set fso = CreateObject("Scripting.FileSystemObject")

'Indicamos la ruta de donde vamos a obtener los ficheros, en este la misma donde se encuentre el archivo

Ruta = ThisWorkbook.Path

'definimos dos variables que necesitaremos,para recuperar el nombre de la carpeta, y los ficheros que haya dentro

Set Carpeta = fso.GetFolder(Ruta)

Set ficheros = Carpeta.Files

'damos un título en negrita para la celda A1

With Range("A1")

.Value = "Ficheros de la carpeta"

.Font.Bold = True

End With

'escribimos los ficheros, a partir de A2

Range("A2").Select

For Each Archivo In ficheros

'escribimos el nombre del fichero

ActiveCell = Archivo.Name

'bajamos una fila

ActiveCell.Offset(1, 0).Select

Next Archivo

ActiveCell.EntireColumn.AutoFit

'Limpiamos los objetos y variables definidas

Set fso = Nothing

Set Carpeta = Nothing

Set ficheros = Nothing

Application.ScreenUpdating = True

'Definimos una pagina por introducir datos utiles para el resumen

Windows("macro_resume_1").Activate

Sheets("Datos").Select

'Dim Message As Integer

' preguntamos por el nombre generico de las modificaciones

Msgvalue = MsgBox("Copie las referencia del modelo de calculo empezando en la celda C7", 0, "Información para el sistema")

-----------------permitir que el usuario escriba!--------------------------------------------------------------------------

----------------Al pulsar ok, que siga con la macro!!!---------------------------------------------------------------------

v0 = InputBox("Introduzca el nombre de la modificación sin los ulimos dos digitos. Ej: BX_XXX_XXX_X_X", "Info para definir los Libros a abrir")

Cells(1, 1).Value = v0

' preguntamos por el rango de las modificaciones (por si llegan a 50, no calcular hasta 100)

V1 = InputBox("Introduzca el primer numero del rango de valores posible para las modificaciones ", "Info para definir los Libros a abrir")

V2 = InputBox("Introduzca el ultimo numero del rango de valores posible para las modificaciones", "Info para definir los Libros a abrir")

'v3 = InputBox("Introduzca el primer valor posible del penultimo digito del nombre de la modificación", "Info para definir los Libros a abrir")

'v4 = InputBox("Introduzca el ultimo valor posible del penultimo digito del nombre de la modificación", "Info para definir los Libros a abrir")

'For A = v3 To v4

Dim A As Long

A = V1

Dim x As Long

x = 8

Do Until A = V2

Sheets("Datos").Select

ActiveWorkbook.Sheets("DATOS").Cells(1, 2).Value = A

Link to comment
Share on other sites

.

Te paso la solución a tu problema, se trata de un formulario que se comporta como un MSGBOX y que admite código antes de mostrar el mensaje y después de mostrar el mensaje, además se puede modificar la hoja mientras el mensaje está mostrado.

.

Revisa las indicaciones que he puesto en el código del formulario.

Sucedáneo de MSGBOX.xls

Link to comment
Share on other sites

Muchas gracias antonio, ya esta resuelto. Me has sido de gran ayuda!!! Hasta la proxima!!

- - - - - Mensaje combinado - - - - -

Buenas de nuevo antonio,

tengo un problemilla, la macro que he creado y en la que he implementado el userform que has creado, lista los documentos de la carpeta donde se encuentra, ahora me lista solo:

[TABLE=width: 174]

[TR]

[TD]desktop.ini

[/TD]

[/TR]

[TR]

[TD]Sucedáneo deMSGBOX.xls

[/TD]

[/TR]

[/TABLE]

entiendo que es debido a que el userform se encuentra ubicado en esta ruta. he guardado el documento en la carpeta de donde tira el listado, pero tmpoco nada. Que puedo hacer?

[TABLE=width: 174]

[TR]

[/TR]

[TR]

[TD][/TD]

[/TR]

[/TABLE]

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

  • Crear macros Excel

  • Posts

    • Y por ultimo, solo me queda esto para acabar lo que necesito. Sucede que a veces un empleado no usa la tarjeta de combustible asociada a su matricula y usan una llamada Comodin1 o Comodin2.., sin embargo tengo una hoja Excel donde tengo la tarjeta Comodín que le hemos entregado y a que matrícula habría que asocial el gasto. En la hoja Comodín aparece los movimientos de la tarjeta y en la de Consumos necesito averiguar a que conductor corresponde para así hacer el desglose de la misma. Ni se como hacerlo ni en que hoja se puede hacer la consulta, si añadir otra columna en la de Consumos...., no se como hacerlo. Adjunto el archivo y agradezco esta ultima ayuda para este asunto.   Gracias de antemano.   Ejemplo consumos combustible sq.xlsx
    • Pues tienes toda la razón.  Mucho más simplificado. ¡GRACIAS!
    • Que tal, verificando la consulta no veo necesidad de duplicar la Tabla de Reparto, dado que se puede simplemente agregar una columna (Importe total) con la siguiente fórmulación: =SUMAR.SI(Consumos!AR$2:AR$8;[@[Nombre completo]];Consumos!AK$2:AK$8)*[@[%]] Espero les sea útil.
    • Hola de nuevo por aquí. Sigo con el fichero de consumos y con problemas. Ayer me ayudasteis y mucho a determinar los conductores y sus consumos. Ahora lo que necesito es lo siguiente. Tengo una tabla donde los empleados imputan de manera porcentual a distintas ordenes de trabajo. Está en la hoja Reparto. Veréis que por ejemplo el primer empleado reparte un 50 a una OT y otro 50 a otra. El segundo empleado imputa un 40 a una OT y otro 60 a otra y el tercero imputa un 25 a una OT, un 65 a otra y un 10 a otra. Esto desglosarlo es un autentico lío, y cada mes me emplea muchísimo tiempo . Lo que quisiera es que en la hoja que le he llamado desglose me creara una tabla o en la que he hecho y me calculara el consumo de combustible de cada empleado teniendo en cuenta la OT y su porcentaje. He creado la tabla y he puesto los importes que deberían salir. Los importes de cada consumo están en la hoja Consumos en la columna AK (IMP_TOTAL). Por ejemplo en la hoja Desglose el primer empleado sería GARCIA FERNANDEZ, VICENTE y a la OT 11000001 tendría un importe de 28,70 euros ya que en la hoja Reparto decimos que imputa un 50 a esa OT y el consumo total de ese empleado de la hoja Consumo es de 57,40 euros. Y así con el resto. He puesto una tabla para que sea dinámico y si hay más consumos o empleados se vaya actualizando dinámicamente, o eso creo. Lo que no veo claro es que busque y autorrellene con formulas la tabla sin hacerlo con macros. Al menos para mi se me hace muy difícil ver la posibilidad. No tengo claro si he conseguido explicarme, cualquier duda os respondo. Y como siempre muy agradecido por vuestro tiempo y compartir tan hábiles conocimientos, y además de manera desinteresada y amable. Gracias.   Ejemplo consumos combustible sq.xlsx
    • Hola, yo también tengo el mismo problema, ¿podrías decir cómo lo solucionaste, por favor? :c
  • Recently Browsing

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

Privacy Policy