[Duvidas] Microsoft Excel

SwimmerBoy

Folding Member
Boas pessoal

Tenho um plano diário com várias horas de entrada e várias horas de saída. Tenho um campo que contabiliza as horas com uma simples conta de subtracção entre a hora de saída e a hora de entrada. Até aqui, tudo bem.

No meio das horas de entrada, tenho campos que são preenchidos com texto.

Os meus problemas são:
- neste momento estou a "ir buscar automaticamente" as horas de entrada e saída a uma folha de cálculo diferente, dentro do mesmo livro, com algo do género

- É possível preencher as tabelas com apenas "A2","I5" e criar uma macro que troque o que está em cada célula por "=horas!A2","=horas!I5" ?

- preciso de contar o numero de entradas entre as 7 e as 10 (por exemplo), como faço um "entre horas"?

Se é possível, como fazer?
 
- É possível preencher as tabelas com apenas "A2","I5" e criar uma macro que troque o que está em cada célula por "=horas!A2","=horas!I5" ?

Porque queres fazer isso?


- preciso de contar o numero de entradas entre as 7 e as 10 (por exemplo), como faço um "entre horas"?

Assim sem pensar muito, crias uma nova coluna com =IF(A1>=7:00 AND A1<=10:00;1;0),
depois usa o contif =COUNTIF("B1:B10";1)

O IF é que tens de ver como comparas com horas. No countif, em vez de B1:B10, metes o range onde tens o IF.
 
Porque queres fazer isso?

Assim sem pensar muito, crias uma nova coluna com =IF(A1>=7:00 AND A1<=10:00;1;0),
depois usa o contif =COUNTIF("B1:B10";1)

O IF é que tens de ver como comparas com horas. No countif, em vez de B1:B10, metes o range onde tens o IF.

Tenho uma folha onde vou buscar as horas, dai o "horas!A4"
Por não ser de todo prático preencher uma folha com "=horas!A4" "=horas!B49", especialmente quando preenche-se "a olho" duma fonte de "A4", "B49".

Ou seja, precisava de preencher várias células com A1,A2,A3...Z69,Z70 e no final automatizar uma maneira de passar essa celula de (por ex) F46 para uma formula de "=horas!F46"

Fiz-me entender?
 
Tenho uma folha onde vou buscar as horas, dai o "horas!A4"
Por não ser de todo prático preencher uma folha com "=horas!A4" "=horas!B49", especialmente quando preenche-se "a olho" duma fonte de "A4", "B49".

Ou seja, precisava de preencher várias células com A1,A2,A3...Z69,Z70 e no final automatizar uma maneira de passar essa celula de (por ex) F46 para uma formula de "=horas!F46"

Fiz-me entender?

Fizeste...

Não dá para inserires o valor numa célula, e depois "arrastar" para copiar para as restantes?

Se quiseres uma macro, só tens de ler o valor da célula (ex: A4) e depois concatenar com "horas!".
Ficas com "horas!A4", e associas isto à mesma célula, como fórmula.
 
Não dá para arrastar, porque as horas introduzidas não estão todas seguidas, saltam bastante.

Acerca da macro, eu consegui fazer uma macro que realmente muda o valor da célula, mas quando tento correr a macro para todas as outras células, ele altera-me o valor inicial da célula.

Ou seja, faço a macro para A4, ela corre bem naquela célula, mas se for correr a macro numa célula que tenha F10, já não vai "escrever" o "horas!F10", escreve "horas!XXX" sendo que XXX deixa de ser o valor que lá estava e passa a ter um que nada tem a ver...
 
Tenta com esta macro.

Sub Macro1()
'
' Keyboard Shortcut: Ctrl+q
'

ActiveCell.Formula = "=Horas!" & ActiveCell.Value

End Sub

Se usares numa célula vazia ou com dados que não sejam do tipo ColunaLinha já sabes que vai dar erro, mas até para isso é possível arranjar código.
 
Porreiro, já faz qualquer coisa...

Em vez de ser a ActiveCell, é possivel ser um conjunto de células que tenha seleccionado?

Ou seja, selecciono uma série de células (2 colunas e algumas linhas) e ao carregar na macro, ele mudava tudo?

