Saltar al contenido

Macros para FixedWidth lo seleccionado


RandalHP

Recommended Posts

Buenas tardes,

Tengo el siguiente código que he creado que tiene como finalidad aplicar a una columna el "Text to Column / Fixed Width / General":

    Columns("AJ:AJ").Select
    Selection.TextToColumns Destination:=Range("AJ1"), DataType:=xlFixedWidth, _
        FieldInfo:=Array(0, 1), TrailingMinusNumbers:=True

Alguien podría ayudarme a modificar lo para que cada vez que lo ejecute solo aplique a los que tengo seleccionado, por ejemplo: Si tengo seleccionado la celda (A1:A10) que solo aplique a esas celdas y no al rango que sale en el código.

Agradecería mucho la ayuda con este problema que tengo.

Saludos Cordiales.

Enlace a comentario
Compartir con otras webs

A ver si te hago pensar, RandalHP...

En la expresión "Selection.TextToColumns": ¿Qué crees que significa Selection?

(no te vayas "por las ramas" y sé concreto)

 

Enlace a comentario
Compartir con otras webs

Hace 46 minutos , Cacho R dijo:

A ver si te hago pensar, RandalHP...

En la expresión "Selection.TextToColumns": ¿Qué crees que significa Selection?

(no te vayas "por las ramas" y sé concreto)

 

Al ejecutar el comando que proporcione... Lo que hace el Excel es seleccionar el rango proporcionado... Y aplicar el "TextToColumns" Eso esta más que claro.

Si lees con atención lo que estoy buscando es, qué cuando yo (de manera manual) seleccione un rango y seguido ejecute el código este aplique solamente a lo que previamente seleccione algo asi como Active.selection. No encuentro la combinación correcta para que se ejecute bien lo que estoy buscando...

Ss.

Enlace a comentario
Compartir con otras webs

Hace 41 minutos , RandalHP dijo:

Al ejecutar el comando que proporcione... Lo que hace el Excel es seleccionar el rango proporcionado... Y aplicar el "TextToColumns" Eso esta más que claro.

cierto.

Hace 42 minutos , RandalHP dijo:

Si lees con atención lo que estoy buscando es, qué cuando yo (de manera manual) seleccione un rango y seguido ejecute el código este aplique solamente a lo que previamente seleccione algo asi como Active.selection. No encuentro la combinación correcta para que se ejecute bien lo que estoy buscando...

Deberías de ser un poco más "despierto" y más humilde al hacer caso de lo que te dice @Cacho R, por lo menos hacer tus intentos,  y demostrar que lo he hecho así y no resulta y lo he hecho de esta otra manera y tampoco...

Hace 47 minutos , RandalHP dijo:

Si lees con atención

Esas frases no deberías de hacer, ya que tu eres el que pregunta, y claro que se entiende lo que buscas y es muy sencilla la solución, pero como no le haces el intento por eso es más fácil preguntar y que te lo resuelvan...

Saludos.

P.D.: Siempre me meto donde no me llaman, pero a veces no me aguanto las ganas y escribo mi opinión.

Enlace a comentario
Compartir con otras webs

Hace 9 horas, Leopoldo Blancas dijo:

Siempre me meto donde no me llaman, pero a veces no me aguanto las ganas y escribo mi opinión.

Jajajaja... Se comprende tu reacción perfectamente.

RandalHP: Si no sabes que función cumple Selection es que nada sabes de este tema y pretendes que te hagamos todo.

En sí... ¡ello no tiene nada de malo!, pero debiste ser honesto desde un primer momento.

O sea que decir: - "... Tengo el siguiente código que he creado ..." fue notoriamente falso.

En fin...

Enlace a comentario
Compartir con otras webs

Hace 30 minutos , Cacho R dijo:

Jajajaja... Se comprende tu reacción perfectamente.

RandalHP: Si no sabes que función cumple Selection es que nada sabes de este tema y pretendes que te hagamos todo.

En sí... ¡ello no tiene nada de malo!, pero debiste ser honesto desde un primer momento.

O sea que decir: - "... Tengo el siguiente código que he creado ..." fue notoriamente falso.

En fin...

Doc. Para tu conocimiento, Excel tiene una herramienta en la cual graba los "movimientos" que realizes en el Excel. (Por eso puse que he "creado"). El Excel no lo género solo ni mucho menos un tercero o un "copy and paste". Si la expresión que use no fue la correcta las disculpas del caso... Derrepente estoy mal yo.

@Leopoldo Blancas Amigo eres libre de opinar y escribir lo que gustes, pero me vendría mejor un comentario que ayudé en mi problema.

