Excel - Como mejorar programa

 
Vista:

Como mejorar programa

Publicado por Richard (43 intervenciones) el 16/03/2008 23:15:23
He hecho un programa que lo veo muy poco sofisticado que lee los datos de la "hoja1" y luego los escribe linea por linea en un archivo de texto ("datos.txt).
Como puedo mejorar este programa? Se podrá utilizar un for ,,, next definiendo las variables prod, cant, valr como prod(i), cant(i),valr(i) y que escriba los datos en el archivo de texto conservando la escritura de linea por linea?
Este es el programa:

Sub guardatos1()
Dim a(1000, 100)
Worksheets("Hoja1").Select
nfact = Range("b3").Value
Open "d:datos.txt" For Output As 1
For i = 1 To nfact + 2
nitems = Cells(i + 1, 1)
fact = Cells(i + 1, 2)
valort = Cells(i + 1, 3)
stat = Cells(i + 1, 4)
mesa = Cells(i + 1, 5)
mesero = Cells(i + 1, 6)
cliente = Cells(i + 1, 7)
fechin = Cells(i + 1, 8)
fechfin = Cells(i + 1, 9)
prod1 = Cells(i + 1, 10)
cant1 = Cells(i + 1, 11)
valr1 = Cells(i + 1, 12)
prod2 = Cells(i + 1, 13)
cant2 = Cells(i + 1, 14)
valr2 = Cells(i + 1, 15)
prod3 = Cells(i + 1, 16)
cant3 = Cells(i + 1, 17)
valr3 = Cells(i + 1, 18)
prod4 = Cells(i + 1, 19)
cant4 = Cells(i + 1, 20)
valr4 = Cells(i + 1, 21)
prod5 = Cells(i + 1, 22)
cant5 = Cells(i + 1, 23)
valr5 = Cells(i + 1, 24)
prod6 = Cells(i + 1, 25)
cant6 = Cells(i + 1, 26)
valr6 = Cells(i + 1, 27)
prod7 = Cells(i + 1, 28)
cant7 = Cells(i + 1, 29)
valr7 = Cells(i + 1, 30)
prod8 = Cells(i + 1, 31)
cant8 = Cells(i + 1, 32)
valr8 = Cells(i + 1, 33)
prod9 = Cells(i + 1, 34)
cant9 = Cells(i + 1, 35)
valr9 = Cells(i + 1, 36)
prod10 = Cells(i + 1, 37)
cant10 = Cells(i + 1, 38)
valr10 = Cells(i + 1, 39)
prod11 = Cells(i + 1, 40)
cant11 = Cells(i + 1, 41)
valr11 = Cells(i + 1, 42)
prod12 = Cells(i + 1, 43)
cant12 = Cells(i + 1, 44)
valr12 = Cells(i + 1, 45)
prod13 = Cells(i + 1, 46)
cant13 = Cells(i + 1, 47)
valr13 = Cells(i + 1, 48)
prod14 = Cells(i + 1, 49)
cant14 = Cells(i + 1, 50)
valr14 = Cells(i + 1, 51)
prod15 = Cells(i + 1, 52)
cant15 = Cells(i + 1, 53)
valr15 = Cells(i + 1, 54)
prod16 = Cells(i + 1, 55)
cant16 = Cells(i + 1, 56)
valr16 = Cells(i + 1, 57)
prod17 = Cells(i + 1, 58)
cant17 = Cells(i + 1, 59)
valr17 = Cells(i + 1, 60)
prod18 = Cells(i + 1, 61)
cant18 = Cells(i + 1, 62)
valr18 = Cells(i + 1, 63)
prod19 = Cells(i + 1, 64)
cant19 = Cells(i + 1, 65)
valr19 = Cells(i + 1, 66)
prod20 = Cells(i + 1, 67)
cant20 = Cells(i + 1, 68)
valr20 = Cells(i + 1, 69)
Write #1, nitems, fact, valort, stat, mesa, mesero, cliente, fechin, fechfin, prod1, cant1, valr1, prod2, cant2, valr2, prod3, cant3, valr3, prod4, cant4, valr4, prod5, cant5, valr5, prod6, cant6, valr6, prod7, cant7, valr7, prod8, cant8, valr8, prod9, cant9, valr9, prod10, cant10, valr10, prod11, cant11, valr11, prod12, cant12, valr12, prod13, cant13, valr13, prod14, cant14, valr14, prod15, cant15, valr15, prod16, cant16, valr16, prod17, cant17, valr17, prod18, cant18, valr18, prod19, cant19, valr19, prod20, cant20, valr20
Next i
Close #1
End Sub

Agradezco cualquier ayuda.

Richard desde Colombia
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:Como mejorar programa

Publicado por JuanC (792 intervenciones) el 16/03/2008 23:48:18
fijate si algo así funciona...

Sub guardatos1()
Dim hFile%, i%, j%, sTmp$
Worksheets("Hoja1").Select
nfact = Range("b3").Value
hFile = FreeFile
Open "d:datos.txt" For Output As hFile
For i = 1 To nfact + 2
For j = 1 To 69
sTmp = sTmp & Cells(i + 1, j)
Next j
Write #hFile, sTmp
sTmp = ""
Next i
Close #hFile
End Sub

Saludos desde Baires, JuanC
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:Como mejorar programa

Publicado por Richard (43 intervenciones) el 17/03/2008 03:27:37
Gracia JuanC otra vez. Es muy interesante lo que me sugieres. Escribe en un solo texto la concatenacion de todos los valores de la linea. O sea que efectivamente recoge toda la informacion necesaria de cada archivo produciendo una cadena de texto concatenando todos los registros(valores de celdas de excel). Pero no queda registrado la longitud de cada registro.
Ésta es una fila de la hoja de excel:
1 8 36.000 Close 9 Mario pepe 16/03/2008 17:22 16/03/2008 17:22 Churrasco 3 12.000
y lo escribe :
"1836000Close9Mariopepe16/03/2008 17:22:0816/03/2008 17:22:28Churrasco312000"

Creo que esto se puede solucionar guardando de alguna manera la longitud de cada valor de las celdas.....

O habrá otra mejor manera?
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:Como mejorar programa

Publicado por JuanC (792 intervenciones) el 17/03/2008 13:12:21
podés intercalar un Tab entre cada valor o cualquier otro signo

Saludos desde Baires, JuanC
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:Como mejorar programa

Publicado por Richard (43 intervenciones) el 17/03/2008 18:14:36
Eso es. Funcionó.

Gracias JuanC.
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