Saltar al contenido

Next C - Error


Recommended Posts

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

Enlace a comentario
Compartir con otras webs

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

Enlace a comentario
Compartir con otras webs

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

Enlace a comentario
Compartir con otras webs

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

 

Enlace a comentario
Compartir con otras webs

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?

Enlace a comentario
Compartir con otras webs

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 

Enlace a comentario
Compartir con otras webs

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

Enlace a comentario
Compartir con otras webs

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

Enlace a comentario
Compartir con otras webs

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

 

Enlace a comentario
Compartir con otras webs

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

Enlace a comentario
Compartir con otras webs

Archivado

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

  • 97 ¿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

    • Hola que tal amigos programadores por favor me podrían ayudar con una macro que me genere un archivo CSV delimitado por comas, la estructura del archivo CSV no deberá llevar encabezado, los datos del archivo CSV serán obtenidos de la hoja “Datos”. En la columna A: deberá tener la clave clues que se toma de la columna B de la hoja Datos En la Columna B: el Código (son 230 codigos que van del rango G1:IB1 de la hoja datos) En la Columna C: el valor almacenado a su correspondiente al código y clues En la Columna D: el número del mes que se obtendrá de la de la columna E de la hoja Datos En la Columna E: el año que se tomará de la columna F de la hoja de Datos   Son 230 códigos por lo que la macro generará 230 filas por cada clave clues que tenga la hoja Datos En el archivo anexo una hoja llamada CSV para que vean la estructura que tendrá, el archivo CSV estará delimitado por comas   Les agradecería mucho que me ayuden por favor, Dios los bendiga Exportar datos a csv.xlsx
    • Hola buenas tardes.   Debido al trabajo debo estar comparando en un periodo unos archivos dentro de una carpeta o subcarpeta. en base a la fecha de creacion o modificacion.  pero tengo que estar viendo carpeta por carpeta y aveces son varios. Con una macro intente  listar los archivos de cualquier carpeta y subcarpeta, esto activandolo segun la celdaactiva. El problema es que tiene algunos errores. 1. si la carpeta cuenta con subcarpetas me los manda a muchas filas abajo. Mi idea es hoja(Así debe quedar) Que con una macro pueda seleccionar la carpeta desde el buscador y me de la lista de archivos a partir de la fila 6. siendo columna A= fecha de modificación, columna B =Fecha de creación y columna C=Nombre del archivo con hiperlink. Con otro o con la misma macro poder seleccionar otra carpeta y sus subcarpetas, según sea el caso. y me liste a partir de la columna F de la fila 6 Siendo La columna F=Nombre del archivo, columna H=fecha de creación, columna I=ultima modificación   Para así poder acceder y comparar mis archivos, directamente desde excel.   Muchas gracias Mariano       Listar archivos de 2 carpetas para comparar.xlsm
    • Hola buenas, Os presento mis dudas. Tengo un libro  (llamémosle LibroDestino) con dos módulos, uno de definición de variables "ModDef" y otro de inicializacion de esas mismas variables "ModCfg". Necesito que al copiarme una hoja de otro libro(llamémosle LibroOrigen), mediante un procedimiento, sobrescribir el modulo de inicialización de variables del LibroDestino con el  contenido del módulo que hay en el LibroOrigen. Destacar que los dos módulos de cada libro tienen el mismo nombre "ModCfg". Y tienen una única variable llamada "Mensaje". En el LibroDestino tiene el valor "Hola" y en el LibroOrigen el valor "Adiós" Este procedimiento lo realiza perfectamente,  es decir se sobrescribe, pero si en el mismo procedimiento quiero utilizar el nuevo valor de esa variable, me conserva el valor de la variable anterior. Para hacer las comprobaciones he ejecutado un MsgBox al empezar y al acabar el procedimiento, pero en los dos casos me devuelve el valor original del LibroDestino el valor "Hola", cuando mi idea es que al sobrescribir el modulo con el nuevo valor de la variable, el último MsgBox me devuelva el valor "Adios". Mi objetivo es poder tener la inicialización de esas variables en un libro que no sea el de trabajo (LibroDestino), ya que según la hoja que importe puedo requerir que las variables tengan un valor u otro. ¿Por que no me coge en el procedimiento el nuevo valor de la variable? ¿Cómo podría conseguirlo? He tenido que activar en VBA  la referencia Microsoft visual basic for applications extensibility 5.3 desde  Herramientas -> Referencias. Creo que es la única manera de poder trabajar con los módulos desde VBA, aunque si se pudiera de otra manera creo que sería mas óptimo. Mil gracias de antemano, un saludo!         Libro1_Prueba.xlsm Libro2_Prueba.xlsm
    • Agradecido Antoni! Tus sugerencias me ayudaron mucho! Como pudiese hacerte llegar el archivo?
    • Prueba este código. Sin el archivo no te puedo ajustar más. Private Sub btnCargaBancos_Click() 'El tipo de dato debe especificase para cada variable Dim TasaCompra As Double, TasaVenta As Double, InvBanesco As Double, InvVzla As Double Dim MontoBanesco As Double, MontoVzla As Double, TasaDiaBan As Double, TasaDiaVzla As Double Dim TasaActual As Double 'Hay que comprobar que los textbox tienen contenido numérico 'Los datos numéricos solo pueden contener números y el separador decimal, cualquier otro caracter dará error al convertir If Not IsNumeric(txtInverBanesco) Or _ Not IsNumeric(txtInverVzla) Or _ Not IsNumeric(txtTasaCompra) Or _ Not IsNumeric(txtTasaVenta) Then MsgBox "Los datos deben ser numéricos", vbCritical Exit Sub End If InvBanesco = CDbl(txtInverBanesco) InvVzla = CDbl(txtInverVzla) TasaCompra = CDbl(txtTasaCompra) TasaVenta = CDbl(txtTasaVenta) 'Los datos de los divisores no pueden ser 0 (Indeterminación matemática) If TasaCompra = 0 Or _ InvBanesco = 0 Or _ InvVzla = 0 Then MsgBox "Los datos no admiten valor cero", vbCritical Exit Sub End If MontoBanesco = (InvBanesco / TasaCompra) * (1 - 0.18 / 100) * (TasaVenta * (1 - 0.18 / 100)) MontoVzla = (InvVzla / TasaCompra) * (1 - 0.18 / 100) * (TasaVenta * (1 - 0.18 / 100)) TasaDiaBan = (MontoBanesco / InvBanesco) * (1 - 0.055) TasaDiaVzla = (MontoVzla / InvVzla) * (1 - 0.055) If TasaDiaBan < TasaDiaVzla Then TasaActual = TasaDiaBan Else TasaActual = TasaDiaVzla End If 'En VBA, los datos numéricos no admiten ser formateados, formatear directamente en las celdas, 'MontoBanesco = FormatNumber(MontoBanesco, 2, True, vbFalse) 'MontoVzla = FormatNumber(MontoVzla, 2, True, vbFalse) 'TasaActual = FormatNumber(TasaActual, 5, True, False) txtBcoBanesco = MontoBanesco txtBcoVenezuela = MontoVzla txtTasaDiaria = TasaActual End Sub  
  • 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.