Crear archivo de texto de un rango de celdas

Quiero extraer los datos de un rango de celdas y generar un archivo de texto el problema es como reconocer el principio del rango y sobre todo el final ya que en ocasiones serán 10 celdas o 15 no lo sé o no se sabe, muchas gracias.

1 Respuesta

Respuesta
1
Puedes usar las propiedades del rango 'Columns. Count' y 'Rows. Count'.
El resto, ya lo sabrás:
Option Explicit
Sub generarFicheroTexto(ByRef rangoDatos As Range)
    Dim nFil As Integer
    Dim nCol As Integer
    ' ...
    ' ...
    ' ...
    For nFil = 1 To rangoDatos.Rows.Count
        For nCol = 1 To rangoDatos.Columns.Count
            ' ...
            ' ...
            ' ...
        Next nCol
    Next nFil
    ' ...
    ' ...
    ' ...
End Sub
Tengo muy poco programando así es que no tengo muchos ejemplos para poder sacar todo el código me gustaría que me pudiera ayudar, muchas gracias!
Escribe este código en el editor de Visual Basic (<Alt><F11>).
Option Explicit
Sub pruebaExportarDatos()
    generarFicheroTexto ActiveSheet.Range("B2:H4")
End Sub
Private Sub generarFicheroTexto(ByRef rangoDatos As Range)
    Dim nFil As Integer
    Dim nCol As Integer
    Dim nf As Integer
    ' Abrimos el fichero de texto de salida
    nf = FreeFile
    Open ThisWorkbook.Path & "\datosExportados.txt" For Output As nf
    For nFil = 1 To rangoDatos.Rows.Count
        For nCol = 1 To rangoDatos.Columns.Count
            If rangoDatos.Cells(nFil, nCol) <> "" Then
                Print #nf, rangoDatos.Cells(nFil, nCol)
            End If
        Next nCol
    Next nFil
    Close nf
End Sub
Gracias por la ayuda pero no realiza nada, yo tengo esta programación y lo que hace es guardarme toda la información de la hoja, y lo único que yo quiero es una un rango de celdas pero idefinido podrían ser 2, o 5 o 10 no dependiendo de lo que se haga, se lo envío por favor ayúdeme muchas gracias.
'
Public Function RangoLista( _
      Optional ByVal Celda As Range = Nothing) As Range
  Dim rng As Range
  If Celda Is Nothing Then Set Celda = ActiveCell
  Set Celda = Celda.CurrentRegion.Cells(1)
  Set rng = Celda.Parent.Range(Celda, Celda.Offset( _
        Celda.CurrentRegion.Rows.Count - 1, _
          Celda.CurrentRegion.Columns.Count - 1))
  If Not rng Is Nothing Then Set RangoLista = rng
  Set Celda = Nothing: Set rng = Nothing
End Function
Public Function NombreConRuta( _
        Optional NombreL As String = "") As String
  Dim nL As Variant
inicio:
  If NombreL = "" Then
    NombreL = ActiveSheet.Name
  Else
    If InStr(NombreL, "\") > 0 Then NombreL = Right(NombreL, _
            Len(NombreL) - InStrRev(NombreL, "\"))
    If InStr(NombreL, ".") > 0 Then NombreL = Left(NombreL, _
            InStr(NombreL, ".") - 1)
  End If
  nL = Application.GetSaveAsFilename(NombreL, _
            "Archivos de texto (*.txt), *.txt")
  If nL = False Or nL = "" Then Exit Function
  If Dir(nL) <> "" Then
    MsgBox "El nombre seleccionado ya existe."
    GoTo inicio
  End If
  NombreConRuta = CStr(nL)
End Function
Sub CrearTxtConRango(NombreArchivo As String, Rango As Range)
  With Workbooks.Add
    Rango.Copy
    .Worksheets(1).Range("a1").PasteSpecial xlPasteValues
    .SaveAs Filename:=NombreArchivo, FileFormat:=xlCurrentPlatformText
    .Close False
  End With
End Sub
Sub testCrearTxtConRango()
  Dim nombre As String, r As Range
  Application.ScreenUpdating = False
  nombre = NombreConRuta
  If nombre = "" Then MsgBox "El proceso ha sido " & _
        "cancelado por el usuario.": Exit Sub
  Set r = RangoLista
  If Not r Is Nothing Then
    CrearTxtConRango nombre, r
    Set r = Nothing
  Else
    MsgBox "El rango no es valido"
  End If
End Sub
Lo que se me ocurre que puedes hacer es que, en lugar de copiarte toda la página al nuevo libro de texto, te copies los datos que estén seleccionados de la página.
Esto implicaría que se enviarían al fichero de texto sólo el rango de celdas que tengas marcado en ese momento.
Piensa que en algún momento tienes que indicar cual es el rango de celdas que vas a exportar.
Puedes hacerlo asumiendo por defecto el rango seleccionado o bien leyendo por pantalla la fila/columna inicial y final.
No se me ocurre mucho más.
No me has comentado si te sirvión la solución planteada.
Si no tienes más dudas sobre este tema, por favor cierra la pregunta para que no aparezca entre las pendientes.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas