• 💪 Demuestra tus super conocimientos de Excel 
    Ayúdanos a contestar estos temas sin respuesta

principiante

pssacolfa

New member
hola estoy desarrollando una planilla en este tiempo libre, voy dandome mañana con consejos y trucos del foro y de la red
pero a veces no encuentro algunas funciones .

si fuera posible, y hay alguien al que puedo enviarle mi pequeño proyecto por mail y las consultas para seguir desarrollandolo, y asi seguir aprendiendo tecnicas para lograr lo que quiero.

en este caso imagen 1.png

las dudas que tengo y que no puedo resolver: a continuacion:

1 - que en el esapcio para poner importe aparezca inicialmente el simbolo de moneda y el monto 0,00
2 - que al entrar en la casilla y escribir otro valor se borre el 0,00 pero se mantenga el simbolo de moneda

3 - que al apretar la barra en caja, se expanda la lista

4 - que el boton guardar no proceda a grabar si hay alguno de los 3 campos vacios , exceptuando observaciones que si puede quedar vacio
5- que aparezca un mensaje diciendo que casilla esta vacia

6 - que al grabar los datos en el formulario, aparezca mensaje de "los datos se ingresaron con exito" ok. y pregunte si quiere realizar otra operacion o salir..
de seguir, que los campos esten limpios
de salir ir al inicio


no copio aqui el codigo para que tengo hasta el momento no sea enngorroso pero lo puedo enviar por mail o copiarlo, si lo solictan, para que me enseñen que hago mal o me orienten un poco.

desde ya, muchas gracias
 

pssacolfa

New member
imagen 2.png

aqui es donde se van ingresando las cargas, en este caso una abajo de la otra

pero de ser posible tambien, estaria bueno que siempre se agreguen en la fila de arriba, la numero 2
 

pssacolfa

New member
aqui pongo el codigo que tengo en el formulario llamado frmcargapedidos

Private Sub UserForm_Initialize()
Txtdia.Locked = True
txthora.Locked = True
CommandButton4.Locked = True


Txtdia2.Locked = True

Cmb1.SetFocus

Dim rango, celda As Range
Set rango = Worksheets("DATOS").Range("I3:I20")

For Each celda In rango
Cmb1.AddItem celda.value
Next celda

Txtdia = Date
Txtdia.Locked = True
txthora = Format(Now, "hh:mm")
txthora.Locked = True

'txtimporte.Value = Format("$ #,##0.00")
'txtimporte.Text = Format(Val(TextBox1.Text), "$ 0.00")
'txtimporte.Value = Format("$ #,##0.00")
'txtimporte = Format(txtimporte, "$###,##")
End Sub

Private Sub txtimporte_Change()
Dim TextBox1oldValue As String

Dim Texto As Variant
Dim Caracter As Variant
Dim Largo As Integer
On Error Resume Next
Texto = Me.txtimporte.value
Largo = Len(Me.txtimporte.value)
For i = 1 To Largo
Caracter = Mid(Texto, i, 1)
If Caracter <> "" Then
If Caracter < Chr(48) Or Caracter > Chr(57) Then
Me.txtimporte.value = Replace(Texto, Caracter, "")
Else
End If
End If
Next i
On Error GoTo 0
Caracter = 0
Caracter1 = 0



End Sub
Private Sub BOTSALIR_Click()
Unload Me
End Sub
 

Héctor Miguel

Well-known member
aqui pongo el codigo que tengo en el formulario ...
para contestar cuestiones de las que NO se indica como (RE)construir un modelo de trabajo (+/- exactamente) "igual al tuyo"...
conviene que adjuntes (una copia de) TU modelo (en excel)
copia que puede ser recortada (y hasta inventada) solo procura que sea "fiel" de la situación a resolver
esto debido a que lo que expones en la consulta (con todo e imagen) no es suficiente para adivinar (y acertar) el arreglo y tipo de tus datos (?)

un consejo: (p.ej.)
según el número de controles TextBox, (algunas veces es) mejor no cambiar el nombre (como haces con "txthora", "txtimporte", etc.)
lo que si es recomendable es que (en diseño) los insertes en el userform en el orden de captura y devolución de los datos de origen y destino
 

