Так же, как предупреждение для вас и любого другого, кто пытается сделать это:
Прямо сейчас вы должны подумать о:
- как часто я буду использовать это для каждого клиента?
- сколько там клиентов?
- как я буду вводить эти элементы?
- сколько там разных предметов?
Это самые важные вопросы. Я сделал совершенно точно то, что вы пытаетесь сделать, для очень маленькой компании, с примерно 3 квитанциями в месяц.
Как всегда, пожалуйста, быстро, дешево и превосходно. Однако никто не задавал эти вопросы выше. Главным образом из-за дешевизны и превосходства. И теперь становится очевидным, сколько времени теряется при поиске, исправлении квитанции, но главным образом при добавлении элементов. Не говоря уже о том, сколько существует разных форм одного и того же предмета. Исправить это с помощью Excel, однако, возможно, но ИМХО, настоящая боль. Убежденный в этом, EPR теперь настроен.
Это задача базы данных. Это как один из лучших примеров задачи базы данных!
Кроме того, это может даже стоить ERP-системы для малого бизнеса. Здесь, в Германии, я бы порекомендовал вам JTL-Wawi.
Но, если это слишком большой скачок, вам стоит подумать об использовании Access.
Некоторые преимущества:
- вы можете управлять своими клиентами
- вы можете управлять своими товарами
- Вы можете перенести свое диманическое поведение на доступ
- вы можете легко управлять своими квитанциями
- вы все еще можете использовать Excel в качестве выходной системы
Как это будет работать?
У вас будет несколько таблиц, для клиентов и предметов, а также для получения. Таблица квитанций будет связывать клиента с его товарами и другими атрибутами, относящимися к квитанции.
Затем вы можете создать разработанный отчет для основной квитанции и распечатать его из доступа. Или используйте Excel, чтобы выбрать квитанцию, получить данные и распечатать их. Поскольку данные будут предопределены, вы будете знать, сколько строк / столбцов приходит и каков их контекст.
Однако - это колесо было изобретено уже очень много раз, так что вы должны посмотреть на уже существующие;)
редактировать
Решение, основанное на вашем запросе поведения, может использовать эту попытку здесь:
https://stackoverflow.com/questions/12604274/excel-vba-is-there-a-textchanging-textchanged-or-a-similar-event-or-how-to/12604570#12604570
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
Конечно, вы могли бы вместо этого использовать событие Change
и вам, возможно, придется ограничить это поведение максимальным диапазоном вашего динамического списка или его рабочим листом.
Или просто сделайте макрос приемлемым для каждой клавиши, чтобы выполнить эту строку здесь:
Target.EntireRow.Insert (xlShiftDown) 'insert new row
Вам нужно будет определить текущую выбранную ячейку, чтобы иметь Target
диапазон.