Jump to content
Sign in to follow this  
edsudani

Erro de Compilação

Recommended Posts

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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Edited by pmg

Share this post


Link to post
Share on other 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

Edited by acao

Share this post


Link to post
Share on other 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

Edited by edsudani

Share this post


Link to post
Share on other 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

Edited by acao

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.