pssacolfa

New member
gracias por el consejo, me di cuenta a medida que lo armaba que debia tener una logica mas facil pero en este caso ya habia arrancado, pero lo tengo en cuenta. aqui adjunto el archivo..

acabo de agregar un n° de operaciones, que logre que se actualice, pero recien veo que si no hay ningun valor, da un error, por eso el archivo puse el numero 1 para que lo tome como inicial.

gracias
 

Adjuntos

Héctor Miguel

Well-known member
acabo de agregar un n° de operaciones, que logre que se actualice, pero recien veo que si no hay ningun valor, da un error, por eso el archivo puse el numero 1 para que lo tome como inicial
hay formas de solucionar "esto" (y aquello), el detalle está en que...
(me temo que) para que recibas ayuda va a resultar un pelín más difícil de lo esperado, p.ej.

1) cómo (RE)construir algunos objetos que eliminaste ?
- al menos las hojas llamadas: "planiprecios", "precios", "planipedidos", "graficos"
- el nombre definido "compradores" hace referencia a celdas que no tienen datos en la hoja "inicio"
- había otros nombres con referencias perdidas (supongo que de las hojas que eliminaste ?)

a menos que requieras ayuda SOLO para el formulario "frmcargapedidos" ?
- en este caso, considera que NO existen datos "previos" para la carga del formulario (?)

2) sería bueno si comentas:
- "qué" es lo que intentas adaptar del sitio de Sergio A. Campos (EXCELeINFO)
- el uso que pretendes hacer del módulo de clase "Clase1"
- algún otro detalle "en el tintero" ?
 
Última edición:

pssacolfa

New member
1) empece con una hoja que habia hecho hace años, por eso que estan esas referencias que no van a ningun lado,
YA ORDENE lo mas que pude..

2)no se cual es eso que dices de Sergio A.Campos, quizas era algo viejo, pero que ahora no veo que este,
borre las clases y los modulos, fueron pruebas que venia haciendo pero que no me funcionan bien, aun no lo entiendo como funciona,

mil disculpas por los errores, y gracias por indicarme. espero ahora se entienda mas,
 

Adjuntos

Cacho R

Well-known member
Hola! pssacolfa. ¡Está claro!...
Así que para ir "calentando motores" te adjunto un archivo. Nota que:
  • En Opciones tienes: Agregar, Modificar y Eliminar.
  • Si en Nº de Operación escribes 1, 12 o 123 obtendrás los datos asociados a esas operaciones (existentes).
  • Cualquier otro número "te limpia" el Userform y se dispone a que hagas "otra cosa".
  • Al Agregar o Modificar se verifica la integridad de los campos.
  • Particularmente nota que si entras al campo Importe verás el valor "sin símbolo de moneda ni separador de miles" (eso es lo correcto). Sin embargo, cuando dicho campo pierde el enfoque verás tanto "el símbolo de moneda como el separador de miles".
  • Como no me gustaba el formulario para entrar fechas: ¡te lo cambié!
  • El Nº de Operación es determinado automáticamente al Agregar un nuevo registro.
¿Por qué no exploras el formulario a ver si te satisface?...
Saludos, Cacho R.
 

Adjuntos

Última edición:

pssacolfa

New member
Cacho R. muchas gracias!
muy interesante, ahora tengo que trabajar un poco en el taller, pero luego me voy a sentar a estudiar el codigo.
me da mucha alegria ver resuelto lo de "el simbolo de moneda" jeje, no sabes lo que me costo hacerlo y que no pude lograr
me parece bien el cambio que haces, creo q me gusta mas que el boton guardar sea independiente, pero asi como lo pones esta bien tambien
lo que si noto raro es que en el numero de operacion deberia salir automaticamente el numero de operacion que vamos a realizar, y que en caso de querer modificar salga una lista o de alguno que haga referencia a la operacion a cambiar, de cualquier manera mas tarde lo estudio bien quizas ahora no lo entendi...
lo demas impecable.... voy a estudiar el codigo y te hare algunas consultas de lo que no entienda para entender el proceso.
muchas gracias
 

