Excel 2007: Автоматически вставлять строку, если предыдущая строка заполнена

Excel 2007: Автоматически вставлять строку, если предыдущая строка заполнена

Я хочу создать рабочий лист, который можно использовать в качестве печатного чека для клиентов. Вот его базовый макет:

  • Контактные данные клиента (имя, адрес и т. д.) — это фиксированные поля, которые могут быть пустыми.
  • Строка заголовка: «Товар|Кол-во|цена|итого»
  • Динамическая таблица, содержащая любое количество строк, по одной для каждого товара, который покупает клиент.
  • Строка нижнего колонтитула, содержащая общее количество статей и общую сумму

Я борюсь с тем, как заставить работать динамическую таблицу. Сейчас я вручную вставляю строку для каждой новой статьи, но это неудобно в ситуациях, когда она очень загружена. Я бы хотел, чтобы Excel по умолчанию показывал одну пустую строку, а затем вставлял следующую строку каждый раз, когда предыдущая строка содержит какие-либо данные, автоматически перемещая строку нижнего колонтитула на одну строку вниз и обновляя формулу, используемую для расчета общего количества и суммы.

Это вообще возможно?

решение1

Просто в качестве предупреждения вам и всем остальным, кто попытается это сделать:

Прямо сейчас вам следует подумать о:

  • Как часто я буду использовать это для каждого клиента?
  • сколько у вас клиентов?
  • как мне ввести эти элементы?
  • Сколько существует различных предметов?

Это самые важные вопросы. Я сделал довольноточното, что вы пытаетесь сделать, для очень маленькой компании, с примерно 3 чеками в месяц.

Как всегда, пожалуйста, быстро и дешево и только в Excel. Однако никто не задавал эти вопросы выше. В основном из-за дешево и только в Excel. И теперь так очевидно, сколько времени теряется, всякий раз, когда квитанция ищется, исправляется, но в основном при добавлении товаров. Не говоря уже о том, сколько разных форм одного и того же товара существует. Исправление этого с помощью Excel, однако, возможно, но, ИМХО, это настоящая боль. Убедил и клиента, EPR теперь настроен.

Это задача базы данных. Это как один из лучших примеров задачи базы данных!

Далее, это может быть даже стоить малому бизнесу ERP-системы. Здесь, в Германии, я бы рекомендовал вам JTL-Wawi.

Но если это слишком большой шаг, вам стоит задуматься об использовании Access.

Некоторые преимущества:

  • вы можете управлять своими клиентами
  • Вы можете управлять своими предметами
  • вы можете переместить свое динамическое поведение для доступа
  • Вы можете легко управлять своими квитанциями
  • вы по-прежнему можете использовать Excel в качестве системы вывода

Как это будет работать?

У вас будут некоторые таблицы, для клиентов и товаров, и для чеков. Таблица чеков будет связывать клиента с его товарами и другими атрибутами, относящимися к чеку.

Затем вы можете создать разработанный отчет для базового чека и распечатать его из Access. Или использовать Excel для выбора чека, получения данных и их печати. ​​Поскольку данные будут предопределены, вы будете знать, сколько строк/столбцов поступает и каков их контекст.

Однако - это колесо уже было изобретено много раз, так что вам стоит взглянуть на уже существующие ;)

Редактировать

Решение, основанное на вашем поведенческом запросе, может использовать эту попытку здесь:

https://stackoverflow.com/questions/12604274/excel-vba-есть-текст-изменение-текста-или-подобное-событие-или-как-сделать/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диапазон.

Связанный контент