Como eu crio uma macro VBA que copie dados de uma folha de entrada, em uma folha de resumo por data

3

Estou tentando criar uma macro que copie dados de uma folha de entrada de dados em uma folha de resumo. A folha de registro será apagada diariamente, então não posso usar uma fórmula apenas para fazer referência a ela. Eu quero que o usuário seja capaz de inserir uma data, executar uma macro e ter a macro copiar os dados da folha de entrada para as células para a data correspondente na folha de resumo. Eu olhei em volta e encontrei pedaços de como fazer isso, mas não consigo juntar tudo.

Atualização:

Graças às informações abaixo, consegui encontrar alguns dados adicionais. Eu tenho uma macro muito crua que funciona se o usuário seleciona manualmente a célula correta. Agora eu só preciso descobrir como selecionar automaticamente a célula atual em relação à data atual.

Sub Update_Deposits()  
'  
' Update_Deposits Macro  
'  

Dim selectedDate As String  
Dim rangeFound As Range  
selectedDate = Sheets("Summary Sheet").Range("F3")  
Set rangeFound = Sheets("Deposits").Cells.Find(CDate(selectedDate))  


Dim Total1 As Double  
Dim Total2 As Double  
Dim Total3 As Double  
Dim Total4 As Double  
Dim Total5 As Double  

  Total1 = Sheets("Summary Sheet").Range("E6")  
  Total2 = Sheets("Summary Sheet").Range("E7")  
  Total3 = Sheets("Summary Sheet").Range("E8")  
  Total4 = Sheets("Summary Sheet").Range("E9")  
  Total5 = Sheets("Summary Sheet").Range("E10")  

If Not (rangeFound Is Nothing) Then  
    rangeFound.Offset(0, 2) = Total1  
    rangeFound.Offset(0, 3) = Total2  
    rangeFound.Offset(0, 4) = Total3  
    rangeFound.Offset(0, 6) = Total4  
    rangeFound.Offset(0, 7) = Total5  
End If  

'  
End Sub  

Esta versão encontrará o primeiro valor na página e preencherá os valores:

Sub Update_Deposits()  
'  
' Update_Deposits Macro  
'  

Dim selectedDate As String  
Dim rangeFound As Range  
selectedDate = Sheets("Summary Sheet").Range("F3")  
Set rangeFound = Sheets("Deposits").Cells.Find(CDate(selectedDate))  

Dim Total1 As Double  
Dim Total2 As Double  
Dim Total3 As Double  
Dim Total4 As Double  
Dim Total5 As Double  

  Total1 = Sheets("Summary Sheet").Range("E6")  
  Total2 = Sheets("Summary Sheet").Range("E7")  
  Total3 = Sheets("Summary Sheet").Range("E8")  
  Total4 = Sheets("Summary Sheet").Range("E9")  
  Total5 = Sheets("Summary Sheet").Range("E10")  

If Not (rangeFound Is Nothing) Then  
    rangeFound.Offset(0, 2) = Total1  
    rangeFound.Offset(0, 3) = Total2  
    rangeFound.Offset(0, 4) = Total3  
    rangeFound.Offset(0, 6) = Total4  
    rangeFound.Offset(0, 7) = Total5  
End If  

'  
End Sub  
    
por Mukkman 24.10.2011 / 18:41

1 resposta

1

Como você está começando com uma solução de macro, suponho que você tenha conhecimento de programação suficiente para juntar o resultado final; então, dado que as peças principais que eu acho que você precisa são:

Primeiros passos

Certifique-se de que a faixa do desenvolvedor está sendo exibida e, em seguida, mude para o editor do VBA (Alt- F11).
Leia a esta página para obter uma apreciação do processo geral ; alguns dos exemplos podem estar muito próximos do que você deseja (por exemplo, "Criando automaticamente arquivos de pasta de trabalho a partir de dados da planilha").

Lendo uma célula

dim myVar1 as string
myVar1 = Sheets("Sheet1").Range("A1")

Isso permitirá a leitura de qualquer célula em particular em qualquer folha em particular.

Agregando valores de célula

Dim myvar2 As Integer
myvar2 = Application.WorksheetFunction.Sum(Sheets("Sheet1").Range("B4:B6"))

Isso permitirá que você use qualquer uma das funções padrão da planilha, em qualquer intervalo de células.

Escrevendo para uma célula

Sheets("Sheet2").Range("A1") = myVar1

(simplesmente o reverso da leitura)

Conectando a macro a um botão em uma folha

Depois de criar sua macro, adicione um botão à sua planilha mestre sempre que isso fizer mais sentido, seguindo este guia .

Boa sorte!

EDIT 1:

Escrevendo com base no deslocamento

Para gravar em uma célula específica com base em um deslocamento de data, você pode usar o DateDiff função para obter a distância para compensar, por exemplo:

Dim startDate As Date
Dim currDate as Date
Dim dateOffset As Integer

startDate = #10/21/2011#
currDate = Sheets("Summary Sheet").Range("F3")
dateOffset = DateDiff("d", startDate, currDate)

Então, você pode escrever para uma célula específica da mesma maneira que você já é:

ActiveSheet.Range("A1").Offset(0, dateOffset) = Total1
ActiveSheet.Range("A1").Offset(0, dateOffset+1) = Total2

etc

EDIT 2:

Encontrar uma data

Com base no seu comentário: você pode encontrar uma data em outra planilha da seguinte maneira:

Dim selectedDate As String
Dim rangeFound As Range
selectedDate = ActiveCell.Value
Set rangeFound = Sheet2.Cells.Find(CDate(selectedDate))

Obviamente, você alteraria Sheet2 para o que quisesse. Isso lhe dará o endereço da célula que contém a data na folha de resumo. Se você usar rangeFound.Address , receberá um valor semelhante a $D$9 . Se você usar rangeFound.Row e rangeFound.Column , obterá os números reais de linhas e colunas. Observe que você também tem o endereço da célula ativa por meio do mesmo princípio (por exemplo, ActiveCell.Row ). A partir daí, você pode copiar valores usando algo como

If Not (rangeFound Is Nothing) Then
    ActiveCell.Offset(0, 1) = rangeFound.Offset(0, 1)
    ActiveCell.Offset(0, 2) = rangeFound.Offset(0, 2)
End If
    
por 24.10.2011 / 20:28