Espero alguien pueda decirme que debo modificar, agregar o borrar en el código que proporcione, por qué como dice @Cacho R no tengo la menor idea de lo que estoy haciendo, por eso mi petición de ayuda.

Ss.

Enlace a comentario
Compartir con otras webs

Hace 14 horas, RandalHP dijo:

Columns("AJ:AJ").Select

Selection.TextToColumns Destination:=Range("AJ1"), DataType:=xlFixedWidth, _ FieldInfo:=Array(0, 1), TrailingMinusNumbers:=True

Debes darte cuenta que tienes la solución ante tus ojos. Ahí seleccionas mediante código y luego le dices que A LO SELECCIONADO lo pase a texto a columna

¿Qué ocurriría si, en vez de seleccionar mediante código ese rango, ya LO TUVIERAS SELECCIONADO manualmente? ¿Entonces a qué haría ahora referencia la sentencia "Selection"? ;)

Enlace a comentario
Compartir con otras webs

Hace 2 minutos , Haplox dijo:

Debes darte cuenta que tienes la solución ante tus ojos. Ahí seleccionas mediante código y luego le dices que A LO SELECCIONADO lo pase a texto a columna

¿Qué ocurriría si, en vez de seleccionar mediante código ese rango, ya LO TUVIERAS SELECCIONADO manualmente? ¿Entonces a qué haría ahora referencia la sentencia "Selection"? ;)

Entonces, debería borrar:

Columns("AJ:AJ").Select

Selection.TextToColumns Destination:=Range("AJ1"), DataType:=xlFixedWidth, _ FieldInfo:=Array(0, 1), TrailingMinusNumbers:=True

Al borrar lo marcado, deberia funcionar bien...

Ss.

Enlace a comentario
Compartir con otras webs

Hace 2 minutos , RandalHP dijo:

Pero al ejecutarlo, no aplicará a la celda en mención...?

Esto no lo entiendo... La celda en mención es la CELDA DESTINO donde poner el texto-columna. A no ser que estés pensando en otra cosa :huh:

Si seleccionas los datos, digamos desde J1 hacia abajo, al pasarlos a texto a columnas, EL DESTINO es la primera celda seleccionada, osea "J1"

Enlace a comentario
Compartir con otras webs

Hace 2 minutos , Haplox dijo:

Esto no lo entiendo... La celda en mención es la CELDA DESTINO donde poner el texto-columna. A no ser que estés pensando en otra cosa :huh:

Si seleccionas los datos, digamos desde J1 hacia abajo, al pasarlos a texto a columnas, EL DESTINO es la primera celda seleccionada, osea "J1"

Ahí fue donde entró mi duda, estaba pensando en seleccionar otra columna que no sea la J1 igual aplicará el "TextToColumn" o siempre irá a la J1...

Ss.

Enlace a comentario
Compartir con otras webs

Hace 5 minutos , RandalHP dijo:

Ahí fue donde entró mi duda, estaba pensando en seleccionar otra columna que no sea la J1 igual aplicará el "TextToColumn" o siempre irá a la J1...

Si lo haces MEDIANTE CÓDIGO, puedes poner el destino que quieras. En excel, al hacerlo según el asistente, creo recordar que no te deja elegir el destino (que alguien me corrija...), pero mediante código sí puedes elegir el destino que quieras

Enlace a comentario
Compartir con otras webs

Hace 3 minutos , Haplox dijo:

Si lo haces MEDIANTE CÓDIGO, puedes poner el destino que quieras. En excel, al hacerlo según el asistente, creo recordar que no te deja elegir el destino (que alguien me corrija...), pero mediante código sí puedes elegir el destino que quieras

Exacto amigo, cuando usas el asistente se aplica en lo que se tenga selecionado previamente. Con el código aplica en un rango o sector que se proporcione, entonces; que pasaría si quiera hacer lo que hace el asistente pero mediante código. Que se ejecute en lo que tengo selecionado previamente (rango aleatorio)...

Ss.

Enlace a comentario
Compartir con otras webs

 

Hace 44 minutos , RandalHP dijo:

no tengo la menor idea de lo que estoy haciendo

Bueno... ¡Ahora es posible ayudarte conociendo tus limitaciones básicas!...

____________________________________

Hace 12 minutos , RandalHP dijo:

... otra columna que no sea la J1 igual aplicará el "TextToColumn" o siempre irá a la J1...

Haz lo siguiente:

- Enciende la grabadora
- Selecciona otra columna
- Ejecuta texto en columnas
- Apaga la grabadora
- Compara el código obtenido con la versión anterior.

¿Qué diferencias encuentras?...

Saludos, Cacho R.
.

Enlace a comentario
Compartir con otras webs

Hace 2 minutos , Cacho R dijo:

 