Melhor do que isso, era correr a macro e automaticamente fazer a alteração de B2 até C20...
 
Última edição:
Sub Macro1()
'
'
' Keyboard Shortcut: Ctrl+q
'
For Each Bcell In Selection

Bcell.Formula = "=Horas!" & Bcell.Value

Next Bcell

End Sub

ou então:
Sub Macro1()
'
'
' Keyboard Shortcut: Ctrl+q
'
For Each Bcell In Range("B2:C20")

Bcell.Formula = "=Horas!" & Bcell.Value

Next Bcell

End Sub

Isto podia tar melhor, em vez de copiar a formula copiar o valor, ficava mais correcto. Mas a esta hora tou cheio de sono :P
 
Solução melhorada:

Sub Macro1()
'
'
' Keyboard Shortcut: Ctrl+q

On Error Resume Next

For Each Bcell In Selection

Bcell.Value = Sheets("Horas").Range(Bcell.Value)

Next Bcell

End Sub

SwimmerBoy, para teres certificação terias que pagar a uma empresa que passe certificações, a verisign por exemplo, e mesmo assim quem quisesse usar as tuas macros teria que aceitar a certificação da verisign.
Mais sobre o assunto -> http://www.excelsig.org/Tips/0409_digital_certificates.htm

Zylmhuin VII:

para o que ele quer funcionava.
A célula de origem contem dados do tipo "A1" , "C4", "B11", por isso ao copiar o seu valor para a minha função não era preciso "limpar" o sinal de igual ( "=" ) porque não existia.
 
Estou a ter um problema com as macros, não me permite corre-las



Pode encontrar este erro pelos seguintes motivos:
A segurança de macros está definida como:
Muito Alta e a aplicação encontra uma macro com assinatura, mas a macro foi automaticamente desactivada. Utilize o seguinte procedimento para activar a macro:
Seleccione a opção do menu Ferramentas e, em seguida, seleccione Macro e Segurança. Na caixa de diálogo Segurança resultante, defina o nível de segurança como Alta clicando no botão de opção Alta.
Feche o ficheiro e quaisquer outras instâncias da aplicação que estejam a ser executadas no computador (feche também todas as aplicações que estão a utilizar a aplicação que está a executar).
Abra o ficheiro e examine os detalhes do certificado de confiança e marque a caixa Confiar sempre nas macros provenientes deste fabricante se confia no certificado emitido pelo fornecedor.
Clique no botão Activar para permitir que a macro seja executada.
Alta e a aplicação encontra uma macro com assinatura, mas seleccionou Desactivar quando recebeu a caixa de diálogo de aviso de macro ao abrir o ficheiro. Utilize o seguinte procedimento para activar a macro:
Feche o ficheiro e quaisquer outras instâncias da aplicação que estejam a ser executadas no computador (feche também todas as aplicações que estão a utilizar a aplicação que está a executar).
Abra novamente o ficheiro e examine os detalhes do certificado de confiança e marque a caixa Confiar sempre nas macros provenientes deste fabricante se confia no certificado emitido pelo fornecedor.
Clique no botão Activar para permitir que a macro seja executada.
Alta ou Muito Alta e a macro não está assinada e foi automaticamente desactivada pela aplicação. Utilize o seguinte procedimento para activar a macro, caso tenha verificado que pode confiar na origem da macro sem assinatura:
Seleccione a opção do menu Ferramentas e, em seguida, seleccione Macro e Segurança. Na caixa de diálogo Segurança resultante, defina o nível de segurança como Média clicando no botão de opção Média.
Feche o ficheiro e quaisquer outras instâncias da aplicação que está a ser executada no computador.
Abra o ficheiro e clique no botão Activar quando lhe for perguntado se deseja permitir que a macro sem assinatura seja executada.
Quando aceitar a macro, volte a colocar o nível de segurança de macros na sua definição anterior.
Outra instância da sua aplicação bloqueou as definições de segurança e não permite que sejam efectuadas quaisquer alterações às definições de segurança.
Recomenda-se que feche todas as aplicações relacionadas com o Office ou outras instâncias da mesma aplicação quando tentar fazer alterações nas definições de segurança.
O Visual Basic for Applications (VBA) não está instalado no seu computador.
Se o VBA não está instalado, não é possível aceitar certificados de confiança anexados a macros VBA. Assim, qualquer macro VBA que tente executar, mesmo com um certificado de confiança anexado, não pode ser executada porque o intérprete de macros necessário não está instalado no sistema. Este erro pode ser provocado por dois cenários:
O administrador optou por não instalar o VBA
A versão do Office que está a executar não instala o VBA por predefinição
Se estiver a executar uma instância do Office que não forneça o VBA como uma funcionalidade instalável, tem de actualizar a versão do Office para executar macros VBA.
O certificado de confiança não é válido - (quando isto ocorre, não é possível seleccionar o botão Activar).
O certificado já não é de confiança, foi revogado pela entidade emissora ou está danificado. Existem várias outras possibilidades que poderá ser necessário explorar para determinar a razão pela qual o certificado já não é econhecido pelo sistema como sendo válido. Recomenda-se que não confie ou execute uma macro cujo certificado não seja válido.
Existe um tópico de ajuda para resolução de problemas disponível online, referente a este problema.
Mais informações sobre esta mensagem de erro online.
 
