Notifications
Clear all

Workbook erro ao abrir duas planilhas

7 Posts
2 Usuários
0 Reactions
1,800 Visualizações
Lorenzon
(@lorenzon)
Posts: 355
Reputable Member
Topic starter
 

Prezados, boa tarde!

Desenvolvo e utilizo um sistema de controle de despesas pessoais todo em VBA. Este funciona perfeitamente, porém, infelizmente, convivo com um incomodo tremendo, pois caso eu executá-lo ''por cima'' de outra planilha qualquer, o projeto referido apresenta o seguinte erro:

Utilizo este código no work book. Este fórum, teoricamente, ajudaria-me, mas não consegui, O que farei?:

viewtopic.php?f=10&t=8920

'Silently register a file with administrator elevated access
Sub RegisterFile(ByVal sFileName As String)
    ShellExecute 0, "runas", "cmd", "/c regsvr32 /s " & """" & sFileName & """", "C:", 0 'SW_HIDE =0
End Sub

'Silently unregister a file with administrator elevated access
Sub UnRegisterFile(ByVal sFileName As String)
    ShellExecute 0, "runas", "cmd", "/c regsvr32 /u /s " & """" & sFileName & """", "C:", 0 'SW_HIDE =0
End Sub
 

Sub Executar_Programação()
  Application.Visible = False
  UserForm7.Show
  Application.Visible = True
End Sub
Private Sub Workbook_Activate()
Sheets("bd").Select
UserForm7.Show vbModeless 'vbModeless = Sem restrição de janela (Permite trabalhar com mais de um form ao mesmo tempo)

End Sub
Private Sub Workbook_AfterSave(ByVal Success As Boolean)
Sheets("tela de boas vindas").Select
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
ws.Visible = True
Next ws
End Sub
Private Sub Workbook_Open()

Dim r As Range
Dim r1 As Range
Set r = Worksheets("bd").Range("A2").CurrentRegion
Set r1 = r.Offset(r.Rows.Count, 0)

ThisWorkbook.Worksheets("bd").Activate

Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
ws.Visible = True
Next ws

Application.Visible = False

Application.OnKey "{Escape}", ""
 ActiveWindow.TabRatio = 0
 
Dim PCName As String
Dim P As Long
P = NameOfPC(PCName)
text1 = Trim(PCName)
[da1] = (text1)
        
        UserForm7.Show
        
End Sub
Sub ip()
 Dim wsh As Object
        Dim RegEx As Object, RegM As Object
        Dim FSO As Object, fil As Object
        Dim ts As Object, txtAll As String, TempFil As String
        Set wsh = CreateObject("WScript.Shell")
        Set FSO = CreateObject("Scripting.FileSystemObject")
        Set RegEx = CreateObject("vbscript.regexp")
        TempFil = Environ$("TEMP")
        If Right(TempFil, 1) <> "" Then TempFil = TempFil & ""
        TempFil = TempFil & "myip.txt"
         ' Save ipconfig info to temporary file
        wsh.Run "%comspec% /c ipconfig > " & TempFil, 0, True
        With RegEx
            .Pattern = "(d{1,3}.){3}d{1,3}"
            .Global = False
        End With
        Set fil = FSO.GetFile(TempFil)
         ' Access temporary file
        Set ts = fil.OpenAsTextStream(1)
        txtAll = ts.ReadAll
        Set RegM = RegEx.Execute(txtAll)
         ' Return IP address to Activesheet cell A1 by parsing text
        ActiveSheet.Range("cx1").Value = RegM(0)
        ActiveSheet.Range("cx1").EntireColumn.AutoFit
        ts.Close
         ' Remove temp file
        Kill TempFil
         
        Set ts = Nothing
        Set wsh = Nothing
        Set fil = Nothing
        Set FSO = Nothing
        Set RegM = Nothing
       Set RegEx = Nothing
   
    Dim lastRow As Object
Set lastRow = Plan41.Range("bz:bz").End(xlUp)
lastRow.Offset(0, 0).Value = 2

    Sheets("tela de boas vindas").Select

UserForm7.Show
End Sub
 
Postado : 08/08/2014 1:29 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde!!

Isso é para qualquer outro arquivo que você tente abrir?

Att

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 08/08/2014 1:49 pm
Lorenzon
(@lorenzon)
Posts: 355
Reputable Member
Topic starter
 

Alexandre,

Se não tiver planilhas abertas, o meu projeto abre sem problemas, do contrário ele apresenta o erro mencionado.

Pode ser qualquer planilha, ate mesmo as vazias.

 
Postado : 08/08/2014 2:27 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Tente substituir essa linha de código, que está no módulo EstaPastaDeTrabalho,

Private Sub Workbook_Open()

por essa:

Private Sub Workbook_Open()
ThisWorkbook.Activate

É uma alternativa que parece boba, mas eu penso que o subscrito fora do intervalo deve acontecer toda vez que vc em código tenta referenciar uma planilha do seu arquivo, mas outro arquivo está aberto...

outra alternativa é verificar que nunca você use o Sheets ou o Worksheets sem determinar de qual arquivo vc está falando. Isso faz com que o Excel sempre tente procurar aquela Worksheets no arquivo ativo, que pode não ser onde o código está rodando.

Assim, coloque "ThisWorkbook." grudadinho em todas as referências não definidas de Worksheets....

Ou seja, todas as linhas onde vc usa "Worksheets(" sem nada antes, coloque "ThisWorkbook.Worksheets("

Good luck

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 08/08/2014 4:07 pm
Lorenzon
(@lorenzon)
Posts: 355
Reputable Member
Topic starter
 

Fernando,

Simples e perfeito! Matou a charada!

Abraço!

 
Postado : 09/08/2014 5:45 am
Lorenzon
(@lorenzon)
Posts: 355
Reputable Member
Topic starter
 

Fernando,

Simples e perfeito! Matou a charada!

Abraço!

Talvez seja necessário eu abrir um novo tópico, não sei, mas, aproveitando o gancho, apresento uma situação parecida com o problema resolvido aqui por você.

É o seguinte, caso o projeto em questão estiver aberto, ou seja, com a userform maximizada e/ou minimizada e eu abrir um outro projeto qualquer, com userform, o meu projeto (despesas pessoais) é, automaticamente maximizado, impedindo a abertura do outro projeto.

Existe a possibilidade de executarmos dois projetos? Lembrando que o projeto de despesas pessoais possui, na userform, os botões de minimiza, máximar.

 
Postado : 09/08/2014 9:51 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

É possível abrir qtos projetos vc quiser. MAS é importante lembrar que TODAS as linhas de código que referenciam planilhas e células precusam referenciar corretamente, ou seja, endereço completo da célula.
Pq? Pq senão o Excel conclui e assume que o código está "falando" do arquivo ativo.
Por exemplo, erros MUITO comuns:

Range("A").Value = "TESTE"
Worksheets("Planilha").Range("A1").value = "Teste"

No primeiro caso, se vc quer mudar o conteúdo de A1 na planilha ativa, ok, mas se for outra, que nào está ativa, é errado, pois vc não diz aonde é esta célula A1.
No segundo caso, o Excel vai procurar no arquivo ativo a planilha chamada Planilha. Se não encontrar, vc vai ler: "Subscrito fora do intervalo".

Portanto, se quiser trabalhar com múlplos projetos simultaneamente, revise todos os códigos, e seja cuidadoso, mas enfie nessas linhas o endereçamento completo a que cada linha de código se refere.

ah, e aprenda a usar o

With UmObjetoQualquer
End With

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 10/08/2014 8:11 pm