Bom dia!!
Preciso de auxílio em conhecimento básico de formatação de data no VBA.
Estou criando um formulário de consulta dos registros de uma tabela. Dentro do formulário eu tenho algumas comboboxes armazenam uma string em uma variável e quando o cliente clica em filtrar essa string é inserida dentro do "WHERE" e filtra os registros do meu subform.
Eu preciso criar uma consulta de registro por período (mês, mês anterior, trimestre, semestre, ano).
Conheço muito pouco de access e vba, então a solução que eu pensei foi a seguinte: Criei uma tabela com os períodos que desejo consultar e no meu formulário criei uma combobox pra selecionar. Quando o cliente seleciona "mês" na combobox o filtro adicionaria no "WHERE" algo como (Year([data])=Year(Now()) AND Month([data])=Month(Now())). No entanto está retornando erro de tipo (13 - Tipos incompatíveis). Acredito que tenha a ver com formatação da data e que a sintaxe no vba é diferente do critério de uma consulta no modo design.
Alguém consegue me ajudar? Segue o código que estou criando:
Private Sub cmdFilter_Click()
Dim strWhere As String 'String com o critério.
Dim lngLen As Long 'Comprimento da string do critério para acrescentar.
'***********************************************************************
'Verifique os valores das combobox e construa a string com os critérios a partir das que não estão em branco.
'***********************************************************************
If Not IsNull(Me.cboEmpresa) Then
strWhere = strWhere & "([t_grupo_ID] = " & Me.cboEmpresa & ") AND "
End If
If Not IsNull(Me.cboSetores) Then
strWhere = strWhere & "([t_empresas_ID] = " & Me.cboSetores & ") AND "
End If
If Not IsNull(Me.cboReceitas) Then
strWhere = strWhere & "([t_cat_entradas_saidas_ID] = " & Me.cboReceitas & ") AND "
End If
If Not IsNull(Me.cboPeriodos) Then
If Me.cboPeriodos = 1 Then strWhere = strWhere & "((Year([data])=Year(Now()) AND Month([data])=Month(Now())))" And ""
End If
'Verifica se a string tem menos que 5 caracteres para remover.
lngLen = Len(strWhere) - 5
If lngLen <= 0 Then 'Não tem informação na string.
MsgBox "Selecione algum critério", vbInformation, ""
Else 'existe critério selecionado e remova o " AND " no final.
strWhere = Left$(strWhere, lngLen)
'insira a string no filtro do formulário.
Me.Filter = strWhere
Me.FilterOn = True
End If
End Sub
Preciso de auxílio em conhecimento básico de formatação de data no VBA.
Estou criando um formulário de consulta dos registros de uma tabela. Dentro do formulário eu tenho algumas comboboxes armazenam uma string em uma variável e quando o cliente clica em filtrar essa string é inserida dentro do "WHERE" e filtra os registros do meu subform.
Eu preciso criar uma consulta de registro por período (mês, mês anterior, trimestre, semestre, ano).
Conheço muito pouco de access e vba, então a solução que eu pensei foi a seguinte: Criei uma tabela com os períodos que desejo consultar e no meu formulário criei uma combobox pra selecionar. Quando o cliente seleciona "mês" na combobox o filtro adicionaria no "WHERE" algo como (Year([data])=Year(Now()) AND Month([data])=Month(Now())). No entanto está retornando erro de tipo (13 - Tipos incompatíveis). Acredito que tenha a ver com formatação da data e que a sintaxe no vba é diferente do critério de uma consulta no modo design.
Alguém consegue me ajudar? Segue o código que estou criando:
Private Sub cmdFilter_Click()
Dim strWhere As String 'String com o critério.
Dim lngLen As Long 'Comprimento da string do critério para acrescentar.
'***********************************************************************
'Verifique os valores das combobox e construa a string com os critérios a partir das que não estão em branco.
'***********************************************************************
If Not IsNull(Me.cboEmpresa) Then
strWhere = strWhere & "([t_grupo_ID] = " & Me.cboEmpresa & ") AND "
End If
If Not IsNull(Me.cboSetores) Then
strWhere = strWhere & "([t_empresas_ID] = " & Me.cboSetores & ") AND "
End If
If Not IsNull(Me.cboReceitas) Then
strWhere = strWhere & "([t_cat_entradas_saidas_ID] = " & Me.cboReceitas & ") AND "
End If
If Not IsNull(Me.cboPeriodos) Then
If Me.cboPeriodos = 1 Then strWhere = strWhere & "((Year([data])=Year(Now()) AND Month([data])=Month(Now())))" And ""
End If
'Verifica se a string tem menos que 5 caracteres para remover.
lngLen = Len(strWhere) - 5
If lngLen <= 0 Then 'Não tem informação na string.
MsgBox "Selecione algum critério", vbInformation, ""
Else 'existe critério selecionado e remova o " AND " no final.
strWhere = Left$(strWhere, lngLen)
'insira a string no filtro do formulário.
Me.Filter = strWhere
Me.FilterOn = True
End If
End Sub