Mensagem de erro no VBA Excel
Enviado: 29 Nov 2020 às 20:48
Boa tarde pessoal, nesse meu programa sobre montagem de uma agenda de contatos quando eu acesso o menu e tento a opção “1” para incluir contato eu recebo a seguinte mensagem:
"Erro de compilação: Somente tipos definidos pelo usuário em módulos de objeto público podem ser convertidos para ou a partir de uma variante ou passados para funções late-bound."
No Access funciona normalmente. Será que esse tipo de programa não pode ser feito no Excel? Ou o erro é por outro motivo? Obrigado.
Option Explicit
Type typContato
nomeCompleto As String * 30
dataNascimento As Date
fone As String * 12
email As String * 30
End Type
Public arrContato(1 To 100) As typContato
Public intUltimoContato As Integer
Sub menuAgenda()
Dim varOpcao As Variant
Do
varOpcao = InputBox("Informe a opção desejada: " & vbCrLf & _
vbLf & _
"[1] incluir novo contato" & vbCrLf & _
"[2] exibir contato" & vbCrLf & _
"[3] editar contato" & vbCrLf & _
"[4] excluir contato" & vbCrLf & _
"[5] salvar contato" & vbCrLf & _
vbLf & _
"[6] sair & vbCrLf &" _
, "Agenda de Conttos")
Select Case varOpcao
Case 1
Call incluirContato
Case 2
Call exibirContato
Case 3
Call editarContato
Case 4
Call exluirContato
Case 5
Call salvarContato
End Select
Loop Until varOpcao = 6
End Sub
Sub incluirContato()
intUltimoContato = intUltimoContato + 1
arrContato(intUltimoContato) = novoContato
End Sub
Function novoContato()
novoContato.nomeCompleto = InputBox("Informe o nome do contato (*):", " Incluir Contato")
novoContato.dataNasc = CDate(InputBox("Informe a data de nascimento (*):" & _
vbCrLf & vbLf & _
"Foramto: dd/mm/aaaa", "Incluir Contato"))
novoContato.fone = InputBox("Informe o telefone:" & vbCrLf & vbLf & _
"Formato: 00 00000-0000", "Incluir Contato")
novoContato.email = InputBox("Informe o e-mail:" & vbCrLf & vbLf & _
"Foramto: endereco@dominio.com", "Incluir email")
End Function
Sub exibirContato()
MsgBox listaContatos(True), vbInformation, "Lista de Contatos"
End Sub
Function listaContatos(Optional argCompleto As Boolean = False) As String
Dim i As Integer
For i = 1 To intUltimoContato
listaContatos = listaContatos & _
i & " " & arrContato(i).nomeCompleto
If argCompleto Then
listaContato = listaContato & " " & _
arrContato(i).dataNasc & " " & _
arrContato(i).fone & " " & _
arrContato(i).email & vbCrLf
Else
listaContatos = listaContatos & vbCrLf
End If
Next i
End Function
Sub editarContato()
End Sub
Sub exluirContato()
End Sub
Sub salvarContato()
End Sub
"Erro de compilação: Somente tipos definidos pelo usuário em módulos de objeto público podem ser convertidos para ou a partir de uma variante ou passados para funções late-bound."
No Access funciona normalmente. Será que esse tipo de programa não pode ser feito no Excel? Ou o erro é por outro motivo? Obrigado.
Option Explicit
Type typContato
nomeCompleto As String * 30
dataNascimento As Date
fone As String * 12
email As String * 30
End Type
Public arrContato(1 To 100) As typContato
Public intUltimoContato As Integer
Sub menuAgenda()
Dim varOpcao As Variant
Do
varOpcao = InputBox("Informe a opção desejada: " & vbCrLf & _
vbLf & _
"[1] incluir novo contato" & vbCrLf & _
"[2] exibir contato" & vbCrLf & _
"[3] editar contato" & vbCrLf & _
"[4] excluir contato" & vbCrLf & _
"[5] salvar contato" & vbCrLf & _
vbLf & _
"[6] sair & vbCrLf &" _
, "Agenda de Conttos")
Select Case varOpcao
Case 1
Call incluirContato
Case 2
Call exibirContato
Case 3
Call editarContato
Case 4
Call exluirContato
Case 5
Call salvarContato
End Select
Loop Until varOpcao = 6
End Sub
Sub incluirContato()
intUltimoContato = intUltimoContato + 1
arrContato(intUltimoContato) = novoContato
End Sub
Function novoContato()
novoContato.nomeCompleto = InputBox("Informe o nome do contato (*):", " Incluir Contato")
novoContato.dataNasc = CDate(InputBox("Informe a data de nascimento (*):" & _
vbCrLf & vbLf & _
"Foramto: dd/mm/aaaa", "Incluir Contato"))
novoContato.fone = InputBox("Informe o telefone:" & vbCrLf & vbLf & _
"Formato: 00 00000-0000", "Incluir Contato")
novoContato.email = InputBox("Informe o e-mail:" & vbCrLf & vbLf & _
"Foramto: endereco@dominio.com", "Incluir email")
End Function
Sub exibirContato()
MsgBox listaContatos(True), vbInformation, "Lista de Contatos"
End Sub
Function listaContatos(Optional argCompleto As Boolean = False) As String
Dim i As Integer
For i = 1 To intUltimoContato
listaContatos = listaContatos & _
i & " " & arrContato(i).nomeCompleto
If argCompleto Then
listaContato = listaContato & " " & _
arrContato(i).dataNasc & " " & _
arrContato(i).fone & " " & _
arrContato(i).email & vbCrLf
Else
listaContatos = listaContatos & vbCrLf
End If
Next i
End Function
Sub editarContato()
End Sub
Sub exluirContato()
End Sub
Sub salvarContato()
End Sub