Saltar al contenido

Ingresar datos en Matriz de dos dimensiones


Recommended Posts

publicado

Al fin.....?

Las Macros aparecen descritas en la hoja "Macros". Las descripciones que no están coloreadas, es porque están sin hacer todavía.
 

Me interesaría que me ayudáseis, si sabéis/podéis, en dos cosas fundamentales:


1-Módulos 3 y 5: Ver si conocéis un código mejor que el que he utilizado para pasar los datos que aparecen en la pestaña GS, al resto de hojas, según el listado "listacamionesKm" (módulo 3) y listado "listacalidad"(módulo 5). Aunque he comprobado que los datos se pasan correctamente, siempre da un error al final del proceso de "Subíndice fuera de rango" y no entiendo el motivo, porque todos los elementos en listacalidad y listacamiones, tienen una hoja creada.

2 -Módulos 3 y 5: Ver la forma de cumplimentar una matriz bidimensional con los datos de "listacamioneskms" que después se pueda comparar con la variable "vehículo" sin que dé error de tipos al usar If UBound(Filter(listacalidad, vehiculo)) >= 0 Then .

Bueno, y cualquier mejora de código, aunque trate otros aspectos, será bienvenida y aprovechada, porque esto del VBA me encanta y escuchando críticas es como se aprende mejor... Así que no sintáis lástima y sed todo lo duros que queráis...? 

Mil gracias y que empiece la fiesta! ??

MACROMODELO(web) - copia.xlsm

publicado

Subido!

 

Hace 15 horas, Toldeman dijo:

Hola.

Haz un pequeño ejemplo y subelo.

 

Saludos.

 

publicado
En 7/4/2020 at 18:48 , Antoni dijo:

Sin el archivo es muy complicado averiguar el porqué de tu problema.

Subido!

publicado

Subido!

En 7/4/2020 at 22:59 , Gerson Pineda dijo:

¿Que esperas para subir una muestra en Excel?

 

publicado

