Olá, Visitante. Por favor entre ou registe-se se ainda não for membro.

Entrar com nome de utilizador, password e duração da sessão
 

Autor Tópico: Excel (Duvida)  (Lida 41315 vezes)

Automek

  • Ordem dos Especialistas
  • Hero Member
  • *****
  • Mensagens: 30976
    • Ver Perfil
Re: Excel (Duvida)
« Responder #180 em: 2020-05-31 12:35:16 »
Sobre a conversa do DeMelo e do Robusto sobre os dois monitores, deixo uma dica do Excel que não sei se é conhecida por toda a gente. Pode ser que alguém desconheça e vale a pena.

Há a possibilidade de abrir uma nova janela do mesmo ficheiro de excel (ficando, por exemplo, cada janela em monitores diferentes). Isto pode ser útil para quem precisa de verificar formulas distantes umas das outras ou quer visualizar duas zonas diferentes do mesmo ficheiros. Já existia o Split há muitos anos, o que é bom, mas esta funcionalidade para mim é ainda melhor. Não sei quando surgiu, nem em que versão, mas só há um ano ou coisa assim é que a descobri.
Basta ir a View - New Window
https://www.excelcampus.com/tips/new-window/

Claro que estaremos a trabalhar no mesmo ficheiro, não importa qual a janela que se utilize.

deMelo

  • Ordem dos Especialistas
  • Hero Member
  • *****
  • Mensagens: 12687
    • Ver Perfil
Re: Excel (Duvida)
« Responder #181 em: 2020-05-31 12:42:39 »
Ui... maravilha.
Nao conhecia.

(Como disse, sou muito básico no Excel)
The Market is Rigged. Always.

Blaster

  • Ordem dos Especialistas
  • Hero Member
  • *****
  • Mensagens: 1649
    • Ver Perfil
Re: Excel (Duvida)
« Responder #182 em: 2020-06-01 08:10:56 »
Vou experimentar, obrigado.
Na economia tudo se compra.
A Good Year.

rs_trader

  • Ordem dos Especialistas
  • Hero Member
  • *****
  • Mensagens: 3259
    • Ver Perfil
    • Algo Trading Strategies and Trading System Development and Evaluation.
Re: Excel (Duvida)
« Responder #183 em: 2020-09-12 10:02:29 »

Citar

Sub PRNtoPRN()
    Dim xWs As Worksheet
    Dim xcsvFile As String
    For Each xWs In Application.ActiveWorkbook.Worksheets
        xWs.Copy
        xcsvFile = CurDir & "\" & xWs.Name & ".PRN"
        Application.ActiveWorkbook.SaveAs Filename:=xcsvFile, FileFormat:=xlCSV
        Application.ActiveWorkbook.Saved = True
        Application.ActiveWorkbook.Close
    Next
End Sub


Sabem dizer-me como eu consigo gravar os ficheiros resultantes da macro acima para uma diretoria especifica. Atualmente grava na "Current Dir" que pode ser qualquer uma. eu pretendia numa especifica.
« Última modificação: 2020-09-12 10:03:02 por rs_trader »
Em memória do grande DeMelo: "PQP... gajo chato fdx."

Robusto

  • Ordem dos Especialistas
  • Hero Member
  • *****
  • Mensagens: 1830
    • Ver Perfil
Re: Excel (Duvida)
« Responder #184 em: 2020-09-12 11:03:09 »
Consegues. Se for numa pasta predefinida já à partida por ti, podes ir à pasta em questão e copiar/colar o caminho aí. Imagina que queres guardar no desktop seria algo do género

C:\Users\Robusto\Desktop

Assim sendo, na macro o caminho fica:

Citar
    For Each xWs In Application.ActiveWorkbook.Worksheets
        xWs.Copy
        xcsvFile = "C:\Users\Robusto\Desktop" & "\" & xWs.Name & ".PRN"
        Application.ActiveWorkbook.SaveAs Filename:=xcsvFile, FileFormat:=xlCSV


Ou se quiseres que o caminho seja dinamico, no inicio da formula podes colocar:

Citar
Dim CurDir as String
CurDir = Range("A1").Value

Em que a célula A1 tens a primeira parte do caminho.

rs_trader

  • Ordem dos Especialistas
  • Hero Member
  • *****
  • Mensagens: 3259
    • Ver Perfil
    • Algo Trading Strategies and Trading System Development and Evaluation.