Bueno... ¡Ahora es posible ayudarte conociendo tus limitaciones básicas!...

____________________________________

Haz lo siguiente:

- Enciende la grabadora
- Selecciona otra columna
- Ejecuta texto en columnas
- Apaga la grabadora
- Compara el código obtenido con la versión anterior.

¿Qué diferencias encuentras?...

Saludos, Cacho R.
.

Doc. No estas entendiendo la consulta que estoy haciendo. Lo que busco no es que el código se ejecute en un rango fijó si no que este se aplique en una selección que tenga hecha manualmente. Ejm: Seleccionó rango A1:A9 ejecuto el código y que se aplique en ese rango. Seleccionó B9:B900 ejecuto el código y que se aplique en ese rango.

El fin es que se aplique en un rango que yo seleccione manualmente y no que tenga proporcionado en el código...

Ss.

Enlace a comentario
Compartir con otras webs

A ver:
¿Puede ser que -tampoco- sepas encender la grabadora de macros y hacer lo que te mencioné?...

Si lo haces y comparas lo obtenido con lo que ya tienes, empezarás a entender que es Selection y como lo tienes que modificar.

 

Enlace a comentario
Compartir con otras webs

Hace 14 minutos , Cacho R dijo:

A ver:
¿Puede ser que -tampoco- sepas encender la grabadora de macros y hacer lo que te mencioné?...

Si lo haces y comparas lo obtenido con lo que ya tienes, empezarás a entender que es Selection y como lo tienes que modificar.

 

    Columns("A:A").Select
    Selection.TextToColumns Destination:=Range("A1"), DataType:=xlFixedWidth, _
        FieldInfo:=Array(0, 1), TrailingMinusNumbers:=True

Como verás es el mismo código que pase la primera vez. Ahora si lo ejecutas solo hará efecto en la columna A desde el rango A1. Pero imagina que no estoy buscando esa columna, si no que ahora quiero otra. Pero sin necesidad de estar grabando cada columna que necesito.

Ahora si lo entiendes? Ya no se como explicarte mi consulta...

Ss.

Enlace a comentario
Compartir con otras webs

Modifique el código y quedo de la siguiente manera:

Código grabado:

    Columns("A:A").Select
    Selection.TextToColumns Destination:=Range("A1"), DataType:=xlFixedWidth, _
        FieldInfo:=Array(0, 1), TrailingMinusNumbers:=True

Código modificado:

    Selection.TextToColumns Destination:=Selection, DataType:=xlFixedWidth, _
        FieldInfo:=Array(0, 1), TrailingMinusNumbers:=True

Ahora el código esta convirtiendo todas las columnas que yo selecciones, pero cuando la columna esta vacía salta error en el código. Tendré que agregar algo mas para que no tire error cuando esta vacía la columna.

Ss.

Enlace a comentario
Compartir con otras webs

Hola Randal

Prueba así: 

Selection.TextToColumns Destination:=Cells(1, ActiveCell.Column), _
DataType:=xlFixedWidth, FieldInfo:=Array(0, 1), TrailingMinusNumbers:=True

Trata de leer sobre los principales temas básicos de VBA, como por ejemplo el objeto Range/Cells y sus propiedades

Para cerrar este tema largo, sin sentido

 

Saludos

Enlace a comentario
Compartir con otras webs

Hace 11 minutos , Gerson Pineda dijo:

Hola Randal

Prueba así: 


Selection.TextToColumns Destination:=Cells(1, ActiveCell.Column), _
DataType:=xlFixedWidth, FieldInfo:=Array(0, 1), TrailingMinusNumbers:=True

Trata de leer sobre los principales temas básicos de VBA, como por ejemplo el objeto Range/Cells y sus propiedades

Para cerrar este tema largo, sin sentido

 

Saludos

Esta llenando con números toda la columna hasta el rango que seleccione.

Probé con este código:

    Selection.TextToColumns Destination:=Selection, DataType:=xlFixedWidth, _
        FieldInfo:=Array(0, 1), TrailingMinusNumbers:=True

Pero al no tener contenido la celda salta un error, Lo mismo también pasa con el código que proporcionaste.

Enlace a comentario
Compartir con otras webs

Hace 4 minutos , Gerson Pineda dijo:

Eso te pasa por no seguir las normas del foro, por eso el tema se ha tornado largo

 

Saludos

Puedes proceder a eliminar el tema estimado, Me doy cuenta que no podre dar solución a este problema. Mejor demos por no resuelto.

Ss.

Enlace a comentario
Compartir con otras webs

Hace 5 minutos , RandalHP dijo:

Puedes proceder a eliminar el tema estimado, Me doy cuenta que no podre dar solución a este problema. Mejor demos por no resuelto.

Ss.