Hola, como relacionas tu tabla Hoja(GS") y Hoja("listacamioneskm") o  Hoja("listacamioneskms").

En tu Hoja("GS") deberías insertar en la columna "A"  Vehículo y sus respectivos números. Porque para extraer la informacion de la Hoja(GS") a las Hoja("1111") y sucesivo, se necesita que en la Hoja(GS") tenga una relación con las otras hojas.

Cita

"Subíndice fuera de rango"

Después Option Explicit coloca

Option Base 1

 

publicado

 Hola Gerson!! ?

Muchas gracias, he puesto tu código en el módulo 2 y me da error de Subíndice fuera de intervalo tras enviar la primera línea de datos.

El tema está en que cuando los camiones que aparecen en GS pertenecen al listado de Calidad, en ese caso se añaden dos columnas nuevas que no están en GS.

Cuando los camiones están en el listado de camiones, en ese caso no se añaden esas dos columnas, sólo lo que aparece en GS. 

Y lo que me gustaría entender es por qué si todos los camiones de ambos listados tienen una hoja con su nombre para pegar los datos, por qué sale el error de Subíndice fuera del intervalo cuando finaliza el proceso... Entiendo que ese error sólo debería aparecer si en GS y en el listado de camiones hubiese datos del 1111, por ejemplo, y al ir a pegar esos datos, no existe hoja llamada 1111, pero no es el caso y sin embargo, sale el error... 

A ver si sois capaces de averiguar el motivo.. 

Hace 21 horas, Gerson Pineda dijo:

Saludos a todos

@Enid86

Revisa el adjunto, espero entender lo que necesitas

 

ADJUNTO EL FICHERO:

MACROMod.xlsm

publicado

Hola Rolano! ?

Fue un error al reducir el archivo a una pequeña muestra... En el original, la columna A es la de los vehículos, como muy bien apuntas.

Poniendo BASE 1, me sale directamente el error de Subíndice sin llegar a enviar ningún dato.

Puedes explicar un poco para qué debo poner Option Base 1, por favor? A qué afecta eso? Porque pensaba que la gente que lo ponía era por comodidad al trabajar arrays, no porque afectase luego a las instrucciones, funciones, métodos o lo que se a... Muchas gracias!! ?

En 14/4/2020 at 18:55 , rolano dijo:

Hola, como relacionas tu tabla Hoja(GS") y Hoja("listacamioneskm") o  Hoja("listacamioneskms").

En tu Hoja("GS") deberías insertar en la columna "A"  Vehículo y sus respectivos números. Porque para extraer la informacion de la Hoja(GS") a las Hoja("1111") y sucesivo, se necesita que en la Hoja(GS") tenga una relación con las otras hojas.

Después Option Explicit coloca

Option Base 1

 

 P.D: Subo el fichero correcto:

MACROMod.xlsm

publicado
Hace 2 horas, Enid86 dijo:

Hola Gerson!! ?

Muchas gracias, he puesto tu código en el módulo 2 y me da error de Subíndice fuera de intervalo tras enviar la primera línea de datos.

El tema está en que cuando los camiones que aparecen en GS pertenecen al listado de Calidad, en ese caso se añaden dos columnas nuevas que no están en GS.

Cuando los camiones están en el listado de camiones, en ese caso no se añaden esas dos columnas, sólo lo que aparece en GS. 

Y lo que me gustaría entender es por qué si todos los camiones de ambos listados tienen una hoja con su nombre para pegar los datos, por qué sale el error de Subíndice fuera del intervalo cuando finaliza el proceso... Entiendo que ese error sólo debería aparecer si en GS y en el listado de camiones hubiese datos del 1111, por ejemplo, y al ir a pegar esos datos, no existe hoja llamada 1111, pero no es el caso y sin embargo, sale el error... 

A ver si sois capaces de averiguar el motivo.. 

Hola!

Queda claro que debes esforzarte un poco mas para dominar este lenguaje, especialmente porque estamos colaborando con tu examen/ejercicios, mi recomendación es que trates de estudiar a profundidad para que lo hagas por tu propia cuenta, porque de mi parte no acostumbro hacer tareas de alumnos, espero no lo tomes a "mal"

Te adjunto mi aporte, a partir de aquí, dale tiempo e investiga para entender cada linea de código VBA

 

Saludos!

Copiar rango a multiples hojas VBA_GP.zip

publicado
Hace 12 minutos , Gerson Pineda dijo:

Hola!

Queda claro que debes esforzarte un poco mas para dominar este lenguaje, especialmente porque estamos colaborando con tu examen/ejercicios, mi recomendación es que trates de estudiar a profundidad para que lo hagas por tu propia cuenta, porque de mi parte no acostumbro hacer tareas de alumnos, espero no lo tomes a "mal"

Te adjunto mi aporte, a partir de aquí, dale tiempo e investiga para entender cada linea de código VBA

 

Saludos!

Copiar rango a multiples hojas VBA_GP.zip 573.35 kB · 0 descargas

Gracias Gerson! Obviamente no pretendo que lo hagáis vosotros, lo que quería era saber por qué el Código que yo he escrito da ese error, si según lo que he visto por YouTube, el Código está correcto... 

Respecto al código que tú me habías pasado, como le he dado a ejecutar y no funcionaba, pues no me he parado a mirarlo, pero si dices que lo mire en detalle, por algo será.. (Qué misterioso..jejeje). Seguiré tú consejo, a ver qué me encuentro. ?

Gracias! ?

publicado

¡Buenas noches, Gerson!

Ya he estudiado el código y me ha encantado, he visto un montón de cosas en docs.microsoft que no conocía...

Al principio un poco complicado, con tanta variable y tanto rango, pero creo que lo he entendido.

Voy a ver si lo amplío para el resto de condiciones que quiero que se apliquen y ya os contaré!

 ??

Hace 23 horas, Gerson Pineda dijo:

Hola!

Queda claro que debes esforzarte un poco mas para dominar este lenguaje, especialmente porque estamos colaborando con tu examen/ejercicios, mi recomendación es que trates de estudiar a profundidad para que lo hagas por tu propia cuenta, porque de mi parte no acostumbro hacer tareas de alumnos, espero no lo tomes a "mal"

Te adjunto mi aporte, a partir de aquí, dale tiempo e investiga para entender cada linea de código VBA

 

Saludos!

Copiar rango a multiples hojas VBA_GP.zip 573.35 kB · 2 descargas

 

publicado
Option Explicit
Option Base 1

'EXPORTAR DATOS
Sub Botón3_Haga_clic_en_R()

'On Error GoTo etiqueta

Application.ScreenUpdating = False
Dim vehiculo As String, fila As Long, colum As Long

Dim NCarga As String, FechaSalida As String, FechaLlegada As String, PoblaciónOrigen As String, PoblaciónDestino As String
Dim KmsNac As Integer, KmsInt As Integer, Precioventa As Double, PrecioKmsNac As Double, PrecioKmsInt As Double
Dim filadest As Integer, columdest As Integer
Dim pasardatos As Long, ultimafila As Long
Dim Hoja As String
Dim listacamioneskm() As String, i As Integer, matriz As Range
Dim CantFila As Long
Dim HojaEstado As Object


'funciona

Worksheets("listacamioneskm").Select
CantFila = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
Range("A1:A" & CantFila).Select

'funciona

i = 1
For Each matriz In Selection
    ReDim Preserve listacamioneskm(CantFila)
    listacamioneskm(i) = matriz.Value
        i = i + 1
Next matriz


fila = 2
colum = 0
'filadest = 2
columdest = 1


        
        Do
        Worksheets("GS").Select
        'hoja = Cells(fila, colum + 1).Value 'fila 2, columna 1
        vehiculo = Cells(fila, 1).Value

        If vehiculo = "" Then Exit Sub
        
        If UBound(Filter(listacamioneskm, vehiculo)) >= 0 Then
       
        vehiculo = Cells(fila, 1).Value
        NCarga = Cells(fila, 2).Value
        FechaSalida = Cells(fila, 3).Value
        FechaLlegada = Cells(fila, 4).Value
        PoblaciónOrigen = Cells(fila, 5).Value
        PoblaciónDestino = Cells(fila, 6).Value
        KmsNac = Cells(fila, 7).Value
        KmsInt = Cells(fila, 8).Value
        Precioventa = Cells(fila, 9).Value
        PrecioKmsNac = Cells(fila, 10).Value
        PrecioKmsInt = Cells(fila, 11).Value
        
        
        'enviamos datos
        'hay que enviar antes de que salte de fila
        
        Worksheets(vehiculo).Select
        filadest = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
        Sheets(vehiculo).Cells(filadest + 1, columdest).Value = vehiculo
        Sheets(vehiculo).Cells(filadest + 1, columdest + 1).Value = NCarga
        Sheets(vehiculo).Cells(filadest + 1, columdest + 2).Value = FechaSalida
        Sheets(vehiculo).Cells(filadest + 1, columdest + 3).Value = FechaLlegada
        Sheets(vehiculo).Cells(filadest + 1, columdest + 4).Value = PoblaciónOrigen
        Sheets(vehiculo).Cells(filadest + 1, columdest + 5).Value = PoblaciónDestino
        Sheets(vehiculo).Cells(filadest + 1, columdest + 6).Value = KmsNac
        Sheets(vehiculo).Cells(filadest + 1, columdest + 7).Value = KmsInt
        Sheets(vehiculo).Cells(filadest + 1, columdest + 8).Value = PrecioKmsNac
        Sheets(vehiculo).Cells(filadest + 1, columdest + 9).Value = PrecioKmsInt
        Sheets(vehiculo).Cells(filadest + 1, columdest + 10).Value = Precioventa

        
        End If
        fila = fila + 1
        Loop While vehiculo <> ""

Application.ScreenUpdating = True
End Sub

Hola a todos, es tu misma rutina (Módulo3), con algunas modificaciones,. revisalo. Si tienes otra pregunta abre un nuevo tema para que tengas mas oportunidad de ayuda.

MACROMod.xlsm

publicado

Si tienes 147 registros de 3 campos o columnas 

tu arreglo seria matriz(147,3)

donde:

fila=1

for each dato in selection 

 

 

publicado

dim matriz(147,3)

registro=1

campo=1

for each dato in selection

     if campo > 3 then

          registro=registro+1

          campo=1

     endif

     matriz(registro,campo)=dato

     campo=campo+1

next

Espero te sirva la idea     

 

Archivado

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

  • 109 ¿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
      187
    • Comentarios
      97
    • Revisiones
      28

    Más información sobre "Un juego del Rabino en Excel"
    Última descarga
    Por pegones1

    1    1

  • Crear macros Excel

  • Mensajes

    • Hola nuevamente. Por eso la importancia de lo que mencionas tú como "ruta relativa". Tal cual comentas, y aún sin llegar a algunos detalles importantes para ayudarte, en realidad tal cual te comenté le día miércoles, pues sí podías hacer como comentabas, era cosa de obtener los Id de Windows (como tú los llamas) y la ruta de OneDrive en casa usuario y eso sí se puede obtener con VBA y luego pasarlo a PQ, pero medio que te cerraste en que "PQ no puede trabajar con rutas relativas", cosa cierta pero siempre hay formas. Si SAP puede o no guardar en OneDrive o SharePoint, pues si está mapeado en la PC ¡claro que se puede! Pero bueno, creo que si te es útil tu propia propuesta ¡avanza con eso!
    • Perdona @Abraham Valencia pero he estado liado estos días. En realidad todo el problema se reduce a estos dos problemas: Problema 1: El script que "fabrica" SAP y que luego "pego" en la macro, no es capaz de  guardar archivos en SharePoint. He estado buscando, y en realidad muchas personas tienen ese problema (no poder guardar un Excel en SAP a través de VBA). Eso muy probablemente sean problemas de permisos, que no puedo cambiar (no soy administrador de nada). Como no puedo solucionarlo así, paso al plan B, que es guardar en Excel que me genera SAP en el ordenador de cada usuario que ejecute la plantilla (y que sí está guardada en SharePoint), para después con PowerQuery llamar a ese Excel (el export). Para ello, pretendo guardar el export, en la ruta relativa "C:\..\..\..\OneDrive - NombreEmpresa\Documentos\SAP\SAP GUI" donde los \..\..\..\ saltan las rutas personales de cada usuario (tipo C:\users\IDusuario\). Eso lo hace bien, y el archivo se guarda en la ruta de cada usuario que lo usa, pero surge el problema 2 Problema 2: PowerQuery no trabaja con rutas relativas del tipo  "C:\..\..\..\OneDrive - NombreEmpresa\Documentos\SAP\SAP GUI" necesita que sea del tipo fija "C:\users\IDusuario\OneDrive - NombreEmpresa\Documentos\SAP\SAP GUI" pero claro, IDusuario es diferente para cada usuario.   Pero escribiendo todo esto, creo que he dado con una posible solución, no grabar el export en una ruta de usuario, sino en una en la raiz de C:, que siempre será igual para todos los usuarios, del tipo C:\Sap\export.xlsx que seria igual en todos los ordenadores. Asi sí podría decirle a PowerQuery que vaya siempre a la ruta C:\Sap\ que existirá en todos los ordenadores. Mañana intentaré hacer pruebas, aunque mi solución ideal seria que se pudiera guardar en el SharePoint. Saludos.
    • Hola La opción brindada por @torquemada es correcta, funciona, pero hay algunos inconvenientes que (desde mi punto de vista) no la convierten en mi primera elección. Los inconvenientes son: Tendrías que ir columna por columna haciendo los reemplazos, claro que no se harían a mano sino que utilizarías la opción reemplazar o la opción texto en columnas, aun asi demorará un poquito y será trabajoso. Cada vez que descargues otro listado, tendrás que volver a realizar los reemplazos. Me parece una mejor propuesta lo siguiente: Descarga los movimientos a un archivo de Excel Desde tu control de pagos (otro archivo) cargas los movimientos del archivo descargado mediante Power Query Power Query hará los reemplazos y reconocerá todo correctamente (sin que tengas que hacer nada especial) Cuando descargues los movimientos un día posterior, solamente tendrás que hacer clic en "Actualizar" y todo funcionará en automático
    • Hola a todos, Efectivamente, me temo que tal como trabajan las funciones =HOY() y/o =AHORA() (volátiles), sólo con macros puedes obtener soluciones. Un recurso pedestre podría ser, cada vez que quieras que se fije un dato, te sitúes en esa celda y pulses F2, F9 e INTRO.  Pero claro, puede ser un inconveniente si hay que hacerlo repetitivamente en muchas ocasiones,.............. en fin, lo comento sólo como posibilidad. Saludos,
    • Hola nuevamente, mi duda sigue siendo la ruta, o rutas, finales que quedan, esas que llamas "relativas"; igual por si acaso pon 3 o 4 de esas, tal cual son y/o se ven en el explorador de cada PC y, de ser posible, en cualquier otro "lado" en que las veas.
  • 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.