Notifications
Clear all

Erro de compilação

9 Posts
2 Usuários
0 Reactions
1,352 Visualizações
(@vonzuben)
Posts: 549
Prominent Member
Topic starter
 

versão 2007 !

"Erro de Compilação: Constantes, seqüências de
comprimento fixo, matrizes, tipos definidos pelo usuário e
Instruções Declare não são permitidos como membros públicos
de módulos de objetos."

#If VBA7 Then
Declare PtrSafe Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" _
(ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
#Else
Public Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" _
(ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
#End If

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Application.ScreenUpdating = False

Dim Preço, Parar, Objetivo
Dim AudioParar, AudioObj As String

AudioParar = ThisWorkbook.Path & "" & "beep1.wav"
AudioObj = ThisWorkbook.Path & "" & "beep2.wav"

Preço = Range("A1").Value
Parar = Range("B1").Value
Objetivo = Range("C1").Value

Select Case Preço

Case Is <= Parar
Call sndPlaySound(AudioParar, 0)
Range("D1").Value = "STOP"

Case Is >= Objetivo
Call sndPlaySound(AudioObj, 0)
Range("D1").Value = "OBJETIVO"

Case Else
Range("D1").Clear

End Select
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub

 
Postado : 16/02/2014 8:42 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Crie um novo Modulo e mova as instruções abaixo para ele, estas declarações não podem estar no Evento da Worksheet :

#If VBA7 Then
Declare PtrSafe Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" _
(ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
#Else
Public Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" _
(ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
#End If

[]s

 
Postado : 16/02/2014 9:10 am
(@vonzuben)
Posts: 549
Prominent Member
Topic starter
 

Erro de compilação:

'Sub' ou 'Function' não definida

Está amarelo nessa linha

Private Sub Worksheet_Change(ByVal Target As Range)

e ficou selecionado isso

Call sndPlaySound(

 
Postado : 16/02/2014 9:45 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Você Criou um Novo Modulo e colou as linhas que eu citei ?

Este erro é devido a falta delas, ela faz a chamada a API - "sndPlaySound"

[]s

 
Postado : 16/02/2014 10:00 am
(@vonzuben)
Posts: 549
Prominent Member
Topic starter
 

criei um novo modelo e só coloquei isso

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Application.ScreenUpdating = False

Dim Preço, Parar, Objetivo
Dim AudioParar, AudioObj As String

AudioParar = ThisWorkbook.Path & "" & "beep1.wav"
AudioObj = ThisWorkbook.Path & "" & "beep2.wav"

Preço = Range("A1").Value
Parar = Range("B1").Value
Objetivo = Range("C1").Value

Select Case Preço

Case Is <= Parar
Call sndPlaySound(AudioParar, 0)
Range("D1").Value = "STOP"

Case Is >= Objetivo
Call sndPlaySound(AudioObj, 0)
Range("D1").Value = "OBJETIVO"

Case Else
Range("D1").Clear

End Select
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub

 
Postado : 16/02/2014 11:14 am
(@vonzuben)
Posts: 549
Prominent Member
Topic starter
 

Faz o teste e veja se funciona !

 
Postado : 16/02/2014 11:54 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

OK, falha minha, devia ter perguntado antes o que queria quando postou somente a rotina no primeiro post.

Pela sua resposta, percebo que não tem afinidade com o VBA, sendo assim, onde eu disse:
Evento da Worksheet São as Rotinas colocadas diretamente a serem executadas na Aba em que são colocadas, "Worksheet_Change" se refere as alterações efetuadas somente nesta aba, ou seja clicando com o Botão Direito na Aba em questão e selecionando "Exibir Codigo", a tela do VBA que aparecerá é referente a esta Aba somente, e o Evento citado pertence somente a ela.

Então, as instruções que colocou em um Modulo separado (Worksheet_Change), apague e cole no modulo da Aba em que quer controlar as alterações, e as instruções referentes a API (#If VBA7 Then ....) coloque no Modulo que criou.
Agora irá funcionar corretamente.

[]s

 
Postado : 16/02/2014 12:01 pm
(@vonzuben)
Posts: 549
Prominent Member
Topic starter
 

Deu certo
Em 1998 cheguei ler um pequeno livro e fiz uma programinha, mas depois nunca mais mexi

Obrigado !

 
Postado : 16/02/2014 1:54 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Caso seja necessário reabrir o tópico, o autor poderá enviar uma MP para um dos moderadores solicitando o desbloqueio.

 
Postado : 16/02/2014 3:45 pm