Re: Excel (Duvida)
« Responder #185 em: 2020-09-12 12:20:31 »
Consegues. Se for numa pasta predefinida já à partida por ti, podes ir à pasta em questão e copiar/colar o caminho aí. Imagina que queres guardar no desktop seria algo do género

C:\Users\Robusto\Desktop

Assim sendo, na macro o caminho fica:

Citar
    For Each xWs In Application.ActiveWorkbook.Worksheets
        xWs.Copy
        xcsvFile = "C:\Users\Robusto\Desktop" & "\" & xWs.Name & ".PRN"
        Application.ActiveWorkbook.SaveAs Filename:=xcsvFile, FileFormat:=xlCSV


Ou se quiseres que o caminho seja dinamico, no inicio da formula podes colocar:

Citar
Dim CurDir as String
CurDir = Range("A1").Value

Em que a célula A1 tens a primeira parte do caminho.

Era mesmo essa dica que precisava. Obrigado.
Em memória do grande DeMelo: "PQP... gajo chato fdx."

rs_trader

  • Ordem dos Especialistas
  • Hero Member
  • *****
  • Mensagens: 3259
    • Ver Perfil
    • Algo Trading Strategies and Trading System Development and Evaluation.
Re: Excel (Duvida)
« Responder #186 em: 2020-09-15 21:25:56 »
Consegues. Se for numa pasta predefinida já à partida por ti, podes ir à pasta em questão e copiar/colar o caminho aí. Imagina que queres guardar no desktop seria algo do género

C:\Users\Robusto\Desktop

Assim sendo, na macro o caminho fica:

Citar
    For Each xWs In Application.ActiveWorkbook.Worksheets
        xWs.Copy
        xcsvFile = "C:\Users\Robusto\Desktop" & "\" & xWs.Name & ".PRN"
        Application.ActiveWorkbook.SaveAs Filename:=xcsvFile, FileFormat:=xlCSV


Ou se quiseres que o caminho seja dinamico, no inicio da formula podes colocar:

Citar
Dim CurDir as String
CurDir = Range("A1").Value

Em que a célula A1 tens a primeira parte do caminho.

Era mesmo essa dica que precisava. Obrigado.

Já agora, existe alguma forma de adicionar uma linha de código que permita que quando já existe o ficheiro na diretoria ele fazer o overrride?
Em memória do grande DeMelo: "PQP... gajo chato fdx."

Robusto

  • Ordem dos Especialistas
  • Hero Member
  • *****
  • Mensagens: 1830
    • Ver Perfil
Re: Excel (Duvida)
« Responder #187 em: 2020-09-15 22:52:41 »
Eu podia jurar que ele faria o overwrite automaticamente, contando que o nome do ficheiro seja o mesmo. Qual o comportamento que te está a ser devolvido? (está a duplicar-te o ficheiro, não grava o ficheiro novo, etc?)

rs_trader

  • Ordem dos Especialistas
  • Hero Member
  • *****
  • Mensagens: 3259
    • Ver Perfil
    • Algo Trading Strategies and Trading System Development and Evaluation.
Re: Excel (Duvida)
« Responder #188 em: 2020-09-15 22:57:49 »
Pergunta se quero substituir o que lá está.
Em memória do grande DeMelo: "PQP... gajo chato fdx."

Robusto

  • Ordem dos Especialistas
  • Hero Member
  • *****
  • Mensagens: 1830
    • Ver Perfil
Re: Excel (Duvida)
« Responder #189 em: 2020-09-16 00:02:21 »
ok.

Bem, um workaround seria adicionar uma variável que tenhas a certeza que nunca se repete ao nome do ficheiro. Por exemplo, usando a fórmula NOW() ficas com a data do momento até aos segundos. Impossível de repetir nesse cenário. Tens é que substituir os carateres especiais "/" e ":" (que o windows não aceita como nome de ficheiro) por algo como um simples ponto "." (podias substituir por algo em branco, mas no meu teste nao correu bem). Como eu sou maçarico, estou a fazer um replace dentro de outro replace, porque quero substituir duas condições.

Seria algo assim:

Citar
xcsvFile = "C:\Users\Robusto\Desktop" & "\" & xWs.Name & "_" & Replace(Replace(Now, ":", "."), "/", ".")) & ".PRN"