pssacolfa

New member
es bastante diferente a lo que venia haciendo asi q voy a intentar armar otro form y aplicar algunas de las cosas estas a ver que sale.

lo de la clase no lo entiendo, para que es? que funcion cumple? me gustaria entender mejor este procedimiento...

en cuanto a este nuevo archivo, como se hace para acceder al meno de lista tanto del menu opciones como el de cuenta, con el teclado, ejemplo con la barra o con una flecha abajo,... para no usar el mouse..

gracias
 

Cacho R

Well-known member
... lo de la clase no lo entiendo, para que es? que funcion cumple? me gustaria entender mejor este procedimiento...
Vos ya tenés un módulo de clase en tu formulario inicial pero veo que te lo has copiado sin saber "en qué te estabas metiendo", Jajjjjaja.
El tema de los "módulos de clase" es... ¡Todo un mundo!
  • Te podría dar 10 enlaces (como hacen muchos: preferentemente antiquísimos enlaces en inglés y uno o dos en español) para que te "rompas" la cabeza.
  • ¡Pero no voy a ser tan "cruel"!...Es un tema al que deberías entrar cuando -y hoy no es el caso- tengas un nivel de conocimiento muy superior al que tienes por estos tiempos.
Resumiendo: el módulo de clase cal_Clase trabaja en equipo con el userform cal_UF y, entre ambos te proporcionan el nuevo y menos complicado calendario.
Reemplazan ventajosamente al módulo de clase Clase1 y al userform CalendarForm.

... en cuanto a este nuevo archivo, como se hace para acceder al meno de lista tanto del menu opciones como el de cuenta, con el teclado... para no usar el mouse...
Se llaman "teclas de aceleración".
Es un tema básico pero no tiene nada que ver con esta consulta que la has abierto para satisfacer otras necesidades.

Así que te sugiero investigar por la Web dos cosas:
  • De qué se trata la propiedad Accelerator, y
  • A qué objetos se puede aplicar (te anticipo que no se aplica a todos).
Y si "te trabas": ¡Inicia una nueva consulta sobre ese tema específico!
___________________________

No me sorprende que afirmes que te parezca novedoso lo que te pasé. Tienes varios rangos de datos en los que utilizas un userform para dar de alta datos, otro para modificar los datos incorporados y ningún procedimiento para eliminarlos.
En lo que te pasé... ¡encuentras las altas, las modificaciones y las bajas en el mismo userform!

Finalmente te sugeriría que utilices lo que te pasé para "estudiar" bien cada cosa y después que te hayas convertido en un "experto" en el modelo comienza a integrar -de a uno y cuidadosamente- cada nueva necesidad.

Saludos, Cacho R.
 

pssacolfa

New member
Bueno ya me puse a repasar el código y ya me caí de la silla dos veces...

lo de la propiedad acelerator, ok, si tengo dudas al respecto lo haré en otro post..

en cuanto a este código que cambiaste. viendo el botón de agregar (que era mi viejo botón de grabar) no veo en donde haces referencia a la hoja INGRESOS. porque la caja se ingresa el id y no el nombre...

bueno , veo que me cuesta entenderlo, si tienes alguna sugerencia de algo para leer para entenderlo seria interesante ...

gracias
 

Cacho R

Well-known member
no veo en donde haces referencia a la hoja INGRESOS. porque la caja se ingresa el id y no el nombre...
¿Lo más importante?... Los datos de la hoja INGRESOS ya no se depositan en un rango común sino en una "tabla Excel" (VBA las llama ListObject) que tienen muchísimas ventajas (no sólo lo estético).

El tema es tan importante que representa LA PRIMERA LÍNEA DE CÓDIGO que se ejecuta al iniciarse el userform. A saber:
Set LObj = Range("tbl_Ingresos").ListObject

