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 de santiagomf
1
1
santiagomf, Más de 35 años en la informática y más de 20 trabajando con...
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.