Se repetir ficheiros não for realmente uma alternativa, eu estou a pensar num caminho menos convencional, que é colocares uma linha de código (logo no início da macro) em que vais diretamente à pasta e eliminas o ficheiro que tens lá. Como já sabes todas as condições que constituem o nome, é só repetir o mesmo caminho. Depois a fórmula rodaria normalmente, como o ficheiro anterior já foi eliminado, não repeterias nada. Instruções aqui: https://www.wallstreetmojo.com/vba-delete-file/


Automek

  • Ordem dos Especialistas
  • Hero Member
  • *****
  • Mensagens: 30976
    • Ver Perfil
Re: Excel (Duvida)
« Responder #190 em: 2020-09-16 06:12:47 »
experimenta se meter

wbk.Application.DisplayAlerts = False

antes da linha do save resolve a questão

rs_trader

  • Ordem dos Especialistas
  • Hero Member
  • *****
  • Mensagens: 3259
    • Ver Perfil
    • Algo Trading Strategies and Trading System Development and Evaluation.
Re: Excel (Duvida)
« Responder #191 em: 2020-09-16 07:55:17 »
ok.

Bem, um workaround seria adicionar uma variável que tenhas a certeza que nunca se repete ao nome do ficheiro. Por exemplo, usando a fórmula NOW() ficas com a data do momento até aos segundos. Impossível de repetir nesse cenário. Tens é que substituir os carateres especiais "/" e ":" (que o windows não aceita como nome de ficheiro) por algo como um simples ponto "." (podias substituir por algo em branco, mas no meu teste nao correu bem). Como eu sou maçarico, estou a fazer um replace dentro de outro replace, porque quero substituir duas condições.

Seria algo assim:

Citar
xcsvFile = "C:\Users\Robusto\Desktop" & "\" & xWs.Name & "_" & Replace(Replace(Now, ":", "."), "/", ".")) & ".PRN"


Se repetir ficheiros não for realmente uma alternativa, eu estou a pensar num caminho menos convencional, que é colocares uma linha de código (logo no início da macro) em que vais diretamente à pasta e eliminas o ficheiro que tens lá. Como já sabes todas as condições que constituem o nome, é só repetir o mesmo caminho. Depois a fórmula rodaria normalmente, como o ficheiro anterior já foi eliminado, não repeterias nada. Instruções aqui: https://www.wallstreetmojo.com/vba-delete-file/

Esta solução não daria porque preciso que tenha sempre o mesmo nome.
Em memória do grande DeMelo: "PQP... gajo chato fdx."

rs_trader

  • Ordem dos Especialistas
  • Hero Member
  • *****
  • Mensagens: 3259
    • Ver Perfil
    • Algo Trading Strategies and Trading System Development and Evaluation.
Re: Excel (Duvida)
« Responder #192 em: 2020-09-16 07:55:55 »
experimenta se meter

wbk.Application.DisplayAlerts = False

antes da linha do save resolve a questão

Vou tentar mais logo!
Em memória do grande DeMelo: "PQP... gajo chato fdx."

rs_trader

  • Ordem dos Especialistas
  • Hero Member
  • *****
  • Mensagens: 3259
    • Ver Perfil
    • Algo Trading Strategies and Trading System Development and Evaluation.
Re: Excel (Duvida)
« Responder #193 em: 2020-09-16 21:14:43 »
Assim? Dá erro.

Citar
Sub PRNtoPRN()
    Dim xWs As Worksheet
    Dim xcsvFile As String
    For Each xWs In Application.ActiveWorkbook.Worksheets
        xWs.Copy
        wbk.Application.DisplayAlerts = False
        xcsvFile = "C:\MetaStock Data" & "\" & xWs.Name & ".PRN"
        Application.ActiveWorkbook.SaveAs Filename:=xcsvFile, FileFormat:=xlCSV
        Application.ActiveWorkbook.Saved = True
        Application.ActiveWorkbook.Close
    Next
End Sub

Em memória do grande DeMelo: "PQP... gajo chato fdx."

Automek

  • Ordem dos Especialistas
  • Hero Member
  • *****
  • Mensagens: 30976
    • Ver Perfil
Re: Excel (Duvida)
« Responder #194 em: 2020-09-16 21:23:29 »
RS experimenta só

Application.DisplayAlerts = False

se não der desisto.
« Última modificação: 2020-09-16 21:23:48 por Automek »

Robusto

  • Ordem dos Especialistas
  • Hero Member
  • *****
  • Mensagens: 1830
    • Ver Perfil
