Saltar al contenido

Hacer que formulario me ingrese datos según la hoja seleccionada


JoaoM

Recommended Posts

Tengo un formulario para ingreso de datos.
Los datos son variados, por eso tengo varias hojas, Ej. "Productos", "Silverado", "CAT", "JD" ect

¿Cómo estoy haciendo?. Cuando necesito insertar en la hoja Productos voy a la macro de todo formulario y lo que menciona la hoja "Silverado", cambio por "Productos". Si menciona Productos y quiero insertar en la hoja "CAT", cambio "Productos" por "CAT"
Este modo es fastidioso y no es lo correcto pero no se hacerlo de otra forma.
Un ejemplo de lo que menciono es esto; en una de las macros tengo
Sheets("Silverado") y en otras también Sheets("Silverado").Range( y quiero Sheets("CAT") cambio Silverado por CAT en todas las macros que tenga que hacerlo.

Cual la forma de no tener que estar haciendo este cambio a cada momento, porque no es una ves al día, son 5 ,10 o mas aun. En ese tipo de línea, que tendría que poner para que me inserte en la hoja Activa o Seleccionada?

Enlace a comentario
Compartir con otras webs

No me ha dado mucho tiempo a trastear con el código @JoaoM, pero ¿por que no pones un textbox en el formulario que corresponda, para introducir el nombre de la hoja que necesites?

El valor de ese textbox se lo asignas en el código al nombre de la hoja que necesites. Por ejemplo, en esta parte del código, que creo que es donde tienes problemas:

Dim U As Double, i As Double
Dim h1 As Object, h2 As Object
Dim Hoja as String
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
  
Hoja=TextBox.Value  'el textbox que corresponda TextBox2 por ejemplo'
Set h1 = Sheets("Productos") '-->lo cambias por Set h1 = Sheets(Hoja)'
Set h2 = Sheets("Filtro")

 

Enlace a comentario
Compartir con otras webs

Hola Aplox, gracias por tu tiempo y dedicacion a mi solicitud

Pues te dire que dentro de ese libro, en el form frmFechas, en el evento Private Sub cmbBusque_Click() quiero meterle un Combo para que pueda selecionar la hoja DONDE buscar entre fechas, hacer busqueda en la hoja seleccionada en el combo

Lo mismo en el evento Private Sub cbtNueClien_Click() del form frmProd quiero hacer lo mismo, meterle un combo para poder seleccionar la hoja donde quiero insertar los datos, hacer busqueda y a la vez cuando necesito editar algun dato, (producto)

La carga del Combo ya la hace desde evento initialize, algunas hojas faltan aun pero eso yo las agregaré.

Lamento mi ayuda ser tan escaza (casi nula) pero dicen que burro viejo no aprende camino y yo soy uno de esos viejos

Te dejo nuevo libro porque este tiene algunas diferencias cuanto al  1ª que subi

Insventario y Edición Producto AyudaExcel.part2.rar

Insventario y Edición Producto AyudaExcel.part1.rar

Enlace a comentario
Compartir con otras webs

Saludos a ambos!

Sin ver tu archivo... puedes crear un listado de las hojas dentro de un combobox (por ejemplo)

Luego al seleccionar la hoja en el combo, Sheets(combobox).activate y listo; es mas no es necesario seleccionar la hoja para trabajar sobre ella

Enlace a comentario
Compartir con otras webs

Hola gerson, mis mas cordiales saludos y gracias por darme tu tiempo

Pues es eso mismo

Mi interrogante (para mi escaso conocimiento), es en que parte integrar esa linea para que todo funcione desde la hoja INICIO porque coloque la linea al inicio de la macro y me inserto en hoja Inicio y habia seleccionado otra que no era esa, ademas de eso quisiera que al seleccionar la hoja en el Combo, me llenara el listbox con su contenido.

La imagen del formulario. te das cuenta que el Combo ya tien las hojas abajo mencionadas. reitero que quiero trabajar con el form desde la hoja Inicio sin salirme y sobre la hoja que seleccione en el combo.

Del combo tengo

Private Sub cboHojas_Change()
    Label24.Caption = cboHojas.Value
End Sub
y para el combo

Private Sub UserForm_Initialize()
'Label24.Caption = ActiveSheet.Name
    cboHojas.List = Array("PRODUCTOS", "JOHN DEERE", "CAT", "SILVERADO", "INTERNACIONAL")
    cboHojas.Value = "SELECCIONE HOJA"
'codigo
'codigo
'etc.
End Sub
y la macro para insertar nuevo esta
'Inserta y luego ordena alfabeticamente de B hasta G tomando columna B
Sub ingresar_datos(fila As Integer, Optional OrdenarPor As String = "B") 'Ordena por la columna B
    Set ws = ActiveSheet
    With ws
        .Cells(fila, 1) = txtCod
        .Cells(fila, 2) = txtProd
        .Cells(fila, 3) = txtProve
        .Cells(fila, 4) = txtFactu
        .Cells(fila, 5) = Format(DTPicker1, "mm/dd/yyyy") 'DTPicker1 en ves de txtFFact
'        .Cells(fila, 5) = NumberFormat = "dd/mm/yyyy" 'dar formato a la celda
        .Cells(fila, 6) = CDbl(txtUbic.Value)
        .Cells(fila, 7) = txtObser
        .Range("A2:G" & fila).Sort key1:=.Range(OrdenarPor & fila) 'Ordena por la columna B
    End With
'Limpiar controles
    Dim tbx As Control
    For Each tbx In Me.Controls
        If TypeName(tbx) = "TextBox" Then tbx = ""
    Next tbx
    
'carga ListBox
    Call BuscaCambio
    Call actualizar_lista
    
    txtCod.SetFocus
End Sub

Si necesitas las de los Call

No se si hace falta pero esta es la directa del buton que inserta donde estan los Call

Private Sub cbtNueClien_Click()
Entrada_Salida = Clear
    On Error Resume Next
    Dim fila As Integer
    Set ws = cboHojas.Value 'ActiveSheet
    If cboHojas.Value = "SELECCIONE HOJA" Then
    MsgBox "NO HA SELECCIONADO HOJA"
    Exit Sub
    Else
    'Sheets(cboHojas).Activate
'Viene de la Function valida(wtext As MSForms.Control, num). Obliga insertar minimo 12 caracteres

    If MINCaracter(txtCod, "Cod/Producto", 10) = False Then Exit Sub ''AQUI 10 DIGITOS MINIMO
    'If MINCaracter(txtFFact, "Fecha Factura", 10) = False Then Exit Sub 'AQUI 10 DIGITOS MINIMO
'xxxxxxxxxxxx
'Evita nombre repetido, busca si ya existe en data
Set busco = ws.Range("B:B").Find(txtProd.Text, LookIn:=xlValues, lookat:=xlWhole)
If Not busco Is Nothing Then    'significa que lo encontró
    MsgBox ("Este nombre ya está registrado. Verifica ...."), vbInformation, "Existe"
    'sale sin guardar
    Exit Sub
End If
'xxxxxxxxx
'Inserta datos de nuevo cliente
    With ws
       fila = .Range("A2:A50000").Find(txtCod, lookat:=xlWhole).Row
       If Err.Number = 91 Then
          fila = .Range("b" & .Rows.Count).End(xlUp)(2).Row
          Call ingresar_datos(fila)
          Exit Sub
       End If
       Call ingresar_datos(fila)
    End With
    End If
End Sub

Captura.JPG

Formulario frmProd_Insventario y Edición Productos.part1.rar

Formulario frmProd_Insventario y Edición Productos.part2.rar

Enlace a comentario
Compartir con otras webs

Set ws = ActiveSheet
    With ws

Porque usas estas líneas, si claro esta, que todo lo vas a guardar en la hoja activa, donde estas usando el combo ahí?

Después de escoger la hoja del combo, solo debes hacer lo que te indique antes

With Sheets(cboHojas)

.... Tus codigos .....


End With

Después tienes que ir modificando todo el proyecto, para guardar tus datos a la hoja seleccionada 

Repito no he visto tus archivos, además estos temas, ya deben ser de tu conocimiento, después de tanto tiempo por los foros para llevar a cabo tus proyectos

 

Saludos

Enlace a comentario
Compartir con otras webs

Claro que con eso es que he llevado mi libro, teniendo butones 1 en cada hoja. Lo que pretendia es abrir el form solamente en hoja Inicio y luego seleccionar en TextBox "Seleccionar hoja" y segun la hoja seleccionada en el textbox, es que iba a insertar, buscar para editar.

Ya vere como llegarle.

Gracias gerson

Enlace a comentario
Compartir con otras webs

Hace 59 minutos , JoaoM dijo:

luego seleccionar en TextBox "Seleccionar hoja" y segun la hoja seleccionada en el textbox, es que iba a insertar, buscar para editar.

No es adecuado usar Textbox para cargar el nombre de las hojas, usa un COMBOBOX

 

Saludos 

Enlace a comentario
Compartir con otras webs

@JoaoM , a ver si me voy enterando y te paso el código:

1º) Si lo que quieres es que al elegir la hoja en el combo te ejecute alguna macro:
 

