Jump to content
Enid86

ANSWERED Ingresar datos en Matriz de dos dimensiones

Recommended Posts

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

Share this post


Link to post
Share on other sites

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

 

Share this post


Link to post
Share on other sites

 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

Edited by Enid86

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites
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! 😊

Share this post


Link to post
Share on other sites

¡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

 

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites

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     

 

Edited by vaguilarpau

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

INFORMACIÓN BÁSICA SOBRE PROTECCIÓN DE DATOS

Responsable: Sergio Andrés Celemín

Finalidad: Moderar y responder comentarios de usuarios. Recuerda que la información que facilites es pública, y los datos que incluyas los leerá cualquier visitante de esta web, así como el avatar que poseas.

Legitimación: Consentimiento del interesado.

Destinatarios: Hetzner Online GmbH.

Derechos: Puedes ejercitar en cualquier momento tus derechos de acceso,
rectificación, supresión, oposición y demás derechos legalmente establecidos a
través del email sergio@ayudaexcel.com.

Información adicional: Encontrarás más información en la política de privacidad.




  • Posts

    • Hola, como ya te han comentado, no se puede evitar ver la presentación propia de Excel,  no hay forma de evitarla así se usen macros o cualquier evento del archivo, claro, dependiendo del tamaño del  archivo y/o las características y/o lo que tengas en tu evento Open, se verá menos o más tiempo. Para terminar, por más que actives tu Userform a través del  evento Open y quites la visibilidad del Excel, igual se verá la dichosa presentación, y no,  tampoco hay forma de mostrar directamente el Userform ¿Por qué? Excel es una hoja de cálculo, no es un Entorno de Desarrollo Integrado (IDE) con el que se crea software propio, el VBA es parte de Excel, no se puede compilar aparte, si quieres algo propio,  necesariamente tienes que recurrir a Visual.Net, C++, C, C#,  etc. Saludos. 
    • Buen día estimados expertos, acudo a ustedes solicitando su valiosa colaboración con la finalidad de poder resolver esta tématica: tengo un formulario en el cual existen 3 combobox dependientes unos del otro, lo que pretendo hacer es que dependiendo el pais que se coloque en el textbox1 sea como ponga la nacionalidad en el textbox 2, es decir; en el formulario tenemos el btn_aceptar que es el que manda concatenadamento el contenido de los 3 comboboxs hacia el textbox1, pero lo que quiero hacer es que con el btn_nacionalizar ponga en el textbox2 la nacionalidad deacuerdo a lo que se escriba en el textbox1, por ejemplo si pusieron en el textbox1 "MÉXICO" (aunque existan otros caracteres pero que identifique la palabra "MÉXICO") entonces que ponga en el textbox2 "MEXICANA", si pusieron "JAPÓN" entonces que ponga "JAPONESA", y asi contiguamente; ojo no es necesario hacerlo con todos los paises, lo que necesito en sí es la lógica y obvio las sentencias para poder continuar yo con los demas paises. Ya que lo que debe hacer el programa en resumen es checar la "palabra" del pais dentro del textbox1 y dependiendo de eso poder poner la "palabra" de nacionalidad en el textbox2. De antemano mil gracias a quien pueda ayudarme. Dejo archivo muestra en dropbox   https://www.dropbox.com/s/4bzrng5yq8l9ewi/Nacionalizar.rar?dl=0
    • Que tal, a la planilla le han puesto espacios a los números ya sea adelante y atrás, por lo tanto no suma. ¿Cómo saco de una vez todos los espacios en blanco? Adjunto archivo. Muchas gracias! No suma por los espacios en blanco.xlsx
    • Visor He tenido un tiempito hoy, así que envío mi versión, revísalo y nos comentas   Saludos a ambos! Importar datos de otro libro_GP.zip
    • Tema solucionado!   Se agradece la ayuda.   Saludos JB
  • Recently Browsing

    No registered users viewing this page.

×
×
  • Create New...

Important Information

Privacy Policy