Re: Excel (Duvida)
« Responder #195 em: 2020-09-16 21:24:43 »
A parte do wbk tem que ser adaptada ao ficheiro que estás a trabalhar. Experimenta algumas variantes:

Citar
Workbook.Application.DisplayAlerts = False

ou experimenta colocar diretamente:

Citar
Application.DisplayAlerts = False


E acho que tens que colocar essa linha de código, logo a seguir a um dos "Dim". Ou seja, fora do loop do "For Each".

Acho também importante colocares uma linha antes da End Sub a deixar novamente o DisplayAlerts como verdadeiro. Basicamente o que esse codigo está a pedir é para passar por cima dos alertas.


Robusto

  • Ordem dos Especialistas
  • Hero Member
  • *****
  • Mensagens: 1830
    • Ver Perfil
Re: Excel (Duvida)
« Responder #196 em: 2020-09-16 21:27:37 »
Tirado daqui, acho que é isto que precisas fazer:

https://www.teachexcel.com/excel-tutorial/2015/overwrite-an-existing-file-using-vba-in-excel

Citar
Sub Save_File_Overwrite()

' Don't show confirmation window
Application.DisplayAlerts = False

' Save the current workbook as Test.xlsm
' 51 for regular file
' 52 for macro enabled workbook
ThisWorkbook.SaveAs "C:\Directory\Test.xlsm", 52

' Allow confirmation windows to appear as normal
Application.DisplayAlerts = True

End Sub

rs_trader

  • Ordem dos Especialistas
  • Hero Member
  • *****
  • Mensagens: 3259
    • Ver Perfil
    • Algo Trading Strategies and Trading System Development and Evaluation.
Re: Excel (Duvida)
« Responder #197 em: 2020-09-16 21:43:07 »
Tirado daqui, acho que é isto que precisas fazer:

https://www.teachexcel.com/excel-tutorial/2015/overwrite-an-existing-file-using-vba-in-excel

Citar
Sub Save_File_Overwrite()

' Don't show confirmation window
Application.DisplayAlerts = False

' Save the current workbook as Test.xlsm
' 51 for regular file
' 52 for macro enabled workbook
ThisWorkbook.SaveAs "C:\Directory\Test.xlsm", 52

' Allow confirmation windows to appear as normal
Application.DisplayAlerts = True

End Sub



Citar
Sub PRNtoPRN()
    Dim xWs As Worksheet
    Dim xcsvFile As String
    For Each xWs In Application.ActiveWorkbook.Worksheets
        Application.DisplayAlerts = False
        xWs.Copy
        xcsvFile = "C:\MetaStock Data" & "\" & xWs.Name & ".PRN"
        Application.ActiveWorkbook.SaveAs Filename:=xcsvFile, FileFormat:=xlCSV
        Application.ActiveWorkbook.Saved = True
        Application.ActiveWorkbook.Close
        Application.DisplayAlerts = True
    Next
End Sub

Nice. Working. Obrigado a ambos.
« Última modificação: 2020-09-16 21:43:52 por rs_trader »
Em memória do grande DeMelo: "PQP... gajo chato fdx."

vbm

  • Hero Member
  • *****
  • Mensagens: 13769
    • Ver Perfil
Re: Excel (Duvida)
« Responder #198 em: 2024-01-30 08:52:08 »
Para mim, tem sido um mistério impenetrável de há anos!

Não consigo perceber porquê e como não consigo
«protect a worksheet» e manter «unprotect one cell»
ou algumas áreas de células desbloqueadas, alteráveis!

É algo lógico e fundamental que ignoro e tenho
sido sempre obrigado a deixar tudo desbloqueado.
« Última modificação: 2024-01-30 09:45:33 por vbm »

D. Antunes

  • Ordem dos Especialistas
  • Hero Member
  • *****
  • Mensagens: 5284
    • Ver Perfil
Re: Excel (Duvida)
« Responder #199 em: 2024-01-30 20:17:49 »
Talvez usando o Acess. Ficas com uma estrutura em que podes proteger e dados que podes alterar num formulário.
“Price is what you pay. Value is what you get.”
“In the short run the market is a voting machine. In the long run, it’s a weighting machine."
Warren Buffett

“O bom senso é a coisa do mundo mais bem distribuída: todos pensamos tê-lo em tal medida que até os mais difíceis de contentar nas outras coisas não costumam desejar mais bom senso do que aquele que têm."
René Descartes