Visual Basic para Aplicaciones - Crear Listbox con Multiples Checkbox dentro

Life is soft - evento anual de software empresarial
 
Vista:

Crear Listbox con Multiples Checkbox dentro

Publicado por Zeus Alberto Páez Rentería (26 intervenciones) el 04/02/2010 19:07:29
Quisiera saber si es posible agregar 4 columnas a un List box (Facil)
Ahora que de la segunda a la 4ta columna del listbox sean Checkbox (Dificil)

Se que es posible crear un listbox con un check box pero solo aplica a la primer columna utilizando las propiedades del listbox

ListStyle = 1-fmListStyleOption
MultiSelect = 0 - fmMultiSelectMulti

Con esto modifico las propiedades

With Me.ListBox1
.ColumnCount = 1
.ListStyle = fmListStyleOption
.MultiSelect = fmMultiSelectMulti
End With

Quiero presentarle al usuario un numero de parte en la primer columna y en las otras necesito 3 check box para saber si determinado numero de parte afecta Material, Diseño, Cotizacion. Si lo afecta pues es un simple check box, pero no puedo meter un listado indeterminado de check box en un listbox en la segunda, tercera y cuarta columna.

Ya puede crear un copy paste al listbox, ahora por cada valor creado quiero que me genere dentro del listbox los check list que se necesita. Si si lo entiendo tambien quiero que llueva al mismo tiempo jajaja. Beuno la verdad esto jamas se me habia presentado y no se si sea posible o al menos crear el efecto visual de que esto suscede. Intente crear 4 list box el primero con los numeros de parte y los otros 3 con checkbox vacios, pero cuando los lleno pues la barra del scroll de los 3 listbox con el check box dentro se ven encimados. Luego tambien habria que coordinar el avance del scroll de manera que los datos en los check box cuando muevo el scroll de los numeros de parte pues todos se muevan igual, para que los datos correspondan.

Pense que el ColumnCount me podria servir para modificar las propiedades de la
la columna 1 pero al parecer solo aplica para el listbox en general

Private Sub UserForm_Initialize()
Dim R as Integer
With Me.ListBox1
.ColumnCount = 1
.ListStyle = fmListStyleOption
.MultiSelect = fmMultiSelectMulti
End With
For R = 0 To 9
Me.ListBox1.AddItem " "
Next
End Sub

Pues he aqui el reto, no se mucha gente diria que es imposible pero siempre existe un programador ingenioso capaz de hacer esto. A mi por ejemplo me decian que no se podia enviar un email desde excel usando outlook sin que apareciera el security warning o sin instalar un dll como el Redemption, nanana, yo desarrolle un codigo que hace esto, asi que lo de imposible pues no lo creo. Algun ingenioso.

Saludos
Ing. Zeus Alberto Paez Renteria
[email protected]
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
1
Responder
Imágen de perfil de JuanC

RE:Crear Listbox con Multiples Checkbox dentro

Publicado por JuanC (565 intervenciones) el 04/02/2010 21:40:42
creo que una manera de hacerlo es programando un control propio en VB o C++
lo cual requiere bastante trabajo...

otra es hacerlo 'a mi manera'
te dejo algo que hice hace 2 minutos... (espero que la idea te ayude!)

http://www.sendspace.com/file/7yyr7p

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:Crear Listbox con Multiples Checkbox dentro

Publicado por Zeus Alberto Páez Rentería (26 intervenciones) el 05/02/2010 00:10:04
Genial !!! JuanC

Me da una idea de como lo puedo trabajar, tambien los puedo crear fijos y que a medida que avanzan los numeros de parte se modifiquen los check box. La idea movil me sirve para otra parte del programa.

Ademas de la propiedad MouseUp utilize KeyUp y KeyDown ahora le voy a agregar el Drag and Drop o la propiedad Copy Paste hacer el lb.AddItem con los objetos arrastrados hasta el listbox o copiados y una vez hecho que los grabe en una base de datos de Access.

Gracias Juan

Saludos

PD Te envio este codigo es para librar una Security Warning

