PROBLEMA COM COMBOBOX

PROPAR 05/04/2005 16:54:59
#76850
amigos tenho dois combobox CboCliente e CboConta ao dar um click em Cmdprossessar ele da o saldo da conta selecionada no cbocleinte e cboconta
como faço para ele somar as duas contas sem pressissar selecionar nenhuma delas ..???


Public Sub atualiza_grid()
Dim msg As String
Dim x As Integer
Dim sql_saldo As String

' ------checa selecao de cliente/conta--
If cbocliente.ListIndex = -1 Then
msg = "Selecione um cliente !"
MsgBox msg, vbExclamation
cbocliente.SetFocus
Exit Sub
End If
If cboconta.ListIndex = -1 Then
msg = "Selecione uma conta !"
MsgBox msg, vbExclamation
cboconta.SetFocus
Exit Sub
End If

'-- atribui cliente/conta as variaveis publicas
cliente = CLng(cbocliente.ItemData(cbocliente.ListIndex))
conta = CLng(cboconta.Text)
datai = Maskini
dataf = maskfim
If cbotipo.ListIndex <> -1 Then
transacao = cbotipo.ItemData(cbotipo.ListIndex)
Else
transacao = 0
End If

'--habilita botões de comandos--
For x = 0 To 2
Command1(x).Enabled = True
Next
Command3.Enabled = True
Command4.Enabled = True
data2.Enabled = True


'-- estabelece consulta SQL ------
sql = "SELECT Pagamento,codlancamento,data_trans, cod_trans, obs_trans, lancamento FROM tbltrans"
sql = sql & " WHERE cod_cli=" & cliente 'cbocliente.ItemData(cbocliente.ListIndex)
sql = sql & " AND cod_conta=" & conta 'cboconta.Text

'--prepara consulta sql para calcular o saldo
sql_saldo = "SELECT SUM(lancamento) as saldo FROM tbltrans "
sql_saldo = sql_saldo & " WHERE cod_cli=" & cbocliente.ItemData(cbocliente.ListIndex)
sql_saldo = sql_saldo & " AND cod_conta=" & cboconta.Text

'---------define tipo da transacao para consulta--
If cbotipo.ListIndex <> -1 Then
If cbotipo.ItemData(cbotipo.ListIndex) <> 888 And cbotipo.ItemData(cbotipo.ListIndex) <> 999 Then
sql = sql & " AND cod_trans=" & cbotipo.ItemData(cbotipo.ListIndex)
sql_saldo = sql_saldo & " AND cod_trans=" & cbotipo.ItemData(cbotipo.ListIndex)
ElseIf cbotipo.ItemData(cbotipo.ListIndex) = 888 Then 'receitas fixas
sql = sql & " AND custofixo= " & True & " AND lancamento > 0 "
sql_saldo = sql_saldo & " AND custofixo=" & True & " AND lancamento > 0 "
ElseIf cbotipo.ItemData(cbotipo.ListIndex) = 999 Then 'despesas fixas
sql = sql & " AND custofixo=" & True & " AND lancamento < 0 "
sql_saldo = sql_saldo & " AND custofixo=" & True & " AND lancamento < 0 "
End If
End If

'---verifica data inicial/final e define período-----
If Maskini <> " / / " And maskfim <> " / / " Then
If Not IsDate(Maskini) Then
msg = "Data inicial invalida"
Maskini.SetFocus
MsgBox msg, vbExclamation
Exit Sub
ElseIf Not IsDate(maskfim) Then
msg = "Data final inválida "
maskfim.SetFocus
MsgBox msg, vbExclamation
Exit Sub
End If

'monta rotina sql e sqlsaldo

sql = sql & " AND data_trans >= " & "#" & Format((Maskini), "mm/dd/yyyy") & "#"
sql = sql & " AND data_trans <= " & "#" & Format((maskfim), "mm/dd/yyyy") & "#"
sql_saldo = sql_saldo & " AND data_trans >= " & "#" & Format((Maskini), "mm/dd/yyyy") & "#"
sql_saldo = sql_saldo & " AND data_trans <= " & "#" & Format((maskfim), "mm/dd/yyyy") & "#"
End If

'-----atualiza Recordsource-------
sql = sql & " ORDER BY data_trans"
data2.RecordSource = sql
Dim rstotal As Recordset

'prepara recordset para receber o saldo
Set rstotal = db.OpenRecordset(sql_saldo, dbOpenDynaset)

'muda cor do painel conforme o valor do saldo
If rstotal![saldo] > 0# Then
Label8.ForeColor = vbBlue
Else
Label8.ForeColor = vbRed
End If
'mostra valor no painel
Label8.Caption = Format(rstotal![saldo], "$#,##0.00;($#,##0.00)")

'atualiza grid
data2.Refresh

'---limpa memoria----
rstotal.Close
Set rstotal = Nothing

End Sub
OCTOPUS 05/04/2005 17:12:47
#76855
caso o usuário não selecione nenhuma conta, defina um intervalo de contas: containi e conta fim. depois atribua este intervalo ao seu sql: "...and (cod_conta between containi and contafim) ".


para isso pode pegar para containi (se a cboconta estiver em ordem crescente) com cboconta.list(0) e a final com cboconta.list(cboconta.listcount - 1)

[]'s
USUARIO.EXCLUIDOS 05/04/2005 17:21:23
#76857
Pelo o que perguntou, precisa usar determinado valor da combo, sem selecionar na lista!, sem clicar... faça assim amigo:
Combo1.List(i)
onde i é o valor do indíce da combo...
Ex:

Dim resultado As Long
Combo1.AddItem "350"
Combo1.AddItem "450"
Combo1.AddItem "10"
resultado = CInt(Combo1.List(0)) + CInt(Combo1.List(2))
'onde 0 é o primeiro indice(350)
'onde 2 é o terceiro indice(10)
MsgBox resultado

Para [txt-color=#ff0000]somar [/txt-color]sem selecionar o item, você pode fazer assim.
Espero ter ajudado...
OCTOPUS 05/04/2005 17:28:27
#76859
mas não vejo finalidade em se somar os números das contas...
Tópico encerrado , respostas não são mais permitidas