Ir para o conteúdo
edsudani

Erro de Compilação

Mensagens Recomendadas

edsudani

Caros colegas, Erro de compilação é o retorno que obtenho ao salvar este livro. A mensagem completa é: "Erro de compilação: Nome repetido encontrado: wb"

No evento workbook_Open do livro principal chamo o procedimento para abrir outro livro: Call Abrir.

No módulo1 tenho o seguinte procedimento:

Sub Abrir()

Set wb = workbooks.Open ("C:\Planilhaseparada\planilha_Dados.xls")

End Sub

Código no botão Sair:

wb.save

Nota : wb está declarado como variável pública ao projeto inteiro.

public wb as workbook

O erro acontece quando clico no Botão Sair.

Eu já usei este recurso em outro aplicativo sem problemas mas agora retorna o erro acima.

Poderiam me ajudar ?

Edison

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
edsudani

Grato pelo retorno Acao. Sim, já fiz isso. Acontece que ao salvar no livro principal eu tenho o delay de ~~ 5".

Como expliquei anteriormente o método que estou tentando usar funciona perfeitamente em outro aplicativo semelhante, ao salvar dados injetados em outro livro no caso "planilha_dados.xls" não há demora. :confused:

No aplicativo anterior eu utilizava o código nos formulários e eram muitos. Atualmente utilizando vetores consegui reduzir o nº de formulários e a quantidade de código com esse método; simplifiquei o projeto como um todo.

Em tese creio que o código que postei acima deveria funcionar a contento, mas será que o uso de vetores interfere na execussão do procedimento para salvar?

Edison

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
acao

boas

percebi mal a sua questão, tem que ser conforme você tem, porque é para gravar no ficheiro aberto em Wb,

para resolver o erro tente assim:

em todas as folhas com codigo, no inicio verifique se tem «Option Explicit» senão coloque para obrigar a declarar todas as variaveis.

ultimo recurso coloque breakpoints e corra o programa para verificar aonde ele encontra esse erro.

cumps

acao

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
edsudani

Já usei breakpoints

O erro ocorre no código do Botão Sair: wb.save.

wb permanece marcado em azul , é justamente aí que surge a mensagem de erro.

em todas as folhas com codigo, no inicio verifique se tem «Option Explicit» senão coloque para obrigar a declarar todas as variaveis.

ultimo recurso coloque breakpoints e corra o programa para verificar aonde ele encontra esse erro.

Não sei se entendi corretamente, mas devo declarar em todos os módulos todas as variáveis como públicas, ou seja, referente ao módulo1, todas as variáveis de todos os procedimentos devem ser públicas a esse módulo?

Se isto for assim por qual razão?

Edison

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
acao

Já usei breakpoints

O erro ocorre no código do Botão Sair: wb.save.

wb permanece marcado em azul , é justamente aí que surge a mensagem de erro.

Não sei se entendi corretamente, mas devo declarar em todos os módulos todas as variáveis como públicas, ou seja, referente ao módulo1, todas as variáveis de todos os procedimentos devem ser públicas a esse módulo?

Se isto for assim por qual razão?

Edison

boas

não é para colocar todas as variaveis publicas no modulo.

o que deve fazer é utilizar o cod «Option Explicit».

este cod é colocado no inicio de cada folha com cod, seja modulo ou outra, quando utilizamos «Option Explicit» ficamos obrigados a declarar variaveis, caso contrario o ide pode aceitar variaveis sem serem declaradas ou declaradas 2 vezes.

é para controlar as variaveis. porque o erro indica que qualquer coisa não está bem nas variaveis.

cumps

acao

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
edsudani

Bom dia Acao. Veja o código do MóduloInserirSaldos:

Option Explicit

'Variável p/Select Case do TextBox Corrto.
Dim Sd As Single
Dim sCelula As String

'-------------------------------------------------------------------------

Sub InserirSaldos()

Dim n1 As Variant
Dim validar As Integer
n1 = 0
Dim sTituloInputBox As String 'Variável p/ título do ImputBox.

With Sheets("Formulários")
sCelula = .Cells(frmSds.Índice, eForm2.Celula)
sTituloInputBox = .Cells(frmSds.Índice, eForm2.TituloInputBox)
End With

With Sheets("Dados") 'Planilha Dados
Correcao:
n1 = Application.InputBox("ESCREVA O VALOR NA CAIXA DE TEXTO ABAIXO:", _
sTituloInputBox)
If (n1) = False Then 'Cancela a correção.
Exit Sub
End If

If IsNumeric(n1) Then 'Se for Número.
validar = 1
Else 'Se for Alfabeto.
validar = 2
End If

If n1 = "" Then 'Para Anular um Valor.
validar = 3
End If