Estimado sin ánimos de molestar, pero lo mismo pasaría si llamo al mecánico para que repare mi auto y no se lo lleve al taller

Quien busca ayuda, debe seguir algunas instrucciones para que se resuelva el problema, el que ayuda no debe esforzarse mas de la cuenta

 

Saludos

Enlace a comentario
Compartir con otras webs

Archivado

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

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

    • Hi Trate de ver que hacían las fórmulas en cuestión pero a su libro le falta o le faltan hojas, por lo que solo podría participar con un par de ideas en general. Lo que entiendo es que según el valor de B3 en C3 debe poner una fórmula u otra, así que es posible que si combina DIRECCION() con INDIRECTO() pueda intercambiar de una fórmula a otra. =SI(B3="Xl",INDIRECTO(DIRECCION(3,5)),SI(O(B3=1,B3=2,B3=3),INDIRECTO(DIRECCION(4,5)),"")) Otra forma sería poner nombre a esas fórmulas en el cuadro de nombres para que las pueda mandar llamar a una o a la otra según el resultado de B3. Por favor tome en cuenta, es solo una idea.
    • Buenas tardes! Tengo el siguiente código: Private Sub btnCargaBancos_Click() Dim TasaCompra, TasaVenta As Double Dim InvBanesco, InvVzla, MontoBanesco, MontoVzla As Double Dim TasaDiaBan, TasaDiaVzla, TasaActual As Double 'Inversion = Val(txtInversion.Text) InvBanesco = Val(CDbl(txtInverBanesco.Text)) InvVzla = Val(CDbl(txtInverVzla.Text)) TasaCompra = Val(CDbl(txtTasaCompra.Text)) TasaVenta = Val(CDbl(txtTasaVenta.Text)) 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 MontoBanesco = FormatNumber(MontoBanesco, 2, True, vbFalse) MontoVzla = FormatNumber(MontoVzla, 2, True, vbFalse) TasaActual = FormatNumber(TasaActual, 5, True, False) txtBcoBanesco.Value = MontoBanesco txtBcoVenezuela.Value = MontoVzla txtTasaDiaria.Value = TasaActual End Sub   Como se puede apreciar InvBanesco ,  InvVzla , TasaCompra y TasaVenta, son valores que introduce el usuario a través de los respectivos cuadros de texto. Tengo los siguientes problemas: a. Las fórmulas no se ejecutan correctamente (pareciese que no reconociese los números entrados vía cuadros de texto). b. Al darle valor cero (0) a cualquiera de los valores de InvBanesco o  InvVzla, me genera un error en TasaDiaBan o TasaDiaVzla (según sea el caso), aunque, como se puede apreciar, debería generar un valor cero (0). Como dije en mi presentación estoy empezando en esto de la codificación...y quiero aprender de Uds! Agradezco su ayuda! Nota: lamentablemente el fichero es mas grande de lo permitido y no pude anexarlo.  
    • Hola buenas tardes. En una hoja plantilla donde realizo diferentes consultas de datos. tengo ya establecido dos formulas diferentes con función SI y buscar. estos buscan diferentes rangos de datos y recibendiferentes resultados. Cada formula varia según una palabra o numero  ejemplo si pongo Xl pone la formula 1 y si pongo cualquier numero entre 1 y 3 pone la segunda formula. Lo que necesito hacer es que si en una celda de la columna B3 pongo XL debería de considerar la formula 1 y si pusiera el numero 1 me pondría la segunda formula, dentro de la misma formula. Ya agregue la función SI($C3="Xl",Formula1.. Pero no me funciona, espero me puedan ayudar.   Muchas gracias Mariano   Formula doble si en celda existe.xlsx
    • Sub control2558() Application.ScreenUpdating = False Dim I As Integer I = 4 While Sheets("FT-ADF-2558").Cells(I, 102) <> "" Sheets("FT-ADF-2558").Cells(6, 82) = Sheets("FT-ADF-2558").Cells(I, 102) Dim NombreArchivo, RutaArchivo As String NombreArchivo = "Hoja Control " & Sheets("FT-ADF-2558").Cells(I, 102) RutaArchivo = ActiveWorkbook.Path & "\" & NombreArchivo & ".xlsm" Dim NuevoLibro As Workbook Set NuevoLibro = Workbooks.Add Sheets("FT-ADF-2558").Copy Before:=NuevoLibro.Sheets(1) NuevoLibro.SaveAs Filename:=RutaArchivo NuevoLibro.Close I = I + 1 Wend MsgBox ("Proceso generado con éxito") Application.ScreenUpdating = True End Sub  
    • Ese error es porque no existe la hoja 10 con ese nombre, entonces cámbialo por FT-ADF-2558
  • 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.