Private Sub cboHojas_Change()

Call "nombre de la macro que desees ejecutar"

End Sub

2º) Ya en la macro que desees ejecutar
 

Private Sub "nombre de la macro que desees ejecutar"()

Dim hoja as String
Dim hojaTrabajo as WorkSheet

hoja=cboHojas.Value

Set hojaTrabajo=WorkSheets(hoja)

hojaTrabajo.Activate

.....

No sé si van por ahí los tiros :huh:

Enlace a comentario
Compartir con otras webs

Hola Haplox, gracias por responder

Si, asi es, que al seleccionar una hoja en el combo, cargue el list y pueda insertar en esa hoja (trabajar)

Tambien editar si hay la necesidad. Ya para editar algun producto, despues que tenga la hoja cargada o seleccionada la linea en el List, esa linea se carga en las cajas y edito luego piso el buton para validar la edicion

Enlace a comentario
Compartir con otras webs

O sea que no... que no he acertado :wacko:

A ver ahora... @JoaoM  :(
 

Private Sub cboHojas_Change()
Dim hoja As String
Dim hojaTrabajo As Worksheet
Dim hojaRow As Range

hoja = cboHojas.Text

Set hojaTrabajo = Worksheets(hoja)
hojaTrabajo.Activate

UF = Range("A2:A" & Rows.Count).End(xlDown).Row
UC = Cells(1, Columns.Count).End(xlToLeft).Column
Set hojaRow = Range(Cells(2, 1), Cells(UF, UC))

lista.RowSource = ""
lista.RowSource = hojaRow.Address
End Sub

Para que esto funcione, no debes poner nada en esta línea:

Private Sub UserForm_Initialize()
Label24.Caption = ActiveSheet.Name
    cboHojas.List = Array("PRODUCTOS", "JOHN DEERE", "CAT", "SILVERADO", "INTERNACIONAL")
    cboHojas.Value = "SELECCIONE HOJA"  '<--- Elimina la línea o coméntala'
    DTPicker1 = (Date)
    FiltrarPor.List = Array("COD PRODUCTO", "NOMBRE PRODUCTO", "UBICACION")

    Call BuscaCambio
End Sub

Si no lo haces, siempre se dispara el evento "cboHojas_Change" al pasar de vacío a ese valor

Enlace a comentario
Compartir con otras webs

Haplox, buenos dias.

Copie y pegue tal cual me dejas el codigo, en el evento Private Sub cboHojas_Change() no existia aun, Solo para darte conocimiento.

Al proceder a ejecutar el formulario desde la hoja Inicio que solo sirve para pantalla de inicio donde abarca todos los butones.

me manda esto. voy a ver que es error 9 por la WEB y si puedo, devido a mi incompetencia en estos vientos.

Se te agradece imensamente el tiempo que estas usando en mis cosas Tengo Office 2016

TodoExcel.JPG

TodoExcel2.JPG

Enlace a comentario
Compartir con otras webs

Olvida lo anterior mientras tanto porque me fuy, comi y regrese y ejecute el form y funciono, las hojas estaban todas ¿que habria pasado? no lo se.

Lo que si noto es que activa la hoja seleccionada y quisiera que TODO funcionara desde la hoja Inicio, es decir; que el form no se muviera a la hoja seleccionada, se mantuviera en la hoja Inicio

Enlace a comentario
Compartir con otras webs

Hace 24 minutos , JoaoM dijo:

Lo que si noto es que activa la hoja seleccionada y quisiera que TODO funcionara desde la hoja Inicio, es decir; que el form no se muviera a la hoja seleccionada, se mantuviera en la hoja Inicio

Es que si no lees/estudias lo que te dan, para que hagas tus proyectos, seguirás consultando lo mismo todo el tiempo, ya días estas con esto y por lo menos debes entender para adaptar; discúlpame, pero no se nota que lo intentes, solo lanzas tus archivos y ya

Con la instrucción que te indique antes se resuelve

Mi respuesta 

 

 

Saludos 

Enlace a comentario
Compartir con otras webs

Hace 19 minutos , JoaoM dijo:

Es por esta linea


Private Sub UserForm_Initialize()
Label24.Caption = ActiveSheet.Name
    cboHojas.List = Array("PRODUCTOS", "JOHN DEERE", "CAT", "SILVERADO", "INTERNACIONAL")

    'cboHojas.Value = "SELECCIONE HOJA" 'ESTA TUVE QUE DESACTIVARLA, ¿COMO HACER?

 

No veo la instrucción With.. End With

Enlace a comentario
Compartir con otras webs

Hace 23 minutos , Gerson Pineda dijo:

Lo que si noto es que activa la hoja seleccionada y quisiera que TODO funcionara desde la hoja Inicio, es decir; que el form no se muviera a la hoja seleccionada, se mantuviera en la hoja Inicio

Pues solo pon la instrucción

"Application.ScreenUpdate=False "

Despues de iniciar la macro del cambio del combo

Private Sub cboHojas_Change()
Dim hoja As String
Dim hojaTrabajo As Worksheet
Dim hojaRow As Range

Application.ScreenUpdate=False
... el resto del código

 

Hace 26 minutos , JoaoM dijo:

'cboHojas.Value = "SELECCIONE HOJA" 'ESTA TUVE QUE DESACTIVARLA, ¿COMO HACER?

Ahí me he perdido...:unsure: Bórrala directamente, no te sirve para nada esa línea

Enlace a comentario
Compartir con otras webs

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

  • 93 ¿Te parecen útiles los tips de las funciones? (ver tema completo)

    1. 1. ¿Te parecen útiles los tips de las funciones?


      • No
      • Ni me he fijado en ellos

  • Ayúdanos a mejorar la comunidad

    • Donaciones recibidas este mes: 0.00 EUR
      Objetivo: 130.00 EUR
  • Archivos

  • Estadísticas de descargas

    • Archivos
      177
    • Comentarios
      90
    • Revisiones
      27

  • Crear macros Excel

  • Mensajes

    • No va a ser necesario distinguir el tipo de proceso entre 1 y 2. Revisa el adjunto a ver si es eso lo que quieres. Function MediaAttention(mImp As Range, _ q25 As Range, q50 As Range, _ Optional q75 As Range, _ Optional q100 As Range) As Double '-- Opción 1 If q75 Is Nothing And q100 Is Nothing Then MediaAttention = q25 / q50 Exit Function End If '-- Opción 2 MediaAttention = ((0.25 * (q25 - q50)) / mImp) + _ ((0.5 * (q50 - q75)) / mImp) + _ ((0.75 * (q75 - q100)) / mImp) + _ (q100 / mImp) End Function   Media Attention Formula 1.2.xlsb
    • Gracias tomarse el tiempo de leer por responder Maestro @Antoni Adjunto el archivo con la idea a la que deseo llegar, sigo atento. Mil gracias por el tiempo y la ayuda brindada   Media Attention Formula 1.2.xlsb
    • He analizado la UDF y entiendo perfectamente lo que hace, lo que no entiendo es lo que pretendes hacer. Mejor sube un ejemplo resuelto de  como debería funcionar la UDF con los nuevos parámetros solicitados. 
    • Gracias, ya lo conseguí solucionar
    • Hola a todos Primero que nada deseo agradecer el tiempo en leer este post, Muchas Gracias. Me acerco a ustedes para pedir su ayuda para lo siguiente: Tengo una UDF, la cual tiene dos escenarios: 1.- Si Tiempo Promedio y Duración del Video son diferentes de 0, hacer el calculo 2.- Si lo anterior es igual a 0, se realiza el otro calculo por cuartiles. El detalle es que son muchas celdas a seleccionar, lo cual creo puede ser engorroso, entonces, pensando en simplificar la función, me pregunte si fuera posible: a.- Colocar 1 al principio de la función y después solo seleccionar 2 celdas correspondientes (Rango continuo o discontinuo) b.- Colocar 2 al principio de la función y después seleccionar las 5 celdas correspondientes (Rango continuo o discontinuo) Espero me puedan ayudar y/o orientar al respecto, quedo atento para cualquier duda, de antemano les agradezco cualquier ayuda brindada. Mil Gracias!! Media Attention Formula 1.1.xlsb  
  • Visualizado recientemente

    • No hay usuarios registrado para ver esta página.
×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.