Assim como um aviso para você e qualquer outro que tente fazer isso:
Agora você deve pensar em:
- com que frequência vou usar isso por cliente?
- quantos clientes existem?
- como vou inserir esses itens?
- quantos itens diferentes existem?
Estas são as perguntas mais importantes. Eu fiz exatamente exatamente , o que você está tentando fazer, para uma empresa muito pequena, com um aroud 3 recibos por mês.
Como sempre, por favor, rápido & cheap & excelOnly. No entanto, ninguém fez essas perguntas acima. Principalmente por causa do barato & excelOnly. E agora, é tão óbvio quanto tempo é perdido, sempre que um recibo é pesquisado, corrigido, mas principalmente quando os itens são adicionados. Sem mencionar quantas formas diferentes do mesmo item existem. Corrigir isso com o excel é, no entanto, possível, mas IMHO, uma dor real. Convenceu o cutomer também, um EPR agora está configurado.
Esta é uma tarefa de banco de dados. É como um dos melhores exemplos de uma tarefa de banco de dados!
Além disso, isso pode até valer um sistema ERP para pequenas empresas. Aqui na Alemanha, eu recomendo-lhe o JTL-Wawi.
Mas, se isso for muito grande, você deve pensar em usar o Access.
Algumas vantagens:
- você pode gerenciar seus clientes
- você pode gerenciar seus itens
- você pode mover seu comportamento dymanico para acessar
- você pode gerenciar seus recibos com facilidade
- você ainda pode usar o excel como seu sistema de saída
Como isso funcionaria?
Você teria algumas tabelas, para clientes e itens, e para recibos. A tabela de recibo conectaria um cliente a seus itens e outros atributos relevantes de recibo.
Em seguida, você pode criar um relatório projetado para um recibo básico e imprimi-lo a partir do acesso. Ou use o Excel para selecionar um recibo, obter os dados e imprimi-los. Como os dados seriam predeterminados, você saberia quantas linhas / cols estão chegando e qual é o contexto delas.
No entanto - esta roda já foi inventada tantas vezes, então você deve olhar para os já existentes;)
Editar
Uma solução baseada em sua solicitação de comportamento pode usar essa tentativa aqui:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = clngColumnRightToLastGrade Then
Application.EnableEvents = False
'offset selection, one row down, two cols to left
Target.EntireRow.Insert (xlShiftDown) 'insert new row
Target.Offset(1, -2).Select
Application.EnableEvents = True
End If
End Sub
Você poderia, é claro, usar o evento Change
e talvez seja necessário limitar esse comportamento ao alcance máximo de sua lista dinâmica ou à planilha dele.
Ou apenas acesse uma macro por tecla de atalho para executar esta linha aqui:
Target.EntireRow.Insert (xlShiftDown) 'insert new row
Você precisará determinar a célula atualmente selecionada para ter o intervalo Target
.