Outlook Send E-mail Without Security Warning

Es para crear un E-mail sin el problema de seguridad
Mensaje:
A program is trying to automatically send e-mail on your behalf.
Do you want to allow this?
If this is unexpected, it may be a virus and you should choose "No".

Abre Outlook

Ve a Tools / Macro / Visual Basic Editor

Busca 'ThisOutlookSession' (doble click para abrirlo)

Copia el codigo de abajo

Option Explicit
Private Sub Application_Startup()
'IGNORAR - Esto hace accesible la funcion despues de iniciar outlook
End Sub

' FnSendMailSafe
' Facil envio de email utilizando Outlook/Simple MAPI.
' Acepta enviar a varias direcciones.

Public Function FnSendMailSafe(strTo As String, _
strCC As String, _
strBCC As String, _
strSubject As String, _
strMessageBody As String, _
Optional strAttachments As String) As Boolean

On Error GoTo ErrorHandler:

Dim MAPISession As Outlook.NameSpace
Dim MAPIFolder As Outlook.MAPIFolder
Dim MAPIMailItem As Outlook.MailItem
Dim oRecipient As Outlook.Recipient

Dim TempArray() As String
Dim varArrayItem As Variant
Dim strEmailAddress As String
Dim strAttachmentPath As String

Dim blnSuccessful As Boolean

'Obtener el MAPI NameSpace
Set MAPISession = Application.Session

If Not MAPISession Is Nothing Then

'Accesar al MAPI

MAPISession.Logon , , True, False

Set MAPIFolder = MAPISession.GetDefaultFolder(olFolderOutbox)
If Not MAPIFolder Is Nothing Then

'Crea un nuevo mail en el Outbox
Set MAPIMailItem = MAPIFolder.Items.Add(olMailItem)
If Not MAPIMailItem Is Nothing Then

With MAPIMailItem

' recipients TO
TempArray = Split(strTo, ";")
For Each varArrayItem In TempArray

strEmailAddress = Trim(varArrayItem)
If Len(strEmailAddress) > 0 Then
Set oRecipient = .Recipients.Add(strEmailAddress)
oRecipient.Type = olTo
Set oRecipient = Nothing
End If

Next varArrayItem

'recipients CC
TempArray = Split(strCC, ";")
For Each varArrayItem In TempArray

strEmailAddress = Trim(varArrayItem)
If Len(strEmailAddress) > 0 Then
Set oRecipient = .Recipients.Add(strEmailAddress)
oRecipient.Type = olCC
Set oRecipient = Nothing
End If

Next varArrayItem

'recipients BCC
TempArray = Split(strBCC, ";")
For Each varArrayItem In TempArray

strEmailAddress = Trim(varArrayItem)
If Len(strEmailAddress) > 0 Then
Set oRecipient = .Recipients.Add(strEmailAddress)
oRecipient.Type = olBCC
Set oRecipient = Nothing
End If

Next varArrayItem

'Coloca el SUBJECT
.Subject = strSubject

'Establece el BODY (HTML or plain text)
If StrComp(Left(strMessageBody, 6), "<HTML>", vbTextCompare) = 0 Then
.HTMLBody = strMessageBody
Else
.Body = strMessageBody
End If

'Agrega attachments
TempArray = Split(strAttachments, ";")
For Each varArrayItem In TempArray

strAttachmentPath = Trim(varArrayItem)
If Len(strAttachmentPath) > 0 Then
.Attachments.Add strAttachmentPath
End If

Next varArrayItem

.Send
Set MAPIMailItem = Nothing

End With

End If

Set MAPIFolder = Nothing

End If

MAPISession.Logoff

End If

blnSuccessful = True

ExitRoutine:
Set MAPISession = Nothing
FnSendMailSafe = blnSuccessful

Exit Function

ErrorHandler:
MsgBox "An error has occured in the user defined Outlook VBA function FnSendMailSafe()" & vbCrLf & vbCrLf & _
"Error Number: " & CStr(Err.Number) & vbCrLf & _
"Error Description: " & Err.Description, vbApplicationModal + vbCritical
Resume ExitRoutine
End Function