Acho que já ultrapassei o problema das macros mas a ultima macro só-me copia o valor e eu precisava mesmo que me copiasse a formula, como faz esta

Sub Macro1()
'
'
' Keyboard Shortcut: Ctrl+q
'
For Each Bcell In Range("C9:D47")

Bcell.Formula = "=Horas!" & Bcell.Value

Next Bcell

End Sub

No entanto, tenho um problema. Deu-me erro e para fazer debug e apontou para a linha
Bcell.Formula = "=Horas!" & Bcell.Value

Só modificou a primeira célula
 
Solução melhorada:



SwimmerBoy, para teres certificação terias que pagar a uma empresa que passe certificações, a verisign por exemplo, e mesmo assim quem quisesse usar as tuas macros teria que aceitar a certificação da verisign.
Mais sobre o assunto -> http://www.excelsig.org/Tips/0409_digital_certificates.htm

Zylmhuin VII:

para o que ele quer funcionava.
A célula de origem contem dados do tipo "A1" , "C4", "B11", por isso ao copiar o seu valor para a minha função não era preciso "limpar" o sinal de igual ( "=" ) porque não existia.

Fui eu que percebi mal ;)


Acho que já ultrapassei o problema das macros mas a ultima macro só-me copia o valor e eu precisava mesmo que me copiasse a formula, como faz esta


No entanto, tenho um problema. Deu-me erro e para fazer debug e apontou para a linha

Só modificou a primeira célula

A mim funciona bem...
 
O que fazes imediatamente antes de activares a macro? Seleccionas algo em particular?

PS: acho que descobri... Penso que seja por ter algumas células vazias...

tenho

A4
N8
vazia
N10

Dá erro (manda fazer debug) e o ultimo N10, já não o faz :(
 
Última edição:
O que fazes imediatamente antes de activares a macro? Seleccionas algo em particular?

PS: acho que descobri... Penso que seja por ter algumas células vazias...

tenho

A4
N8
vazia
N10

Dá erro (manda fazer debug) e o ultimo N10, já não o faz :(


Experimenta:

Sub Macro1()
'
'
' Keyboard Shortcut: Ctrl+q
'
For Each Bcell In Range("C9: D47")

If len(Bcell.Value) >0
Bcell.Formula = "=Horas!" & Bcell.Value
End If

Next Bcell

End Sub

Retira o espaço ente o : e o D no Range!
 
Run-time erroe '1004':
Application-defined or object-defined error

PS-Não tens de pedir desculpa, já ajudaste, continuas a ajudar, só posso agradecer...
 
Run-time erroe '1004':
Application-defined or object-defined error

PS-Não tens de pedir desculpa, já ajudaste, continuas a ajudar, só posso agradecer...

A mim dá-me isso quando tenho um célula que não tem um valor "correcto" para indicar a outra célula... tipo, ter lá "B" ou "1" em vez de "B1"...

Confirma se todas as células têm um valor correcto ou estão vazias...
 
Back
Topo