Saltar al contenido

Next C - Error


Recommended Posts

publicado

Con la ayuda de muchos aqui, después de leer pude encontrar y utilizar esta macros, antes las variables solo eran "c" , ahora trate de agregarle mas, pero me marca error en la linea Next C, se supone que el macros lea los datos de los rangos de celdas definidas, luego copie un formato de otra hoja, y con esos datos nuevos cree una nueva hoja, definiendo el nombre con la celda j2, pero trate de hacerlo mas grande y quisiera agregar que tambien copie los datos de las celdas "B, I , J", pero me marca error,  no se si deba cambiar la linea "Next c" para que haga el loop con las demas variables 

 

 

Sub Copia()

Dim c As Range

Dim u As Range

Dim vd As Range

Dim vdr As Range

'--

Application.ScreenUpdating = False

For Each c In Range("C2", Range("C" & Rows.Count).End(xlUp))

For Each u In Range("B2", Range("B" & Rows.Count).End(xlUp))

For Each vd In Range("I2", Range("I" & Rows.Count).End(xlUp))

For Each vdr In Range("J2", Range("J" & Rows.Count).End(xlUp))    

Sheets("BASE").Copy , Sheets(Sheets.Count)    

With ActiveSheet      

.Range("J2") = c      

.Range("H3") = cu

.Range("J59") = vd      

.Range("J60") = vdr      

If Len(.Name) > 10 Then        

.Name = Left(c.Offset(, 2), 10)      

Else        

.Name = c      

End If    

End With

Next c

Application.ScreenUpdating = True

End Sub

publicado

Estimado, sería bueno que intentes explicar qué es lo que quieres lograr/hacer. En principio sí te comentaré que un For tiene que tener su propio Next, no es que varios For puedan correr con uno solo. Sugiero no solo copiar/pegar lo que ves, sino, sobre todo, leer teoría.

Abraham Valencia

publicado
Hace 6 horas, avalencia dijo:

Estimado, sería bueno que intentes explicar qué es lo que quieres lograr/hacer. En principio sí te comentaré que un For tiene que tener su propio Next, no es que varios For puedan correr con uno solo. Sugiero no solo copiar/pegar lo que ves, sino, sobre todo, leer teoría.

Abraham Valencia

Hola que tal, tomo la recomendación, sinceramente no se mucho de vba y si encuentro complicado entender cosas, de cierta forma cada uno escribe codigo a su manera y me confunde,  pero no niego que usar vba y macros ayuda mucho con muchas tareas, en concreto lo que buscaba era que la macros leyera datos de ciertas columnas de la hoja 1 (como ejemplo)  luego que copiara la hoja 2 (que contiene cierto formato que se repite), con esos datos, creara una nueva hoja, se pegara el formato de la hoja 2, y luego que de los datos leidos de las columnas en la hoja 1, pegara lo valores en la celdas definidas, por ultimo que cambiara el nombre de la hoja basandose en el contenido de cierta celda. Ahora me ayudaría mucho que me orientaran mas que me solucionaran de lleno, tomando en cuenta tu comentario del next, trate de hacer pruebas, pero aun lo logro hacer que funcione, por lo tanto mis dudas que surgieron:

1. si cada variable for necesita su next, eso quiere decir que tiene que hacerse por pasos, que lea columna por columna por pasos, o sea que exista una for y next para cada columna, en modo sucesivo, o es posible hacerlo como lo tengo

2.  La ultima variable en repetirse debería ser next a toda vez que es la ultima que cierra el ciclo cambiando el nombre de la hoja nueva

3. Es practico tener un For y Next para cada columna o puedo compilarlas en una sola.

 

De ante mano gracias por los comentarios y recomendaciones, y me disculpo por las cuestiones inexpertas de mi post

publicado

1- No necesariamente se tiene que usar un For por cada columna, pero depende de el orden de los datos así como si son columnas/filas contiguas o no.

2- No se entiende ese punto

3- Como digo en el punto 1, depende

Ojo, hay que ver tu archivo para poder saber bien qué necesitas.

Abraham Valencia

 

publicado

For/Next es un bucle de instrucciones, depende de ti el uso que quieras darle y que instrucciones pones dentro de él.

