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.

×
×
  • 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.