Como los nombres de los ListObject son únicos en el libro ("tbl_Ingresos", en este caso) el objeto LObj tiene toda la info que precisa (celdas que ocupa, hoja en la que se encuentra, etc.). Por ejemplo:
  • ¿Quiero incorporar una nueva fila?... bastará hacer: LObj.ListRows.Add
  • ¿Quiero el rango que ocupa la primera columna del ListObject?... bastará hacer: Lobj.Range.Columns(1) o LObj.ListColumns(1).Range.
  • Y otro detalle que te va a resultar "asombroso": imagina que tienes la necesidad de "desplazar" el ListObject 10 columnas hacia la derecha y 3 filas hacia abajo. No necesito decirte que muchas veces ello te obliga "retocar" diversas partes de tu código.
  • Pues refiriendo SIEMPRE al LObj (el que "desplazaste" pero no le cambiaste de nombre, claro) resulta que no tendrás que cambiar -casi- ni una línea de código.
Y ésa es la razón por la que no se necesita referir a la hoja INGRESOS: ¡con hacer referencia al ListObject alcanza y sobra!, ¿Entendido?...
 

Cacho R

Well-known member
porque la caja se ingresa el id y no el nombre...
Esta parte no te la entendí. O sea:
  • Como en tu primer envío (la imagen) el "ID" (o número de operación) ni figuraba y lo incorporaste en tu segunda muestra (el archivo), supuse que deseabas que el programa manejara automáticamente ese dato importante.
  • Mi duda es: ¿Quieres que dicho número pueda ser "manipulado" por el usuario?... ¿Y si estás dando de alta un nuevo registro y el usuario le pone como ID el mismo de uno que ya existe?...
  • Tampoco comprendo si te refieres a ese campo (primera columna) o al campo Caja (4ta columna).
Aguardo tus comentarios.
Cacho R.
 

pssacolfa

New member
Esta parte no te la entendí. O sea:
  • Como en tu primer envío (la imagen) el "ID" (o número de operación) ni figuraba y lo incorporaste en tu segunda muestra (el archivo), supuse que deseabas que el programa manejara automáticamente ese dato importante.
  • Mi duda es: ¿Quieres que dicho número pueda ser "manipulado" por el usuario?... ¿Y si estás dando de alta un nuevo registro y el usuario le pone como ID el mismo de uno que ya existe?...
  • Tampoco comprendo si te refieres a ese campo (primera columna) o al campo Caja (4ta columna).
Aguardo tus comentarios.
Cacho R.
mas adelante voy a realizar un form en donde el usuario pueda modificar las cajas (voy de a poco porque si no me mareo) es decir, que entre y setee las cajas banco, trabajo etc. con el nombre que quiera. el id lo puse para tener un orden. quizas me equivoque ahi.

el proximo archivo que suba, quizas se entienda mejor la intencion que tengo al respecto, de momento puede quedar asi.
 

pssacolfa

New member
buenas, hoy arranque repasando el primer codigo, asi no sigo agregando cosas antes de saber las dudas que tenia sobre el segundo codigo

me surgen las sig incognitas.

1- que funcion cumple el lbl1 ?
2- como se cargaron estos datos? porque creo q tengo q hacer algo similar para cargar los datos del segundo codigo porque el codigo agregar no funciona para este.

imagen3.png
 

Cacho R

Well-known member
... me surgen las sig incognitas.1- que funcion cumple el lbl1 ?
No encuentro ningún label con ese nombre: ¿Por qué no te fijas bien de donde has obtenido ese label?...
____________________
... me surgen las sig incognitas.

2- como se cargaron estos datos? porque creo q tengo q hacer algo similar para cargar los datos del segundo codigo porque el codigo agregar no funciona para este.
Ver el archivo adjunto 55607
En este caso, y cuando seleccionas un rango "común" y lo transformas en una tabla Excel (ListObject), de un modo "automático" Excel les asocia un nombre en el libro. Los que ves son -precisamente- los rangos asociados a los dos ListObject que hay en el libro.
 

eduerdexender

New member
Hola!
Muy intersante, lo que no evita es que cuando marques toda la columna la primera línea tendrá texto y habrá que administrar eso. Eso puede dar lugar a errores en algunos casos.
 
Última edición:
Arriba