Por ejemplo, supongamos que quieres poner "Hola" en el rango A1:F25 (25 filas x 6 columnas), tienes 2 posibilidades, con un bucle o con dos bucles:

Sub Opción_1()
   For x = 1 To 25 'Filas
      For y = 1 To 6 'Columnas
         Cells(x, y) = "Hola"
      Next
   Next
End Sub

Sub Opción_2()
   For Each celda In Range("A1:F25") 'Celdas
      celda = "Hola"
   Next
End Sub

¿Está mas claro?

publicado

Ejemplo.xlsm

 

Adjunto ejemplo de lo que seria la aplicacion, tratare de tomar sus recomendaciones y vere si puedo solucionarlo, si no, espero poder seguir contando con su apoyo, buen dia.

publicado
Hace 1 hora, kuro.san dijo:

Ejemplo.xlsm 15 kB · 0 downloads

 

Adjunto ejemplo de lo que seria la aplicacion, tratare de tomar sus recomendaciones y vere si puedo solucionarlo, si no, espero poder seguir contando con su apoyo, buen dia.

Estoy detenido en este momento, al no saber exactamente como incluir mas rangos de celdas dentro de la tarea de hacer el "row.count", se que debo definir una variable para rango de celdas que voy a necesitar copiar, pero no estoy seguro si es correcto primero ejecutar la variable c sola y luego en orden las demas 

publicado

Nueva update, por un momento logre que funcionara, pero, aun no se pegan datos, me pueden apoyar a decirme que linea esta causando que no aparezcan todos los datos requeridos.

 

Lo que ya logre hacer es, que se generen todas las hojas y que el nombre de esta cambie acorde a cierta celda.

 

Me faltan 2 cosas

 

1. Que se copien los datos que faltan

2. Tengo un hipervinculo en uno de los rangos, pero solo se copia en formato de texto normal, como puedo hacer que aparezca el hipervinculo activo

Ejemplo.xlsm

publicado

A ver si nos aclaramos, vamos a ver si somos capaces de entender lo que quieres, porqué no queda nada claro

Definición del procedimiento:

Crear una hoja nueva con cada fila de la hoja LISTA, a imagen de la hoja BASE, con el nombre de la columna B, con un maximo de 10 caracteres, respetando el hipervinculo de la columna F.

CONTESTA: SI-NO

publicado

Adelantándome a tu respuesta y suponiendo que la respuesta a la pregunta de mi post anterior es SI:

Sub Copia(): On Error Resume Next
Dim COMIDA As Range, NOMBRE As String
Application.ScreenUpdating = False
Application.DisplayAlerts = False
For Each COMIDA In Sheets("LISTA").Range(Sheets("LISTA").Range("B2"), _
                                         Sheets("LISTA").Range("B2").End(xlDown))
   Sheets("BASE").Copy After:=Sheets(Sheets.Count)
   With ActiveSheet
      If Len(COMIDA) > 10 Then
         NOMBRE = Left(COMIDA, 10)
      Else
         NOMBRE = COMIDA
      End If
      Sheets(NOMBRE).Delete
     .Name = NOMBRE
     .Range("G5") = COMIDA
     .Range("G6") = COMIDA.Offset(, 1)  'TIPO
     .Range("M21") = COMIDA.Offset(, 2) 'CALORIAS
     .Range("F21") = COMIDA.Offset(, 3) 'SALUDABLE
     .Range("F22") = COMIDA.Offset(, 4) 'VÍNCULO
     .Range("F22").Hyperlinks.Add _
         Anchor:=.Range("F22"), _
         Address:=COMIDA.Offset(, 4).Hyperlinks(1).Address
   End With
Next
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub

 

publicado
Hace 16 horas, Antoni dijo:

Definición del procedimiento:

Crear una hoja nueva con cada fila de la hoja LISTA, a imagen de la hoja BASE, con el nombre de la columna B, con un maximo de 10 caracteres, respetando el hipervinculo de la columna F.

¿Seguro que tú mismo has entendido esto que has escrito? :blink:

:D

publicado
Hace 15 minutos , Haplox dijo:

¿Seguro que tú mismo has entendido esto que has escrito? :blink:

:D

Los genios somos así, jajaja ?

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.