Visual Basic para Aplicaciones - Excel me tiene loco

Life is soft - evento anual de software empresarial
 
Vista:

Excel me tiene loco

Publicado por Moises (11 intervenciones) el 07/09/2005 20:39:07
tengo que generar un txt desde visual basic con tablas en excel.
la pregunta es como puedo insertar la primera linea de la primera tabla, abajo, la primera linea de la segunda tabla, luego la segunda linea de la primera tabla, abajo la segunda linea de la segunda tabla, y haci con todas las filas.
ejemplo:
primera linea, primera tabla.
primera linea, segunda tabla.
segunda linea, primera tabla.
segunda linea, segunda tabla.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Excel me tiene loco

Publicado por federico (91 intervenciones) el 08/09/2005 13:44:49
Lo estás programando en VBA del excel?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Excel me tiene loco

Publicado por Moises (1 intervención) el 09/09/2005 21:03:45
lo estoy progamando con las macros de excel y mas o menos he logrado esto,
el problema con este codigo es que solo toma la primera tbla.

Sub exportar()

Dim attachment As Object
fila_largos = 18
fila_formatos = 19

Const ForReading = 1, ForWriting = 2, ForAppending = 3
Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
Dim fs, f, ts, s
HOJA_ACTUAL = ActiveSheet.Name

Cells(2, 4) = Cells(2, 4) + 1

nombre_archivo = Sheets(HOJA_ACTUAL).Cells(11, 2)
CANTIDAD_FILAS = Sheets(HOJA_ACTUAL).Cells(1, 4)
CANTIDAD_COLUMNAS = Sheets(HOJA_ACTUAL).Cells(5, 4)
encabezado = Sheets(HOJA_ACTUAL).Cells(3, 4)
Set fs = CreateObject("Scripting.FileSystemObject")
fs.CreateTextFile nombre_archivo 'Crear un archivo
Set f = fs.GetFile(nombre_archivo)
Set ts = f.OpenAsTextStream(ForWriting, TristateUseDefault)
ts.Write encabezado + Chr(13)

For fila = 21 To CANTIDAD_FILAS + 83

cadena = ""

For COLUMNA = 1 To CANTIDAD_COLUMNAS
formato = Cells(fila_formatos, COLUMNA)
If Len(formato) > 0 Then
tema = Right(Space(Cells(fila_largos, COLUMNA)) + Format(Cells(fila, COLUMNA), formato), Cells(fila_largos, COLUMNA))
Else
tema = Left(LTrim(RTrim(Cells(fila, COLUMNA))) + Space(Cells(fila_largos, COLUMNA)), Cells(fila_largos, COLUMNA))

End If
cadena = cadena + tema
Next COLUMNA
cadena = Replace(cadena, Chr(10), " ")
cadena = Replace(cadena, Chr(13), " ")
cadena = cadena + Chr(13)

ts.Write cadena
Next fila
ts.Close



End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Excel me tiene loco

Publicado por Federico (91 intervenciones) el 13/09/2005 14:59:43
Aquí te paso un ejemplo que me parece que te puede ayudar

Yo situé las tablas en dos hojas diferentes la “taba 1” en la “hoja1” y la tabla 2 en la “hoja2”.

Mi idea es

No se si las tablas comienzan en el mismo número de fila o en distinto

Por lo que yo incorporaría una variable para tal efecto

Destino=1

fila_actual_hoja1= conecer_primera(“hoja1”)
fila_actual_hoja2= conecer_primera(“hoja2”)

While worksheet(“hoja1”).range(“A” & fila_actual_hoja1).value <> ”” or worksheet(“hoja2”).range(“A” & fila_actual_hoja2).value <>””
While worksheet(“hoja1”).range(“A” & fila_actual_hoja1).enterirow.select
Selection.copy
While worksheet(“hoja3”).range(“A” & destino).select
Selection.pastespecial Paste:=xlpastevalues,Operation:=xlpastespacialoperationnone
Destino=destino+1
fila_actual_hoja1= fila_actual_hoja1+1

While worksheet(“hoja2”).range(“A” & fila_actual_hoja2).enterirow.select
Selection.copy
While worksheet(“hoja3”).range(“A” & destino).select
Selection.pastespecial Paste:=xlpastevalues,Operation:=xlpastespacialoperationnone
Destino=destino+1
fila_actual_hoja1= fila_actual_hoja1+1
wend

luego para pasarlo a txt tenés que hacer los siguiente

en este punto yo grabaría el libro con un nombre nuevo y eliminaría las dos primeras hojas y dejaría nada más que las tres. En ese entonces grabaría el archivo como txt, esto es sino querés perder las hoja 1 y 2. sino eliminalas sin grabar antes el archivo con otro nombre para grabar en txt tenés que hacer

ActiveWorkbook.SaveAs Filename:=[nombre.txt], FileFormat:=xlTextWindows o xlUnicodeText o xlMSDOS

Private function conocer_primera( hoja as string) as long

Worksheet(hoja).range(“A1”).activate
While activecell.value <>””
Activecell.offset(1,0).activate
Wend
Conocer_primera=activecell.row
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar