Notifications
Clear all

2 planilhas abertas o VB da 1 pára ...

11 Posts
3 Usuários
0 Reactions
1,926 Visualizações
(@rhaone)
Posts: 6
Active Member
Topic starter
 

2 planilhas abertas o VB da 1 pára ...

Boa tarde ...

Tenho uma planilha "A" com um script em VB embutido e outra planilha "B" sem o script em VB ...

Sempre que estou a usar planilha "B" ... o VB embutido na planilha "A" pára de funcionar ...

Poderiam me dizer como configurar o Excel pra que isso não ocorra?

As duas planilhas precisam estar em arquivos ".XlS" diferentes e não como uma segunda aba dentro da primeira ...

Grato ...

Rhaone

 
Postado : 04/07/2016 2:33 pm
engeel2014
(@engeel2014)
Posts: 207
Estimable Member
 

Boa noite Rhaone, para facilitar a ajuda você deve postar os arquivos para o pessoal possa te ajudar.

Lucélio Ferreira dos Santos
Eng. Eletricista
CREA: DF-7165/TD
luceliosantos.projeto@gmail.com

 
Postado : 04/07/2016 4:15 pm
(@mprudencio)
Posts: 2749
Famed Member
 

Indique a pasta onde o codigo deve funcionar que provavelmente vai acabar o problema.

Algo do tipo

Thisworkbook.active., antes de iniciar o codigo

Marcelo Prudencio
Microsoft Excel Brasil no Facebook

"Começar já é a metade do caminho."
Autor Desconhecido

Simplifica que simples fica.
Nicole Tomazella.

"O Simples é Sempre Melhor Que o Complicado"
Jorge Paulo Lemann.

 
Postado : 04/07/2016 5:02 pm
(@rhaone)
Posts: 6
Active Member
Topic starter
 

Boa noite Rhaone, para facilitar a ajuda você deve postar os arquivos para o pessoal possa te ajudar.

Conforme solicitado aqui está o meu código copleto ... obrigado ...

 Dim papel_cel As Variant

  Public Sub pasta_cria()

    On Error GoTo pasta_ja_tem

    cNasdia = Right(Day(Date), 2)
    cNasMes = Right(Month(Date), 2)
    cNasAno = Right(Year(Date), 4)

    cNasdia = JustStr(cNasdia, 2, "0", True)
    cNasMes = JustStr(cNasMes, 2, "0", True)
    cNasAno = JustStr(cNasAno, 4, "0", True)

    Data = cNasAno + "-" + cNasMes + "-" + cNasdia

   'pasta = ThisWorkbook.Path & "Day Trade " & Data
   'pasta = ThisWorkbook.Path & "Day TradeDay Trade " & Data
   'pasta = ThisWorkbook.Path & "Day TradecotspinDay Trade " & Data
    pasta = ThisWorkbook.Path & "Daycotacoes_000Day Trade " & Data

    MkDir pasta

pasta_ja_tem:

  End Sub

  Public Sub Worksheet_Calculate()

    On Error GoTo deu_pau

    If Range("Plan2!A1").Value = 0 Then
      Exit Sub
    End If

    If Weekday(Date) < 2 Or Weekday(Date) > 6 Then
      Exit Sub
    End If

    If Format(Time(), "HH:mm:ss") < "08:45:00" Or Format(Time(), "HH:mm:ss") > "18:35:00" Then
      For Each papel_cel In Plan2.Range("Plan2!D12:Plan2!D142")
        papel_nome = papel_cel.Value 'MsgBox papel_nome
        If papel_nome = "#FIM" Then
          Exit For
        End If
        papel_cel.Offset(0, 7).Value = 0
      Next papel_cel
      Plan2.Range("Plan2!A2").Value = 0
      Application.ThisWorkbook.Save
      Application.Quit
      Exit Sub
    End If

    If Format(Time(), "HH:mm:ss") < "08:45:00" Then
      Exit Sub
    End If

    If Range("Plan2!A2").Value = 0 Then
      Plan2.Range("Plan2!A2").Value = 1
      pasta_cria
    End If

    Range("Plan2!D12").Select '// papel_nome

    For Each papel_cel In Plan2.Range("Plan2!D12:Plan2!D142")

      On Error GoTo muito_cedo

      papel_nome = papel_cel.Value 'MsgBox papel_nome

      If papel_nome = "#FIM" Then
        Exit For
      End If

      If Len(Trim$(papel_nome)) <> 0 Then

        If Plan2.Range("Plan2!C5").Value = "1" Then
          papel_ibovespa = Plan2.Range("Plan2!E5").Value
        Else
          papel_ibovespa = 0
        End If

        If Format(Time(), "HH:mm:ss") < "09:00:10" Then
          papel_ibovespa_e = "00000,00"
        End If

        If Format(Time(), "HH:mm:ss") >= "09:00:10" Then
          papel_ibovespa_e = Format(papel_ibovespa, "00000.00")
        End If

        papel_cotacao = papel_cel.Offset(0, 1).Value '// MsgBox papel_nome & " " & papel_cotacao

        If papel_cotacao <> papel_cel.Offset(0, 7).Value Then

          papel_cel.Offset(0, 7).Value = papel_cotacao

          If papel_cel.Offset(0, -1).Value <> "X" Then

             If (papel_cel.Offset(0, 6).Value = 3 Or _
                 papel_cel.Offset(0, 6).Value = 4 Or _
                 papel_cel.Offset(0, 6).Value = 5 Or _
                 papel_cel.Offset(0, 6).Value = 15) Then

                papel_cotacao_e = Format(papel_cotacao, "00000.00")
                papel_diario = papel_cel.Offset(0, -2).Value
                papel_diario_e = papel_diario
                papel_spread = papel_cel.Offset(0, 2).Value
                papel_volume = papel_cel.Offset(0, 5).Value
                papel_situac = papel_cel.Offset(0, 6).Value

                If papel_spread < 0 Or papel_spread = "-" Then
                  papel_spread = 0
                End If

                papel_spread_e = Format(papel_spread, "00.00")
                papel_volume_e = Format(papel_volume, "00000000000.00")

                If papel_ibovespa >= 0 Then
                  papel_ibovespa_e = "+" + papel_ibovespa_e
                End If

                If papel_spread >= 0 Then
                  papel_spread_e = "+" + papel_spread_e
                End If

                ordem = papel_cel.Offset(0, -3).Value
                ordem_e = Format(ordem, "000")

                cNasdia = Right(Day(Date), 2)
                cNasMes = Right(Month(Date), 2)
                cNasAno = Right(Year(Date), 4)

                cNasdia = JustStr(cNasdia, 2, "0", True)
                cNasMes = JustStr(cNasMes, 2, "0", True)
                cNasAno = JustStr(cNasAno, 4, "0", True)

                Data = cNasAno + "-" + cNasMes + "-" + cNasdia

                cNasSeg = Right(Second(Time), 2)
                cNasMin = Right(Minute(Time), 2)
                cNasHor = Right(Hour(Time), 2)

                cNasSeg = String$(2 - Len(Trim$(cNasSeg)), "0") + Trim$(cNasSeg)
                cNasMin = String$(2 - Len(Trim$(cNasMin)), "0") + Trim$(cNasMin)
                cNasHor = String$(2 - Len(Trim$(cNasHor)), "0") + Trim$(cNasHor)

                data_hora = cNasAno + "-" + cNasMes + "-" + cNasdia + " " + cNasHor + cNasMin + cNasSeg

                pont_sai = FreeFile

                pasta = ThisWorkbook.Path & "Daycotacoes_000Day Trade " & Data

                arquivo = pasta & "Day Trade " & papel_nome & " " & Data & " " & ordem_e & ".txt" ' MsgBox arquivo & "=2"
                
                Open arquivo For Append As pont_sai

                linha = JustStr(papel_nome, 10, " ") & " " & _
                        papel_cotacao_e & " " & _
                        data_hora & " " & _
                        papel_diario_e & " " & _
                        papel_ibovespa_e & " " & _
                        papel_spread_e & " " & _
                        papel_volume_e & " " & _
                        papel_situac

                       'papel_com_quant_melhor_e & " " & _
                       'papel_ven_quant_melhor_e & " " & _
                       'papel_ult_quant_e & " " & _

                  Print #pont_sai, linha

                  Close pont_sai

             End If 'If papel_cel.Offset(0, 6).Value == 3 Or

          End If 'If papel_cel.Offset(0, -1).Value <> "X" Then

        End If 'If papel_cotacao <> papel_cel.Offset(0, 7).Value Then

      End If 'If Len(Trim$(papel_nome)) <> 0 Then

muito_cedo:

    Next papel_cel

deu_pau:

  End Sub 'For Each papel_cel In Plan2.Range("Plan2!D12:Plan2!D142")

  Public Function JustStr(S, N As Integer, Optional C As String = " ", Optional P As Boolean = False) As String
    '----------------------------------------------------------- -----------------------
    ' Insere o caracter C, N vezes, na string S, justificando-a
    ' S = variant que recebe os dados a justificar
    ' C = caracter a ser inserido na justificação - se não informado " "
    ' N = número de caracteres a serem devolvidos pela função
    ' P = indica se a justificação deve ser à Esquerda (true) ou à Direita (False - Padrão)
    '----------------------------------------------------------- -----------------------
      If C = vbNullString Then
          C = " "
      End If
      If N < 1 Then
          JustStr = vbNullString
      Else
          If P Then
              JustStr = Right$(String$(N, Left$(C, 1)) & S, N)
          Else
              JustStr = Left$(S & String$(N, Left$(C, 1)), N)
          End If
      End If
  End Function
 
Postado : 05/07/2016 12:36 am
engeel2014
(@engeel2014)
Posts: 207
Estimable Member
 

Rhaone, você poderia postar a sua planilha explicando o que ela faz? assim fica mais fácil te ajudar. Somente o código fica complicado, pois não sabemos o que ele faz e não temos o corpo da planilha onde ele trabalha, e as vezes temos mais trabalho em decifrar o que o código faz do que contribuir com a correção do erro quando já sabemos o que se espera do código.

Lucélio Ferreira dos Santos
Eng. Eletricista
CREA: DF-7165/TD
luceliosantos.projeto@gmail.com

 
Postado : 06/07/2016 5:00 pm
(@rhaone)
Posts: 6
Active Member
Topic starter
 

Rhaone, você poderia postar a sua planilha explicando o que ela faz? assim fica mais fácil te ajudar. Somente o código fica complicado, pois não sabemos o que ele faz e não temos o corpo da planilha onde ele trabalha, e as vezes temos mais trabalho em decifrar o que o código faz do que contribuir com a correção do erro quando já sabemos o que se espera do código.

OK ... estou te enviando ... mas eu tive que reduzir as linhas de 130 para 3 porque as células são alimentadas por DDE de uma corretora que vocês não tem acesso ... essas linhas são todas iguais só mudando o nome do ativo ...

Onde havia os dados DDE da corretora tornei as células com os valores "1.23" pra que a planilha funcione sem os dados DDE ...

O código VBA está embutido na mesma onde também troquei D142 por D11 somente ...

Grato ...

 
Postado : 07/07/2016 6:06 am
(@rhaone)
Posts: 6
Active Member
Topic starter
 

Rhaone, você poderia postar a sua planilha explicando o que ela faz? assim fica mais fácil te ajudar. Somente o código fica complicado, pois não sabemos o que ele faz e não temos o corpo da planilha onde ele trabalha, e as vezes temos mais trabalho em decifrar o que o código faz do que contribuir com a correção do erro quando já sabemos o que se espera do código.

Ignorar o anexo anterior pois tive de adaptar ... troque por esse ...

 
Postado : 07/07/2016 6:12 am
(@rhaone)
Posts: 6
Active Member
Topic starter
 

Rhaone, você poderia postar a sua planilha explicando o que ela faz? assim fica mais fácil te ajudar. Somente o código fica complicado, pois não sabemos o que ele faz e não temos o corpo da planilha onde ele trabalha, e as vezes temos mais trabalho em decifrar o que o código faz do que contribuir com a correção do erro quando já sabemos o que se espera do código.

Alguém pode me dar uma luz? .... valeu! ...

 
Postado : 14/07/2016 11:08 am
engeel2014
(@engeel2014)
Posts: 207
Estimable Member
 

Na sua postagem, você informa que são 2 arquivos distintos e que um possui macros e o outro não, mas você só anexou somente um arquivo.

Lucélio Ferreira dos Santos
Eng. Eletricista
CREA: DF-7165/TD
luceliosantos.projeto@gmail.com

 
Postado : 15/07/2016 1:42 pm
(@mprudencio)
Posts: 2749
Famed Member
 

Eu juro que me esforço mas não entendo pq as pessoas que pedem ajuda não colaboram com elas mesmas.

Marcelo Prudencio
Microsoft Excel Brasil no Facebook

"Começar já é a metade do caminho."
Autor Desconhecido

Simplifica que simples fica.
Nicole Tomazella.

"O Simples é Sempre Melhor Que o Complicado"
Jorge Paulo Lemann.

 
Postado : 15/07/2016 3:21 pm
(@rhaone)
Posts: 6
Active Member
Topic starter
 

Na sua postagem, você informa que são 2 arquivos distintos e que um possui macros e o outro não, mas você só anexou somente um arquivo.

Sim ... duas planilhas uma em cada aba ... no mesmo arquivo ...

De qualquer forma depois de muitas tentativas e erros descobri o problema ...

Eu havia posto esta linha "Range ("Plan2!D6").Select " que julgava ser necessario pra usar "offset" (papel_cel.Offset(0, 7).Value ... por exemplo)'' ... mas como já existe "For Each papel_cel In Plan2.Range("Plan2!D6:Plan2!D149")" ... o objeto já posiciona automaticamente na mesma ...

Foi só retirar a linha com o "Select" que tudo funcionou ...

Grato a todos pelo esforço ...

 
Postado : 27/07/2016 7:29 pm