Prueba el codigo (Ctrl -G)
?ThisOutlookSession.FnSendMailSafe("[email protected]","","","Test","Test")

Luego Abre el excel

Crea un nuevo modulo
y copia el siguiente codigo

Option Explicit

Sub FnTestSafeSendEmail()
Dim blnSuccessful As Boolean
Dim strHTML As String

strHTML = "<html>" & _
"<body>" & _
"My <b><i>HTML</i></b> message text!" & _
"</body>" & _
"</html>"
blnSuccessful = FnSafeSendEmail("[email protected]", _
"Mi Subject", _
strHTML)

'Un ejemplo mas complejo...
'blnSuccessful = FnSafeSendEmail("[email protected]; [email protected]", _
"Mi Subject", _
strHTML, _
"C:\MiArchivo1.txt; C:\MiArchivo2.txt", _
"[email protected]", _
"[email protected]")
If blnSuccessful Then

MsgBox "E-mail message sent successfully!"

Else

MsgBox "Failed to send e-mail!"

End If

End Sub

'El siguiente procedimiento llama la funcion de Outlook

Public Function FnSafeSendEmail(strTo As String, _
strSubject As String, _
strMessageBody As String, _
Optional strAttachmentPaths As String, _
Optional strCC As String, _
Optional strBCC As String) As Boolean

Dim objOutlook As Object
Dim objNameSpace As Object
Dim objExplorer As Object
Dim blnSuccessful As Boolean
Dim blnNewInstance As Boolean

'En caso de que ya este abierto Outlook
On Error Resume Next
Set objOutlook = GetObject(, "Outlook.Application")
On Error GoTo 0

If objOutlook Is Nothing Then

Set objOutlook = CreateObject("Outlook.Application")
blnNewInstance = True
Set objNameSpace = objOutlook.GetNamespace("MAPI")
Set objExplorer = objOutlook.Explorers.Add(objNameSpace.Folders(1), 0)
objExplorer.CommandBars.FindControl(, 1695).Execute

objExplorer.Close

Set objNameSpace = Nothing
Set objExplorer = Nothing

End If

blnSuccessful = objOutlook.FnSendMailSafe(strTo, strCC, strBCC, _
strSubject, strMessageBody, _
strAttachmentPaths)

If blnNewInstance = True Then objOutlook.Quit
Set objOutlook = Nothing

FnSafeSendEmail = blnSuccessful

End Function

Espero te sea util Saludos
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
Imágen de perfil de JuanC

RE:Crear Listbox con Multiples Checkbox dentro

Publicado por JuanC (565 intervenciones) el 05/02/2010 11:10:31
me alegra que te haya servido de algo...
gracias por el código, por ahora no creo que lo use, pero uno nunca
sabe con qué se va a encontrar mañana!

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:Crear Listbox con Multiples Checkbox dentro

Publicado por billy (1 intervención) el 06/03/2012 17:13:41
Hola Juan C, buen dia, tengo tambien necesidad de tener mas de un checkbox en un listbox, y trate de ir a http://www.sendspace.com/file/7yyr7p pero el enlace estra roto, no se si me pudieras ayudar o poner o darme otro link para ver tu solución. Cabe aclarar que tambien necesito esto para un webform.

Saludos y gracias de antemano. Billy
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
sin imagen de perfil

Crear Listbox con Multiples Checkbox dentro

Publicado por carlos (1 intervención) el 13/04/2018 16:22:22
Hola Zeus, tengo una situacion muy parecida a la suya, tengo un combobox que tiene los grados de educacion de una institucion, una vez seleccionado por ejemplo el grado segundo, me despliega en un listbox los estudiantes de ese grado, pero necesito adicionalmente manejar 6 posibles varibles adicionales (esta las manejo con checkbox) a cada uno de los estudiantes. Me puede por favor colaborar con la solución que le ayudo JuanC? lo que pasa es que el link ya no está disponible.. Gracias
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