Select Case validar 'Seleciona o evento correto.
Case validar = 1, validar = 2, validar = 3

'Caso Números

Case Is = 1
Worksheets("Dados").Range(sCelula).Value = ""
Worksheets("Dados").Range(sCelula).Value = CDbl(n1)
PreenchendoRotuloCorreto

'Caso Alfabeto.

Case Is = 2
' Frm_Mensagem.Show
SelecaoFrmMens = 3 'Mensagem Dados Incorretos
Call IniciarMensagens 'MdlIniciarFrmMensagem
GoTo Correcao

'Caso Anular um Valor.

Case Is = 3
' Frm_Exclusao.Show
SelecaoFrmMens = 2 'Mensagem de Exclusão
Call IniciarMensagens
If Exclusao = False Then 'Var. pública no Mdl.IniciarFrmRecibos
Exit Sub
Else 'ANULA O VALOR DA LINHA SELECIONADA E SALVA NA PLANILHA.
n1 = 0
Worksheets("Dados").Range(sCelula).Value = ""
Worksheets("Dados").Range(sCelula).Value = CDbl(n1)
PreenchendoRotuloCorreto

End If
End Select
End With
End Sub
'----------------------------------------------------------------------------
Sub PreenchendoRotuloCorreto()

' Seleciona e preenche o Rótulo correto.

Sd = frmSds.Índice 'Índice do Saldo selecionado.

Select Case Sd
Case Sd = 1 To Sd = 5

'Caso Receitas - Saldo transportado.
Case 1
frmSds.Label7 = Worksheets("Dados").Range(sCelula)

'Caso Conta Corrente.
Case 2
frmSds.Label8 = Worksheets("Dados").Range(sCelula)

'Caso Saldo Início do Mês - S 30 T.
Case 3
frmSds.Label10 = Worksheets("Dados").Range(sCelula)

'Caso Outros
Case 4
frmSds.Label9 = Worksheets("Dados").Range(sCelula)

'Caso Saldo Início Mês - Confronto S 30 T
Case 5
frmSds.Label11 = Worksheets("Dados").Range(sCelula)
End Select
End Sub

Como em todos so outros módulos, tudo funciona a contento, não há erros. Mas só a título de exemplo,como ficariam as declarações dessas variáveis nesse módulo ao aplicar tua sugestão? Todas as declarações feitas nos procedimentos Sub seriam agora declaradas em Option Explicit?

Tua sugestão deveria abranger todos os módulos do projeto?

Desculpe-me tantas perguntas, estou muito fraco nestas coisas, pergunto,leio e pesquiso onde quer que apresentem sujestões e informaçoes, mas para um autodidata neste assunto a compreensão e aplicação prática do que se lê é mais difícil.

Se puderes me orientar agradeço-te.

Edison

Editado por pmg

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
acao

boas

sim é isso que deve fazer em todos os modulos, e também em todas as folhas que tenham codigo.

depois de colocar esse cod e se o excel não informar que a variavel Wb está mal declarada, duas vezes declarada, etc, não lhe sei responder a razao do erro.

mas provavelmente algum user lhe dira mais alguma coisa.

cumps

acao

edit: acrecentar info

já pensou em eliminar o botão sair, e colocar o cod gravar no no fim do procedimento aonde trata os dados do ficheiro dados.

cumps

Editado por acao

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
edsudani

Sim já pensei nessa possibilidade, mas não resolve o problema principal que é o retardo para salvar tudo. Esse é motivo de salvar em outro livro.

Grato pela ajuda.

Edison

Editado por edsudani

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
acao

boas

penso que é má ideia de salvar ficheiro com outro para ser mais rapido, na logica ainda demorará mais tempo, amigo o ficheiro é pesado a unica solução é por a gravar apenas ao fechar.

Private Sub Workbook_BeforeClose(Cancel As Boolean)
ThisWorkbook.Save
End Sub

ou

http://msdn.microsoft.com/en-us/library/office/ff197585.aspx

cumps

acao

Editado por acao

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
edsudani

Grato pelo retorno e apoio Acao, pois é, apenas os dados serão salvos em outra planilha e garanto-lhe que é muito mais rápido que imaginas. Como disse lá atrás, o código que ora apresenta erro está em uso exatamente assim numa versão anterior deste aplicativo, uma versão muito mais pesada eu diria, e corre tudo muito rápido. Salva apenas os dados injetados na segunda planilha aberta no livro principal. Os formulários não são salvos, não é preciso salvar o que não é alterado. Como sabes formulários são apenas uma interface que não sofrem alterações(neste caso). Somente quando salvamos os formulários junto com os dados é que surge o problema. Daí a minha proposta, OK?

Edison

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.