Como cierro una ventana.

Hola, la verdad tengo 2 preguntas, la primera es como hago para cerrar una ventana sin finalizar todo el programa, utilice el end pero me saca del programa, y la segunda pregunta es: Como hago para guardar un archivo pero que el mismo me lo guarde con un numero y que nunca me lo guarde con el mismo numero osea que si guardo un archivo 10 veces se guarden del 1 al 10, espero me puedan ayudar y así mismo poder abrirlo en el momento del mismo que se guardo.. Por favor.. Adjunto un ejemplo: Tengo una pantalla donde tomo un pedido y lo guardo, luego abro el archivo en otra pantallita donde es para imprimirlo apensa se abre se trasladan los valores y lo imprimo al imprimir automáticamente me manda a la pantalla donde tomo el pedido. Con base en esto son mis preguntas por favor.. Espero me puedan ayudar.. Gracias..
1

1 respuesta

1
Respuesta de
Hola Diegogt83, si te entiendo bien lo que quieres es cerrar un formulario activo sin abandonar el programa... si es así, puedes utilizar tan solo el comando:
Unload Me
Que libera únicamente el formulario abierto.
En cuanto al nombre de los archivos, tendrías que incluir un ciclo repetitivo (Do while o For) en el cual incluyes un contador que va incrementándose en uno cada vez que se nombre un archivo... el archivo lo nombras con el valor de esa variable...
Espero ser de ayuda, pues no pude ver el ejemplo que remitiste!
Cualquier duda me comentas.
Andriu25
Hola Andriu, muchas gracias por lo del unload me.. me funciono al pelo.. era justo lo que quería.. gracias, pero lo que si no tengo como muy claro es la forma que me das para poder guardar el archivo con un nombre automáticamente y que no se repita. Y poder abrir automáticamente ese ultimo archivo que se guardo. Mira te muestro el código que utilizo para poder abrir y guardar un archivo. Así lo guardo :
Private Sub Guardar_Click()
'nota: todo el archivo se almacenará como una única cadena
CommonDialog1.Filter = "Archivos de texto (*.TXT)|*.TXT"
CommonDialog1.ShowSave 'muestra el cuadro de diálogo Guardar
If CommonDialog1.FileName <> "" Then
Open CommonDialog1.FileName For Output As #1
Print #1, " "; Text1.Text
Close #1 'cerrar archivo
End If
End Sub
Y asi lo abro:
Private Sub Abrir_Click()
Text1.Text = txtArchivo.Text
Salto$ = Chr$(13) + Chr$(10) 'crea un carácter salto de línea
CommonDialog1.Filter = "Archivos de texto (*.TXT)|*.TXT"
CommonDialog1.ShowOpen 'muestra el cuadro de diálogo Abrir
'Este file abre el archivo sin abrir la pantalla de dialogo.. solo con la ubicacion que se le dice abre el archivo
'CommonDialog1.FileName = App.Path & "/nuevo.TXT"
If CommonDialog1.FileName <> "" Then
'Form1.MousePointer = 11 'muestra un reloj de arena
Open CommonDialog1.FileName For Input As #1
'On Error GoTo MuyGrande: 'define el manejador de error
Do While Not EOF(1) 'lee líneas del archivo
Line Input #1, LíneaDeTexto$
TodoElTexto$ = TodoElTexto$ & LíneaDeTexto$ & Salto$
Loop
txtArchivo.Text = TodoElTexto$ 'muestra archivo
Text1.Text = LíneaDeTexto$
txtArchivo.Enabled = True
'calcula el número de líneas existente en el objeto cuadro de texto(txtNote)
lineCount% = 0 'esta variable almacena el número total de líneas
charsInFile% = Len(txtArchivo.Text) 'obtiene el número total de caracteres contenidos en el cuadro
For i% = 1 To charsInFile% 'desplaza un carácter en el cuadro
letter$ = Mid(txtArchivo.Text, i%, 1) 'introduce el siguiente carácter en letter$
If letter$ = Chr$(13) Then 'si se encuentra un retorno de carro (¡final de la línea!)
lineCount% = lineCount% + 1 'va a la línea siguiente (añade al contador)
i% = i% + 1 'pasa el carácter de alimentación de línea (que siempre sigue a un r. de c.)
End If
Next i%
'crea un array para almacenar el texto contenido en el cuadro
ReDim strArray$(lineCount%) 'crea un array del tamaño adecuado
curline% = 1
ln$ = "" 'utiliza ln$ para construir líneas de un único carácter
For i% = 1 To charsInFile% 'hace un bucle por todo el texto
letter$ = Mid(txtArchivo.Text, i%, 1)
If letter$ = Chr$(13) Then 'si encuentra un retorno de carro
curline% = curline% + 1 'incrementa el contador de línea
i% = i% + 1 'salta el carácter de alimentación de línea
ln$ = "" 'borra la línea y salta a la siguiente
Else
ln$ = ln$ & letter$ 'añade una letra a la línea
strArray$(curline%) = ln$ 'y la introduce en el array
End If
Next i%
Text1.Text = strArray$(1)
Abrir.Enabled = True 'activa desplazamiento
Reiniciar:
'Form1.MousePointer = 0 'redefine el ratón
Close #1 'cierra el archivo
End If
Exit Sub
MuyGrande: 'el manejador de error muestra un mensaje
MsgBox ("El archivo especificado es demasiado largo.")
Resume Reiniciar: 'salta a la rutina Reiniciar
End Sub
Espero me puedas ayudar.. y decirme donde debo incluir la rutina y como debo hacerlo. Gracias..
A ver si te entiendo bien...
Al mirar tu código percibo que abres o salvas un archivo con un nombre XXXX usando tus CommonDialog1 y posteriormente puedes cerrar tu aplicación.
¿Lo qué quieres es que la aplicación los renombre automáticamente cada vez que la ejecute, sin dañar el archivo ya existente?
Es decir, ¿continuar con la misma rutina que se viene haciendo pero salvando y/o abriendo con un nombre automático y si el uso de los CommonDialog1?
Hola Andriu, gracias por la ayuda, si lo que quiero es que la aplicación nombre los archivos automaicamente cada ves que yo termine el proceso y que abra el ultimo archivo que se guardo, y que vuelva y guarde pero que no me renombre los archivos existentes, "se pudiera guardar como con la fecha y al lado algún numero o algo así?", en la ultima parte donde dices algo del commondialog1 no entiendo que me quieres decir.. espero me puedas ayudar.. muchas gracias.. ¿creo qué dices que puedo utilizar otra forma que no sea el commondialog? me podrías explicar por favor.. gracias.
En efecto, lo que te digo es crear archivos o abrirlos sin necesidad de los CommondDialog
Por ejemplo, lo que me decías de crearlo con la fecha sería más o menos así:
Ejemplo: Utilizando un botón command1 voy a crear un archivo de texto, yo lo hago utilizando una referencia a manejo de archivos EOF que se activa con la librería SCRRUN.DLL, entrando por activación de referencias, examinar e incluyendo la librería.
Igual tu puedes seguir manejándolo como lo haces normalmente, lo importante en verdad es como le agregas la fecha al nombre del archivo.
La fecha del sistema normalmente se encuentra en la variable DATE, con base a tal variable yo creo una variable nueva de string, con la cual construyo una cadena que contiene la fecha en formato AAAAMMDD y al darle nombre al archivo, le incluyo el valor de dicha variable. Para abrirlo se haría más o menos del mismo modo.
Si quieres incluye la librería que ti dije en un proyecto nuevo, créale un botón command1 e ingresa el siguiente código y miras su efecto para ver si te sirve en tu proyecto:
Private Sub Command1_Click()
Dim fso As New FileSystemObject, fil As File, ts As TextStream
Dim Fecha As String
Set fso = CreateObject("Scripting.FileSystemObject")
Fecha = Mid(Date, 7, 4) + Mid(Date, 4, 2) + Mid(Date, 1, 2)
fso.CreateTextFile ("D:\prueba2_" + Fecha + ".txt")
Set fil = fso.GetFile("D:\prueba2_" + Fecha + ".txt")
Set ts = fil.OpenAsTextStream(ForWriting)
End Sub
Espero que te sirva.
Andriu25
Hola, en el anterior mensaje te dije "manejo de archivos EOF" y quise decir "Manejo de archivos FSO", disculpame la pifia, tenia en la cabeza otra pregunta de bases de datos que había respondido. Espero que te sirva igual lo que te dije.
Hola Andriu, si man gracias.. yo la busque por el dll y la encontré, gracias, muy bueno el ejemplo que me envías muchas gracias y la verdad no tenia idea que eso existía, pero la verdad el ejemplo que me envías no hace lo que yo quiero o pueda que lo haga pero no se como adicionarlo, yo le digo al archivo que lea las linea y se ubique en una posición y me lo guarde así como esta en el ejemplo que te envíe anteriormente y estuve mirando como agregar eso con lo que me envías pero no pude puedes ayudarme, ¿por favor? Gracias. O alguna otra opción que me puedas dar.. por favor..
Hola de nuevo, el gran problema que tengo es que he puesto a correr tu código en mi PC y lo único que aprecio es que un botón me despliega el cuadro de dialogo para GUARDAR y el otro me despliega el de ABRIR, lo que significaría que en todo momento estaríamos interactuando con el usuario para indicar nombre del archivo que se desea abrir o con el que se desea guardar (acción que no sucede con el ejemplo que te envíe)...
Sin embargo, hay comentarios como:
"Este file abre el archivo sin abrir la pantalla de dialogo"
Lo cual no he logrado apreciar en que momento lo aplicas... mejor dicho no he podido decirte donde aplicar el ejemplo que te envíe debido a que por más vueltas que le doy a tu código, no logro entender como funciona tu aplicación!
I'm sorry
Hola andriu, que pena todo el rollo.. ¿tienes algún mail mejor donde pueda enviar como una imagen y así tengas mejor una idea de lo que hago? Para poder aclarar mejor mi duda. Te agradezco. Gracias.
Ahí te lo envío! andresjimenezgomez@yahoo.com
Hola andriu, ya hace varios días te envíe al mail unas imágenes de lo que quiero bien, espero me puedas ayudar.. gracias..
Que pena la demora!
Hola diegogt83, que pena haberte tenido tan descuidado pero había estado algo corto de tiempo... Estuve mirando el correo e imágenes que me enviaste, así como el código que me habías remitido... entonces, lo que hice fue mezclar lo que te había dicho a mi modo y el código que estás utiliazando de la siguiente manera:
Primero activa referencia al dll scrrun.dll ingresando por (Proyecto-Referencias-Examinar).
Posteriormente revisa el código que te envío correspondiente a la variación del código de guardar que me habías enviado, pero que incluye una asignación de nombres automática en la ruta D: (esa ruta la puedes cambiar a tu antojo)... Tal asignación se está haciendo como la querías ya que incluye el nombre Ventas seguido de un consecutivo de archivo y de la fecha del sistema (Por ejemplo Ventas_1_20080704 y al siguiente lo deja como Ventas_2_20080704, si cambia de fecha inicia nuevamente desde 1):
Private Sub guar_Click()
Dim FechaFile, NameFile As String
Dim Contador As Integer
Dim Verifica As New FileSystemObject, Verifica1
FechaFile = Mid(Date, 7, 4) + Mid(Date, 4, 2) + Mid(Date, 1, 2)
Contador = 1
NameFile = "D:\Ventas_" + Str(Contador) + "_" + FechaFile + ".txt"
Do While Verifica.FileExists(NameFile) = True
Contador = Contador + 1
NameFile = "D:\Ventas_" + Str(Contador) + "_" + FechaFile + ".txt"
Loop
CommonDialog1.Filter = "Archivos de texto (*.TXT)|*.TXT"
CommonDialog1.FileName = NameFile
If CommonDialog1.FileName <> "" Then
Open CommonDialog1.FileName For Output As #1
Print #1, " "; Text1.Text
Close #1
End If
End Sub
Espero que te sirva!
Andriu25
Hola andriu, muy tenaz de buena tu respuesta.. era exactamente lo que quiera.. fue muy bueno.. muchas gracias, pero ahora tengo una pequeña duda, ¿la forma para yo poder abrir el archivo seria como? Ya que quiero que me abra el ultimo archivo que se guardo, osea como por modificado puede ser. O como me puedes ayudar.. espero me ayudes.. gracias.
Hola Diegogt83, la variación es mínima... ahí te va el código que tenías en tu botón abrir, incluyendo los cambios que serían necesarios (Suponiendo que abres archivos de la fecha del sistema):
Private Sub abrir_Click()
Text1.Text = TXTARCHIVO.Text
Salto$ = Chr$(13) + Chr$(10) 'crea un carácter salto de línea
Dim FechaFile, NameFile As String
Dim Contador As Integer
Dim Verifica As New FileSystemObject, Verifica1
FechaFile = Mid(Date, 7, 4) + Mid(Date, 4, 2) + Mid(Date, 1, 2)
Contador = 1
NameFile = "D:\Ventas_" + Str(Contador) + "_" + FechaFile + ".txt"
Do While Verifica.FileExists(NameFile) = True
Contador = Contador + 1
NameFile = "D:\Ventas_" + Str(Contador) + "_" + FechaFile + ".txt"
Loop
NameFile = "D:\Ventas_" + Str(Contador - 1) + "_" + FechaFile + ".txt"
CommonDialog1.Filter = "Archivos de texto (*.TXT)|*.TXT"
CommonDialog1.FileName = NameFile 'muestra el cuadro de diálogo Abrir
'Este file abre el archivo sin abrir la pantalla de dialogo.. solo con la ubicacion que se le dice abre el archivo
'CommonDialog1.FileName = App.Path & "/nuevo.TXT"
If CommonDialog1.FileName <> "" Then
'Form1.MousePointer = 11 'muestra un reloj de arena
Open CommonDialog1.FileName For Input As #1
'On Error GoTo MuyGrande: 'define el manejador de error
Do While Not EOF(1) 'lee líneas del archivo
Line Input #1, LíneaDeTexto$
TodoElTexto$ = TodoElTexto$ & LíneaDeTexto$ & Salto$
Loop
TXTARCHIVO.Text = TodoElTexto$ 'muestra archivo
Text1.Text = LíneaDeTexto$
TXTARCHIVO.Enabled = True
'calcula el número de líneas existente en el objeto cuadro de texto(txtNote)
lineCount% = 0 'esta variable almacena el número total de líneas
charsInFile% = Len(TXTARCHIVO.Text) 'obtiene el número total de caracteres contenidos en el cuadro
For i% = 1 To charsInFile% 'desplaza un carácter en el cuadro
letter$ = Mid(TXTARCHIVO.Text, i%, 1) 'introduce el siguiente carácter en letter$
If letter$ = Chr$(13) Then 'si se encuentra un retorno de carro (¡final de la línea!)
lineCount% = lineCount% + 1 'va a la línea siguiente (añade al contador)
i% = i% + 1 'pasa el carácter de alimentación de línea (que siempre sigue a un r. de c.)
End If
Next i%
'crea un array para almacenar el texto contenido en el cuadro
ReDim strArray$(lineCount%) 'crea un array del tamaño adecuado
curline% = 1
ln$ = "" 'utiliza ln$ para construir líneas de un único carácter
For i% = 1 To charsInFile% 'hace un bucle por todo el texto
letter$ = Mid(TXTARCHIVO.Text, i%, 1)
If letter$ = Chr$(13) Then 'si encuentra un retorno de carro
curline% = curline% + 1 'incrementa el contador de línea
i% = i% + 1 'salta el carácter de alimentación de línea
ln$ = "" 'borra la línea y salta a la siguiente
Else
ln$ = ln$ & letter$ 'añade una letra a la línea
strArray$(curline%) = ln$ 'y la introduce en el array
End If
Next i%
Text1.Text = strArray$(1)
ABRIR.Enabled = True 'activa desplazamiento
Reiniciar:
'Form1.MousePointer = 0 'redefine el ratón
Close #1 'cierra el archivo
End If
Exit Sub
MuyGrande: 'el manejador de error muestra un mensaje
MsgBox ("El archivo especificado es demasiado largo.")
Resume Reiniciar: 'salta a la rutina Reiniciar
End Sub
Saludos,
Andriu25
Hola andriu.. muy excelente amigo.. muchas gracias.. fue muy genial.. era lo que quería... muchas gracias.. ahora tengo una pequeña duda.. lo que quiero hacer y no he podido es coger los datos que que tengo en un list1 y sumarlos y el resultado ponerlo en un label o en un text, los datos llegan automáticamente como se toman los pedidos y se van colocnado hacia abajo en el list, lo que quiero es que en el label o en el text se coloque automáticamente la suma como vayan llegando los datos al list, estuve intentando de una forma pero no pude.. me puedes ayudar por favor.. muchas gracias.
Ok, los más fácil es que en el mismo procedimiento donde cargas los datos del list, realices tal sumatoria.
Si quieres me envías ese procedimiento y lo miramos.
Hola andriu.. que pena pero la verdad el trabajo me ha tenido super ocupado y mientras tanto me ocupe de hacerle otras cosas adicionales.. mira te acuerdas que yo cargo en una página inicial el pedido verdad.. y de ahí cada ves que hago una venta los datos se trasladan automáticamente para otra pantallita donde hay un list1 que es el que me dice cuantos clientes fueron y en un list2 están los valores de las ventas para tener el total de venta diario. Lo que quiero es sumar los valores de el list2 pero automáticamente tengo este código que encontré pero no me funciona. O más bien no se como manejarlo en mi caso.. espero me puedas ayudar.. gracias.
Dim IndiceLis As Integer
Dim VTotal As Double
Private Sub Label4_Change()
VTotal = 0
If List2.ListCount < 1 Then Exit Sub
For IndiceLis = 0 To List2.ListCount - 1
VTotal = VTotal + Val(List2.List(IndiceLis))
Next IndiceLis
Label4 = VTotal
End Sub
o asi :
Dim IndiceLis As Integer
Dim VTotal As Double
VTotal = 0
If List2.ListCount < 1 Then Exit Sub
For IndiceLis = 0 To List2.ListCount - 1
VTotal = VTotal + Val(List2.List(IndiceLis))
Next IndiceLis
Label4 = VTotal
Gracias.. andriu
El único error que tienes es que en la asignación del Label debes colocar la propiedad caption, es decir:
Label4.Caption = VTotal
Lo demás funciona perfectamente.
Andriu25
Hola andriu, muchas gracias por toda tu ayuda .. me fue muy útil todo lo que me enseñaste, pero tengo una ultima duda con respecto a lo ultimo, ¿todo funciona bien y todo pero como hago para que la suma se haga sin necesidad de tener que hacer click en la pantalla? Ya que con el changue no me funciono. Y me toco ponerle Label4_click. Para que me aparezca el total de todos los datos que hay en el list2, gracias y espero me puedas ayudar, otra pregunta, como hago para instalar el crystal report en mi pc para que funcione con mi visual 6.0, espero me puedas ayudar, gracias.
Me fue de mucha ayuda.. muchas gracias, pero al final me quede esperando una respuesta, tal ves no sabia al respecto, pero me fue de mucha ayuda muchas gracias.
Añade un comentario a esta respuesta
Añade tu respuesta
Haz clic para o
Escribe tu mensaje

Más respuestas relacionadas

¿No es la pregunta que estabas buscando?
Puedes explorar otras preguntas del tema Visual Basic o hacer tu propia pregunta: