Grandes Professores e demais membros aqui do Máximo Access, boa tarde!
Tenho o seguinte problema e gostaria de ver se alguém tem a solução:
Tenho um formulário denominado "Frm_NF" e nele contém uma listbox (chamada "CXLIST_NF_E_REG") com cerca de 15 colunas. A coluna 12 dessa listbox contém variadas unidades de medida, tais como "L", "L20", "un", "m3", etc.
Essa listbox possui cerca de 5000 registros (são carregados de uma dada tabela) cujos respectivos campos "Unid" (coluna 12) possuem as mais diversas unidades (L, L20, un, etc).
Em tal formulário tenho um botão de comando (btnFrmFcv]) cujo objetivo é carregar um outro Formulário (denominado "Frm_FCVTodosEFD"). Este formulário possibilitará aplicar o FCV (fator de correção de volume) aos registros selecionados naquele primeiro formulário.
Todavia, quero implementar alguns critérios que se não atendidos impedirá o carregamento do segundo formulário. Um dos critérios é que apenas os registros selecionados cujos campos "Unid" sejam iguais a "L" ou "L20". Ou seja, se ao menos um dos registros selecionados contiverem valores diferentes o sistema não carregará o formulário "Frm_FCVTodosEFD".
Já tentei diversas alternativas e nenhuma funcionou. Acredito que os laços de repetição (Do While ou Do Until) resolveriam, porém não estou sabendo estruturar a instrução. ALGUÉM PODERIA ME AJUDAR NESSE SENTIDO, ou seja, implementar um critério (na instrução disposta adiante) por meio de laço de repetição que impeça o carregamento do formulário "Frm_FCVTodosEFD" caso ao menos um dos registros selecionado na lisbox "CXLIST_NF_E_REG" contenha no campo "Unid" (coluna 12) unidade diferente de "L" ou "L20"?
Abaixo segue a instrução que está funcionando perfeitamente (sem considerar a questão do critério do campo unidade do registro selecionado).
Private Sub btnFrmFcv_Click()
On Error GoTo ErrosPrevistoss
Dim i As Variant
If IsNull(Me.combox_oper) Then
MsgBox "É obrigatório selecionar o 'Tipo de Operação' para que os dados sejam carregados!", vbExclamation, "ATENÇÃO:"
Me.combox_oper.SetFocus
Me.combox_oper.Dropdown
Exit Sub
End If
If Me.CXLIST_NF_E_REG.ItemsSelected.Count = 0 Then
MsgBox "Não há nenhum registro selecionado na caixa de listagem!", vbExclamation, "ATENÇÃO:"
Exit Sub
End If
If MsgBox("Será carregado o Módulo de Aplicação do Fator de Conversão de Volumes (FCV)! Confirma carregamento?", vbYesNo + vbInformation, "AVISO:") = vbYes Then
DoCmd.OpenForm "Frm_FCVTodosEFD"
For Each i In Form_Frm_Alterar_Reg_E.CXLIST_NF_E_REG.ItemsSelected
If Me.CXLIST_NF_E_REG.Selected(i) = True Then
Form_Frm_FCVTodosEFD.ListboxEFDSel.AddItem Me.CXLIST_NF_E_REG.Column(0, i) & ";" & Left(Me.CXLIST_NF_E_REG.Column(11, i), 4) & ";" & Format(Me.CXLIST_NF_E_REG.Column(1, i), "yyyy") & ";" & Me.CXLIST_NF_E_REG.Column(2, i) & ";" & Me.CXLIST_NF_E_REG.Column(3, i) & ";" & Me.CXLIST_NF_E_REG.Column(4, i) & ";" & Me.CXLIST_NF_E_REG.Column(5, i) & ";" & Me.CXLIST_NF_E_REG.Column(6, i) & ";" & Me.CXLIST_NF_E_REG.Column(7, i) & ";" & Me.CXLIST_NF_E_REG.Column(8, i) & ";" & Me.CXLIST_NF_E_REG.Column(11, i) & ";" & Me.CXLIST_NF_E_REG.Column(12, i) & ";" & Me.CXLIST_NF_E_REG.Column(13, i) & ";" & Me.CXLIST_NF_E_REG.Column(14, i) & ";" & Me.CXLIST_NF_E_REG.Column(15, i) & ";" & Me.CXLIST_NF_E_REG.Column(17, i)
End If
Next i
Form_Frm_FCVTodosEFD.TxtAnoEFDSel = Format(DLookup("[DtEM]", "[EFD-Tbl54_X_Tbl75]", "[idRegistro] = " & TxtIdAlterar), "yyyy")
Form_Frm_FCVTodosEFD.TxtGrupoProd = Left(DLookup("[Grupo]", "[EFD-Tbl54_X_Tbl75]", "[idRegistro] = " & TxtIdAlterar), 4)
Else
MsgBox ("Operação Cancelada!"), vbInformation, "AVISO:"
End If
ErrosPrevistoss:
If Err.Number = 3075 Then
MsgBox "O usuário selecionou linha que não contém registro!", vbExclamation, "Atenção:"
Exit Sub
End If
End sub
A instrução acima carrega o formulário Frm_FCVTodosEFD independente da informação na coluna "Unid" dos registros selecionados na listbox mencionada .
Tenho o seguinte problema e gostaria de ver se alguém tem a solução:
Tenho um formulário denominado "Frm_NF" e nele contém uma listbox (chamada "CXLIST_NF_E_REG") com cerca de 15 colunas. A coluna 12 dessa listbox contém variadas unidades de medida, tais como "L", "L20", "un", "m3", etc.
Essa listbox possui cerca de 5000 registros (são carregados de uma dada tabela) cujos respectivos campos "Unid" (coluna 12) possuem as mais diversas unidades (L, L20, un, etc).
Em tal formulário tenho um botão de comando (btnFrmFcv]) cujo objetivo é carregar um outro Formulário (denominado "Frm_FCVTodosEFD"). Este formulário possibilitará aplicar o FCV (fator de correção de volume) aos registros selecionados naquele primeiro formulário.
Todavia, quero implementar alguns critérios que se não atendidos impedirá o carregamento do segundo formulário. Um dos critérios é que apenas os registros selecionados cujos campos "Unid" sejam iguais a "L" ou "L20". Ou seja, se ao menos um dos registros selecionados contiverem valores diferentes o sistema não carregará o formulário "Frm_FCVTodosEFD".
Já tentei diversas alternativas e nenhuma funcionou. Acredito que os laços de repetição (Do While ou Do Until) resolveriam, porém não estou sabendo estruturar a instrução. ALGUÉM PODERIA ME AJUDAR NESSE SENTIDO, ou seja, implementar um critério (na instrução disposta adiante) por meio de laço de repetição que impeça o carregamento do formulário "Frm_FCVTodosEFD" caso ao menos um dos registros selecionado na lisbox "CXLIST_NF_E_REG" contenha no campo "Unid" (coluna 12) unidade diferente de "L" ou "L20"?
Abaixo segue a instrução que está funcionando perfeitamente (sem considerar a questão do critério do campo unidade do registro selecionado).
Private Sub btnFrmFcv_Click()
On Error GoTo ErrosPrevistoss
Dim i As Variant
If IsNull(Me.combox_oper) Then
MsgBox "É obrigatório selecionar o 'Tipo de Operação' para que os dados sejam carregados!", vbExclamation, "ATENÇÃO:"
Me.combox_oper.SetFocus
Me.combox_oper.Dropdown
Exit Sub
End If
If Me.CXLIST_NF_E_REG.ItemsSelected.Count = 0 Then
MsgBox "Não há nenhum registro selecionado na caixa de listagem!", vbExclamation, "ATENÇÃO:"
Exit Sub
End If
If MsgBox("Será carregado o Módulo de Aplicação do Fator de Conversão de Volumes (FCV)! Confirma carregamento?", vbYesNo + vbInformation, "AVISO:") = vbYes Then
DoCmd.OpenForm "Frm_FCVTodosEFD"
For Each i In Form_Frm_Alterar_Reg_E.CXLIST_NF_E_REG.ItemsSelected
If Me.CXLIST_NF_E_REG.Selected(i) = True Then
Form_Frm_FCVTodosEFD.ListboxEFDSel.AddItem Me.CXLIST_NF_E_REG.Column(0, i) & ";" & Left(Me.CXLIST_NF_E_REG.Column(11, i), 4) & ";" & Format(Me.CXLIST_NF_E_REG.Column(1, i), "yyyy") & ";" & Me.CXLIST_NF_E_REG.Column(2, i) & ";" & Me.CXLIST_NF_E_REG.Column(3, i) & ";" & Me.CXLIST_NF_E_REG.Column(4, i) & ";" & Me.CXLIST_NF_E_REG.Column(5, i) & ";" & Me.CXLIST_NF_E_REG.Column(6, i) & ";" & Me.CXLIST_NF_E_REG.Column(7, i) & ";" & Me.CXLIST_NF_E_REG.Column(8, i) & ";" & Me.CXLIST_NF_E_REG.Column(11, i) & ";" & Me.CXLIST_NF_E_REG.Column(12, i) & ";" & Me.CXLIST_NF_E_REG.Column(13, i) & ";" & Me.CXLIST_NF_E_REG.Column(14, i) & ";" & Me.CXLIST_NF_E_REG.Column(15, i) & ";" & Me.CXLIST_NF_E_REG.Column(17, i)
End If
Next i
Form_Frm_FCVTodosEFD.TxtAnoEFDSel = Format(DLookup("[DtEM]", "[EFD-Tbl54_X_Tbl75]", "[idRegistro] = " & TxtIdAlterar), "yyyy")
Form_Frm_FCVTodosEFD.TxtGrupoProd = Left(DLookup("[Grupo]", "[EFD-Tbl54_X_Tbl75]", "[idRegistro] = " & TxtIdAlterar), 4)
Else
MsgBox ("Operação Cancelada!"), vbInformation, "AVISO:"
End If
ErrosPrevistoss:
If Err.Number = 3075 Then
MsgBox "O usuário selecionou linha que não contém registro!", vbExclamation, "Atenção:"
Exit Sub
End If
End sub
A instrução acima carrega o formulário Frm_FCVTodosEFD independente da informação na coluna "Unid" dos registros selecionados na listbox mencionada .