Как поместить excel на форму

Содержание

  1. Вставка рабочего листа Excel в форму или отчет
  2. Формы ввода данных в Microsoft Excel
  3. Применение инструментов заполнения
  4. Способ 1: встроенный объект для ввода данных Excel
  5. Способ 2: создание пользовательской формы

Вставка рабочего листа Excel в форму или отчет

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

Так же как и рисунок, лист Microsoft Excel можно внедрить в форму или отчет или связать его с ними. При этом вставленный лист автоматически сохраняется в файле базы данных и всегда является доступным. Если обновить такой объект в форме или отчете, он будет изменен только в базе данных. Если лист Microsoft Excel связан, его можно просматривать и вносить изменения в форме или отчете. При этом изменения cохраняются в исходном файле объекта, а не в файле базы данных. Файл объекта можно обновлять независимо от базы данных. Последние изменения будут выведены на экран при следующем открытии формы или отчета. Связывание объектов удобно при работе с очень большими файлами, которые нежелательно включать в файл базы данных, а также с файлами, используемыми в нескольких формах и отчетах. Если связанный файл объекта перемешен, необходимо повторно установить с ним связь.

Рассмотрим возможность вставки листа Microsoft Excel в форму и отчет Microsoft Access с помощью свободной рамки объекта. Чтобы вставить новый лист Microsoft Excel в форму Microsoft Access, необходимо:

  1. Открыть форму или отчет в режиме Конструктора.
  2. Добавить в нее элемент управления Свободная рамка объекта (Unbound Object Frame). При этом в окне Microsoft Access выбрать переключатель Создать новый (Create New), а в списке Тип объекта (Object Type) выбрать Лист Microsoft Excel (Microsoft Excel Worksheet) (рис. 15.10). Если файл XLS уже создан, выберите переключатель Создать из файла (Create From File) и введите путь и имя нужного файла.

Рис. 15.10. Окно Microsoft Access при вставке нового листа Microsoft Excel в форму Microsoft Access с помощью свободной рамки объекта

  1. Когда в форме появится элемент управления, в котором отображается пустая таблица Excel, введите в нее данные (это можно сделать прямо в режиме Конструктора) (рис. 15.11). Если вы вставляли готовый файл, то сразу будет отображена таблица Excel (рис. 15.12).

Рис. 15.11. Ввод данных на лист Microsoft Excel в режиме Конструктора форм Microsoft Access

Рис. 15.12. Использование свободной рамки объекта для вставки существующего листа Microsoft Excel в форму Microsoft Access

  1. Чтобы сделать доступным изменение данных на листе в режиме Формы, установите значение свойства Доступ (Enabled) для вставленного элемента управления равным Да (Yes), а свойство Блокировка (Locked) — Нет (No).

Увидеть данные, расположенные на листе Microsoft Excel, можно, открыв форму в режиме Формы. Чтобы иметь возможность изменять или добавлять данные на лист, нужно дважды щелкнуть кнопкой мыши на листе Microsoft Excel в форме (рис. 15.13).

Рис. 15.13. Ввод данных на лист Microsoft Excel в режиме Формы

При работе с отчетами Microsoft Access следует выполнять аналогичную пошаговую процедуру. Увидеть данные, расположенные на листе Microsoft Excel, можно, открыв отчет в режиме просмотра.

Рис. 15.14. Использование присоединенной рамки объекта для вставки листа Microsoft Excel в форму Microsoft Access

Рассмотрим теперь возможность вставки листов Microsoft Excel с помощью присоединенной рамки объекта. В этом случае листы Excel будут храниться в записях таблицы Access (более разумным представляется хранить не сами таблицы, а ссылки на них, т. е. не внедрять листы Excel, а связывать их с таблицей Access). Сначала в таблице должно быть создано поле типа Объект OLE (OLE Object), которое будет содержать листы Excel. Затем в форме, отображающей записи этой таблицы, должен быть создан элемент Присоединенная рамка объекта (Bound Object Frame), связанный с этим полем. Вставка листа Microsoft Excel в поле таблицы или формы может быть выполнена с помощью команды меню Вставка, Объект (Insert, Object), как это уже описывалось ранее. На рис. 15.14 и 15.15 представлены примеры вставки листа Microsoft Excel в форму и отчет Access.

Рис. 15.15. Использование присоединенной рамки объекта для вставки листов Microsoft Excel в отчет Microsoft Access

Источник

Формы ввода данных в Microsoft Excel

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

Применение инструментов заполнения

Форма заполнения представляет собой объект с полями, наименования которых соответствуют названиям колонок столбцов заполняемой таблицы. В эти поля нужно вводить данные и они тут же будут добавляться новой строкой в табличный диапазон. Форма может выступать как в виде отдельного встроенного инструмента Excel, так и располагаться непосредственно на листе в виде его диапазона, если она создана самим пользователем.

Теперь давайте рассмотрим, как пользоваться этими двумя видами инструментов.

Способ 1: встроенный объект для ввода данных Excel

Прежде всего, давайте узнаем, как применять встроенную форму для ввода данных Excel.

  1. Нужно отметить, что по умолчанию значок, который её запускает, скрыт и его нужно активировать. Для этого переходим во вкладку «Файл», а затем щелкаем по пункту «Параметры».
  2. В открывшемся окне параметров Эксель перемещаемся в раздел «Панель быстрого доступа». Большую часть окна занимает обширная область настроек. В левой её части находятся инструменты, которые могут быть добавлены на панель быстрого доступа, а в правой – уже присутствующие.

В поле «Выбрать команды из» устанавливаем значение «Команды не на ленте». Далее из списка команд, расположенного в алфавитном порядке, находим и выделяем позицию «Форма…». Затем жмем на кнопку «Добавить».

Способ 2: создание пользовательской формы

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

  1. Как и в предыдущем способе, прежде всего, нужно составить шапку будущей таблицы на листе. Она будет состоять из пяти ячеек с именами: «№ п/п», «Наименование товара», «Количество», «Цена», «Сумма».
  2. Далее нужно из нашего табличного массива сделать так называемую «умную» таблицу, с возможностью автоматического добавления строчек при заполнении соседних диапазонов или ячеек данными. Для этого выделяем шапку и, находясь во вкладке «Главная», жмем на кнопку «Форматировать как таблицу» в блоке инструментов «Стили». После этого открывается список доступных вариантов стилей. На функционал выбор одного из них никак не повлияет, поэтому выбираем просто тот вариант, который считаем более подходящим.
  3. Затем открывается небольшое окошко форматирования таблицы. В нем указан диапазон, который мы ранее выделили, то есть, диапазон шапки. Как правило, в данном поле заполнено все верно. Но нам следует установить галочку около параметра «Таблица с заголовками». После этого жмем на кнопку «OK».
  4. Итак, наш диапазон отформатирован, как «умная» таблица, свидетельством чему является даже изменение визуального отображения. Как видим, помимо прочего, около каждого названия заголовка столбцов появились значки фильтрации. Их следует отключить. Для этого выделяем любую ячейку «умной» таблицы и переходим во вкладку «Данные». Там на ленте в блоке инструментов «Сортировка и фильтр» щелкаем по значку «Фильтр».

Существует ещё один вариант отключения фильтра. При этом не нужно даже будет переходить на другую вкладку, оставаясь во вкладке «Главная». После выделения ячейки табличной области на ленте в блоке настроек «Редактирование» щелкаем по значку «Сортировка и фильтр». В появившемся списке выбираем позицию «Фильтр».

  • Как видим, после этого действия значки фильтрации исчезли из шапки таблицы, как это и требовалось.
  • Затем нам следует создать саму форму ввода данных. Она тоже будет представлять собой своего рода табличный массив, состоящий из двух столбцов. Наименования строк данного объекта будут соответствовать именам столбцов основной таблицы. Исключение составляют столбцы «№ п/п» и «Сумма». Они будут отсутствовать. Нумерация первого из них будет происходить при помощи макроса, а расчет значений во втором будет производиться путем применения формулы умножения количества на цену.

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

  • После этого создаем ещё одну небольшую таблицу. Она будет состоять из одного столбца и в ней разместится список товаров, которые мы будем выводить во вторую колонку основной таблицы. Для наглядности ячейку с заголовком данного перечня («Список товаров») можно залить цветом.
  • Затем выделяем первую пустую ячейку объекта ввода значений. Переходим во вкладку «Данные». Щелкаем по значку «Проверка данных», который размещен на ленте в блоке инструментов «Работа с данными».
  • Запускается окно проверки вводимых данных. Кликаем по полю «Тип данных», в котором по умолчанию установлен параметр «Любое значение».
  • Из раскрывшихся вариантов выбираем позицию «Список».
  • Как видим, после этого окно проверки вводимых значений несколько изменило свою конфигурацию. Появилось дополнительное поле «Источник». Щелкаем по пиктограмме справа от него левой клавишей мыши.
  • Затем окно проверки вводимых значений сворачивается. Выделяем курсором с зажатой левой клавишей мыши перечень данных, которые размещены на листе в дополнительной табличной области «Список товаров». После этого опять жмем на пиктограмму справа от поля, в котором появился адрес выделенного диапазона.
  • Происходит возврат к окошку проверки вводимых значений. Как видим, координаты выделенного диапазона в нем уже отображены в поле «Источник». Кликаем по кнопке «OK» внизу окна.
  • Теперь справа от выделенной пустой ячейки объекта ввода данных появилась пиктограмма в виде треугольника. При клике на неё открывается выпадающий список, состоящий из названий, которые подтягиваются из табличного массива «Список товаров». Произвольные данные в указанную ячейку теперь внести невозможно, а только можно выбрать из представленного списка нужную позицию. Выбираем пункт в выпадающем списке.
  • Как видим, выбранная позиция тут же отобразилась в поле «Наименование товара».
  • Далее нам нужно будет присвоить имена тем трем ячейкам формы ввода, куда мы будем вводить данные. Выделяем первую ячейку, где уже установлено в нашем случае наименование «Картофель». Далее переходим в поле наименования диапазонов. Оно расположено в левой части окна Excel на том же уровне, что и строка формул. Вводим туда произвольное название. Это может быть любое наименование на латинице, в котором нет пробелов, но лучше все-таки использовать названия близкие к решаемым данным элементом задачам. Поэтому первую ячейку, в которой содержится название товара, назовем «Name». Пишем данное наименование в поле и жмем на клавишу Enter на клавиатуре.
  • Точно таким же образом присваиваем ячейке, в которую будем вводить количество товара, имя «Volum».
  • А ячейке с ценой – «Price».
  • После этого точно таким же образом даем название всему диапазону из вышеуказанных трех ячеек. Прежде всего, выделим, а потом дадим ему наименование в специальном поле. Пусть это будет имя «Diapason».
  • После последнего действия обязательно сохраняем документ, чтобы названия, которые мы присвоили, смог воспринимать макрос, созданный нами в дальнейшем. Для сохранения переходим во вкладку «Файл» и кликаем по пункту «Сохранить как…».
  • В открывшемся окне сохранения в поле «Тип файлов» выбираем значение «Книга Excel с поддержкой макросов (.xlsm)». Далее жмем на кнопку «Сохранить».
  • Затем вам следует активировать работу макросов в своей версии Excel и включить вкладку «Разработчик», если вы это до сих пор не сделали. Дело в том, что обе эти функции по умолчанию в программе отключены, и их активацию нужно выполнять принудительно в окне параметров Excel.
  • После того, как вы сделали это, переходим во вкладку «Разработчик». Кликаем по большому значку «Visual Basic», который расположен на ленте в блоке инструментов «Код».
  • Последнее действие приводит к тому, что запускается редактор макросов VBA. В области «Project», которая расположена в верхней левой части окна, выделяем имя того листа, где располагаются наши таблицы. В данном случае это «Лист 1».
  • После этого переходим к левой нижней области окна под названием «Properties». Тут расположены настройки выделенного листа. В поле «(Name)» следует заменить кириллическое наименование («Лист1») на название, написанное на латинице. Название можно дать любое, которое вам будет удобнее, главное, чтобы в нем были исключительно символы латиницы или цифры и отсутствовали другие знаки или пробелы. Именно с этим именем будет работать макрос. Пусть в нашем случае данным названием будет «Producty», хотя вы можете выбрать и любое другое, соответствующее условиям, которые были описаны выше.

    В поле «Name» тоже можно заменить название на более удобное. Но это не обязательно. При этом допускается использование пробелов, кириллицы и любых других знаков. В отличие от предыдущего параметра, который задает наименование листа для программы, данный параметр присваивает название листу, видимое пользователю на панели ярлыков.

    Как видим, после этого автоматически изменится и наименование Листа 1 в области «Project», на то, которое мы только что задали в настройках.

  • Затем переходим в центральную область окна. Именно тут нам нужно будет записать сам код макроса. Если поле редактора кода белого цвета в указанной области не отображается, как в нашем случае, то жмем на функциональную клавишу F7 и оно появится.
  • Теперь для конкретно нашего примера нужно записать в поле следующий код:

    Sub DataEntryForm()
    Dim nextRow As Long
    nextRow = Producty.Cells(Producty.Rows.Count, 2).End(xlUp).Offset(1, 0).Row
    With Producty
    If .Range(«A2»).Value = «» And .Range(«B2»).Value = «» Then
    nextRow = nextRow — 1
    End If
    Producty.Range(«Name»).Copy
    .Cells(nextRow, 2).PasteSpecial Paste:=xlPasteValues
    .Cells(nextRow, 3).Value = Producty.Range(«Volum»).Value
    .Cells(nextRow, 4).Value = Producty.Range(«Price»).Value
    .Cells(nextRow, 5).Value = Producty.Range(«Volum»).Value * Producty.Range(«Price»).Value
    .Range(«A2»).Formula = «=IF(ISBLANK(B2), «»»», COUNTA($B$2:B2))»
    If nextRow > 2 Then
    Range(«A2»).Select
    Selection.AutoFill Destination:=Range(«A2:A» & nextRow)
    Range(«A2:A» & nextRow).Select
    End If
    .Range(«Diapason»).ClearContents
    End With
    End Sub

    Но этот код не универсальный, то есть, он в неизменном виде подходит только для нашего случая. Если вы хотите его приспособить под свои потребности, то его следует соответственно модифицировать. Чтобы вы смогли сделать это самостоятельно, давайте разберем, из чего данный код состоит, что в нем следует заменить, а что менять не нужно.

    Итак, первая строка:

    «DataEntryForm» — это название самого макроса. Вы можете оставить его как есть, а можете заменить на любое другое, которое соответствует общим правилам создания наименований макросов (отсутствие пробелов, использование только букв латинского алфавита и т.д.). Изменение наименования ни на что не повлияет.

    Везде, где встречается в коде слово «Producty» вы должны его заменить на то наименование, которое ранее присвоили для своего листа в поле «(Name)» области «Properties» редактора макросов. Естественно, это нужно делать только в том случае, если вы назвали лист по-другому.

    Теперь рассмотрим такую строку:

    nextRow = Producty.Cells(Producty.Rows.Count, 2).End(xlUp).Offset(1, 0).Row

    Цифра «2» в данной строчке означает второй столбец листа. Именно в этом столбце находится колонка «Наименование товара». По ней мы будем считать количество рядов. Поэтому, если в вашем случае аналогичный столбец имеет другой порядок по счету, то нужно ввести соответствующее число. Значение «End(xlUp).Offset(1, 0).Row» в любом случае оставляем без изменений.

    Далее рассмотрим строку

    If .Range(«A2»).Value = «» And .Range(«B2»).Value = «» Then

    «A2» — это координаты первой ячейки, в которой будет выводиться нумерация строк. «B2» — это координаты первой ячейки, по которой будет производиться вывод данных («Наименование товара»). Если они у вас отличаются, то введите вместо этих координат свои данные.

    Переходим к строке

    В ней параметр «Name» означат имя, которое мы присвоили полю «Наименование товара» в форме ввода.

    .Cells(nextRow, 2).PasteSpecial Paste:=xlPasteValues
    .Cells(nextRow, 3).Value = Producty.Range(«Volum»).Value
    .Cells(nextRow, 4).Value = Producty.Range(«Price»).Value
    .Cells(nextRow, 5).Value = Producty.Range(«Volum»).Value * Producty.Range(«Price»).Value

    наименования «Volum» и «Price» означают названия, которые мы присвоили полям «Количество» и «Цена» в той же форме ввода.

    В этих же строках, которые мы указали выше, цифры «2», «3», «4», «5» означают номера столбцов на листе Excel, соответствующих колонкам «Наименование товара», «Количество», «Цена» и «Сумма». Поэтому, если в вашем случае таблица сдвинута, то нужно указать соответствующие номера столбцов. Если столбцов больше, то по аналогии нужно добавить её строки в код, если меньше – то убрать лишние.

    В строке производится умножение количества товара на его цену:

    .Cells(nextRow, 5).Value = Producty.Range(«Volum»).Value * Producty.Range(«Price»).Value

    Результат, как видим из синтаксиса записи, будет выводиться в пятый столбец листа Excel.

    В этом выражении выполняется автоматическая нумерация строк:

    If nextRow > 2 Then
    Range(«A2»).Select
    Selection.AutoFill Destination:=Range(«A2:A» & nextRow)
    Range(«A2:A» & nextRow).Select
    End If

    Все значения «A2» означают адрес первой ячейки, где будет производиться нумерация, а координаты « — адрес всего столбца с нумерацией. Проверьте, где именно будет выводиться нумерация в вашей таблице и измените данные координаты в коде, если это необходимо.

    В строке производится очистка диапазона формы ввода данных после того, как информация из неё была перенесена в таблицу:

    Не трудно догадаться, что («Diapason») означает наименование того диапазона, который мы ранее присвоили полям для ввода данных. Если вы дали им другое наименование, то в этой строке должно быть вставлено именно оно.

    Дальнейшая часть кода универсальна и во всех случаях будет вноситься без изменений.

    После того, как вы записали код макроса в окно редактора, следует нажать на значок сохранения в виде дискеты в левой части окна. Затем можно его закрывать, щелкнув по стандартной кнопке закрытия окон в правом верхнем углу.

  • После этого возвращаемся на лист Excel. Теперь нам следует разместить кнопку, которая будет активировать созданный макрос. Для этого переходим во вкладку «Разработчик». В блоке настроек «Элементы управления» на ленте кликаем по кнопке «Вставить». Открывается перечень инструментов. В группе инструментов «Элементы управления формы» выбираем самый первый – «Кнопка».
  • Затем с зажатой левой клавишей мыши обводим курсором область, где хотим разместить кнопку запуска макроса, который будет производить перенос данных из формы в таблицу.
  • После того, как область обведена, отпускаем клавишу мыши. Затем автоматически запускается окно назначения макроса объекту. Если в вашей книге применяется несколько макросов, то выбираем из списка название того, который мы выше создавали. У нас он называется «DataEntryForm». Но в данном случае макрос один, поэтому просто выбираем его и жмем на кнопку «OK» внизу окна.
  • После этого можно переименовать кнопку, как вы захотите, просто выделив её текущее название.

    В нашем случае, например, логично будет дать ей имя «Добавить». Переименовываем и кликаем мышкой по любой свободной ячейке листа.

  • Итак, наша форма полностью готова. Проверим, как она работает. Вводим в её поля необходимые значения и жмем на кнопку «Добавить».
  • Как видим, значения перемещены в таблицу, строке автоматически присвоен номер, сумма посчитана, поля формы очищены.
  • Повторно заполняем форму и жмем на кнопку «Добавить».
  • Как видим, и вторая строка также добавлена в табличный массив. Это означает, что инструмент работает.
  • В Экселе существует два способа применения формы заполнения данными: встроенная и пользовательская. Применение встроенного варианта требует минимум усилий от пользователя. Его всегда можно запустить, добавив соответствующий значок на панель быстрого доступа. Пользовательскую форму нужно создавать самому, но если вы хорошо разбираетесь в коде VBA, то сможете сделать этот инструмент максимально гибким и подходящим под ваши нужды.

    Источник

    Содержание

    • Применение инструментов заполнения
      • Способ 1: встроенный объект для ввода данных Excel
      • Способ 2: создание пользовательской формы
    • Вопросы и ответы

    Форма в Microsoft Excel

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

    Применение инструментов заполнения

    Форма заполнения представляет собой объект с полями, наименования которых соответствуют названиям колонок столбцов заполняемой таблицы. В эти поля нужно вводить данные и они тут же будут добавляться новой строкой в табличный диапазон. Форма может выступать как в виде отдельного встроенного инструмента Excel, так и располагаться непосредственно на листе в виде его диапазона, если она создана самим пользователем.

    Теперь давайте рассмотрим, как пользоваться этими двумя видами инструментов.

    Способ 1: встроенный объект для ввода данных Excel

    Прежде всего, давайте узнаем, как применять встроенную форму для ввода данных Excel.

    1. Нужно отметить, что по умолчанию значок, который её запускает, скрыт и его нужно активировать. Для этого переходим во вкладку «Файл», а затем щелкаем по пункту «Параметры».
    2. Переход в параметры в Microsoft Excel

    3. В открывшемся окне параметров Эксель перемещаемся в раздел «Панель быстрого доступа». Большую часть окна занимает обширная область настроек. В левой её части находятся инструменты, которые могут быть добавлены на панель быстрого доступа, а в правой – уже присутствующие.

      В поле «Выбрать команды из» устанавливаем значение «Команды не на ленте». Далее из списка команд, расположенного в алфавитном порядке, находим и выделяем позицию «Форма…». Затем жмем на кнопку «Добавить».

    4. Добавление инструмента форма на панель быстрого доступа в Microsoft Excel

    5. После этого нужный нам инструмент отобразится в правой части окна. Жмем на кнопку «OK».
    6. Инструмент форма добавлен на панель быстрого доступа в Microsoft Excel

    7. Теперь данный инструмент располагается в окне Excel на панели быстрого доступа, и мы им можем воспользоваться. Он будет присутствовать при открытии любой книги данным экземпляром Excel.
    8. Инструмент форма отображается на панеле быстрого доступа в Microsoft Excel

    9. Теперь, чтобы инструмент понял, что именно ему нужно заполнять, следует оформить шапку таблицы и записать любое значение в ней. Пусть табличный массив у нас будет состоять из четырех столбцов, которые имеют названия «Наименование товара», «Количество», «Цена» и «Сумма». Вводим данные названия в произвольный горизонтальный диапазон листа.
    10. Шапка таблицы в Microsoft Excel

    11. Также, чтобы программа поняла, с каким именно диапазонам ей нужно будет работать, следует ввести любое значение в первую строку табличного массива.
    12. первое значение в таблице в Microsoft Excel

    13. После этого выделяем любую ячейку заготовки таблицы и щелкаем на панели быстрого доступа по значку «Форма…», который мы ранее активировали.
    14. Запуск формы в Microsoft Excel

    15. Итак, открывается окно указанного инструмента. Как видим, данный объект имеет поля, которые соответствуют названиям столбцов нашего табличного массива. При этом первое поле уже заполнено значением, так как мы его ввели вручную на листе.
    16. Форма открыта в Microsoft Excel

    17. Вводим значения, которые считаем нужными и в остальные поля, после чего жмем на кнопку «Добавить».
    18. Ввод значений в форму в Microsoft Excel

    19. После этого, как видим, в первую строку таблицы были автоматически перенесены введенные значения, а в форме произошел переход к следующему блоку полей, который соответствуют второй строке табличного массива.
    20. Значения перенесы в таблицу в Microsoft Excel

      Lumpics.ru

    21. Заполняем окно инструмента теми значениями, которые хотим видеть во второй строке табличной области, и снова щелкаем по кнопке «Добавить».
    22. Добавление второй строки в таблицу через форму в Microsoft Excel

    23. Как видим, значения второй строчки тоже были добавлены, причем нам даже не пришлось переставлять курсор в самой таблице.
    24. Вторая строка заполнена в таблице в Microsoft Excel

    25. Таким образом, заполняем табличный массив всеми значениями, которые хотим в неё ввести.
    26. Все значения в таблицу введены в Microsoft Excel

    27. Кроме того, при желании, можно производить навигацию по ранее введенным значениям с помощью кнопок «Назад» и «Далее» или вертикальной полосы прокрутки.
    28. Навигация по форме в Microsoft Excel

    29. При необходимости можно откорректировать любое значение в табличном массиве, изменив его в форме. Чтобы изменения отобразились на листе, после внесения их в соответствующий блок инструмента, жмем на кнопку «Добавить».
    30. Корректировка данных в форме в Microsoft Excel

    31. Как видим, изменение сразу произошло и в табличной области.
    32. Изменение произведено в таблице в Microsoft Excel

    33. Если нам нужно удалить, какую-то строчку, то через кнопки навигации или полосу прокрутки переходим к соответствующему ей блоку полей в форме. После этого щелкаем по кнопке «Удалить» в окошке инструмента.
    34. Удаление строки через форму в Microsoft Excel

    35. Открывается диалоговое окно предупреждения, в котором сообщается, что строка будет удалена. Если вы уверены в своих действиях, то жмите на кнопку «OK».
    36. Подтверждение удаления строки в Microsoft Excel

    37. Как видим, строчка была извлечена из табличного диапазона. После того, как заполнение и редактирование закончено, можно выходить из окна инструмента, нажав на кнопку «Закрыть».
    38. Закрытие формы в Microsoft Excel

    39. После этого для предания табличному массиву более наглядного визуального вида можно произвести форматирование.

    Таблица отформатированв в Microsoft Excel

    Способ 2: создание пользовательской формы

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

    1. Как и в предыдущем способе, прежде всего, нужно составить шапку будущей таблицы на листе. Она будет состоять из пяти ячеек с именами: «№ п/п», «Наименование товара», «Количество», «Цена», «Сумма».
    2. Шапка таблицы создана в Microsoft Excel

    3. Далее нужно из нашего табличного массива сделать так называемую «умную» таблицу, с возможностью автоматического добавления строчек при заполнении соседних диапазонов или ячеек данными. Для этого выделяем шапку и, находясь во вкладке «Главная», жмем на кнопку «Форматировать как таблицу» в блоке инструментов «Стили». После этого открывается список доступных вариантов стилей. На функционал выбор одного из них никак не повлияет, поэтому выбираем просто тот вариант, который считаем более подходящим.
    4. Создание умной таблицы в Microsoft Excel

    5. Затем открывается небольшое окошко форматирования таблицы. В нем указан диапазон, который мы ранее выделили, то есть, диапазон шапки. Как правило, в данном поле заполнено все верно. Но нам следует установить галочку около параметра «Таблица с заголовками». После этого жмем на кнопку «OK».
    6. Окошко форматирования таблицы в Microsoft Excel

    7. Итак, наш диапазон отформатирован, как «умная» таблица, свидетельством чему является даже изменение визуального отображения. Как видим, помимо прочего, около каждого названия заголовка столбцов появились значки фильтрации. Их следует отключить. Для этого выделяем любую ячейку «умной» таблицы и переходим во вкладку «Данные». Там на ленте в блоке инструментов «Сортировка и фильтр» щелкаем по значку «Фильтр».
      Отключение фильтра через вкладку Данные в Microsoft Excel

      Существует ещё один вариант отключения фильтра. При этом не нужно даже будет переходить на другую вкладку, оставаясь во вкладке «Главная». После выделения ячейки табличной области на ленте в блоке настроек «Редактирование» щелкаем по значку «Сортировка и фильтр». В появившемся списке выбираем позицию «Фильтр».

    8. Отключение фильтра через вкладку Главная в Microsoft Excel

    9. Как видим, после этого действия значки фильтрации исчезли из шапки таблицы, как это и требовалось.
    10. Фильтр снят в Microsoft Excel

    11. Затем нам следует создать саму форму ввода данных. Она тоже будет представлять собой своего рода табличный массив, состоящий из двух столбцов. Наименования строк данного объекта будут соответствовать именам столбцов основной таблицы. Исключение составляют столбцы «№ п/п» и «Сумма». Они будут отсутствовать. Нумерация первого из них будет происходить при помощи макроса, а расчет значений во втором будет производиться путем применения формулы умножения количества на цену.

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

    12. Форма ввода данных на листе в Microsoft Excel

    13. После этого создаем ещё одну небольшую таблицу. Она будет состоять из одного столбца и в ней разместится список товаров, которые мы будем выводить во вторую колонку основной таблицы. Для наглядности ячейку с заголовком данного перечня («Список товаров») можно залить цветом.
    14. Таблица со списком товаров в Microsoft Excel

    15. Затем выделяем первую пустую ячейку объекта ввода значений. Переходим во вкладку «Данные». Щелкаем по значку «Проверка данных», который размещен на ленте в блоке инструментов «Работа с данными».
    16. Переход к проверке данных в Microsoft Excel

    17. Запускается окно проверки вводимых данных. Кликаем по полю «Тип данных», в котором по умолчанию установлен параметр «Любое значение».
    18. Окно проверки вводимых значений в Microsoft Excel

    19. Из раскрывшихся вариантов выбираем позицию «Список».
    20. Выбор списка в окне проверки вводимых значений в Microsoft Excel

    21. Как видим, после этого окно проверки вводимых значений несколько изменило свою конфигурацию. Появилось дополнительное поле «Источник». Щелкаем по пиктограмме справа от него левой клавишей мыши.
    22. Переход к выбору источника в окне проверки вводимых значений в Microsoft Excel

    23. Затем окно проверки вводимых значений сворачивается. Выделяем курсором с зажатой левой клавишей мыши перечень данных, которые размещены на листе в дополнительной табличной области «Список товаров». После этого опять жмем на пиктограмму справа от поля, в котором появился адрес выделенного диапазона.
    24. Адрес диапазона внесен в поле в Microsoft Excel

    25. Происходит возврат к окошку проверки вводимых значений. Как видим, координаты выделенного диапазона в нем уже отображены в поле «Источник». Кликаем по кнопке «OK» внизу окна.
    26. Закрытие окна проверки вводимых значений в Microsoft Excel

    27. Теперь справа от выделенной пустой ячейки объекта ввода данных появилась пиктограмма в виде треугольника. При клике на неё открывается выпадающий список, состоящий из названий, которые подтягиваются из табличного массива «Список товаров». Произвольные данные в указанную ячейку теперь внести невозможно, а только можно выбрать из представленного списка нужную позицию. Выбираем пункт в выпадающем списке.
    28. Список со значениями в Microsoft Excel

    29. Как видим, выбранная позиция тут же отобразилась в поле «Наименование товара».
    30. Выбранная позиция отобразилась в ячейке в Microsoft Excel

    31. Далее нам нужно будет присвоить имена тем трем ячейкам формы ввода, куда мы будем вводить данные. Выделяем первую ячейку, где уже установлено в нашем случае наименование «Картофель». Далее переходим в поле наименования диапазонов. Оно расположено в левой части окна Excel на том же уровне, что и строка формул. Вводим туда произвольное название. Это может быть любое наименование на латинице, в котором нет пробелов, но лучше все-таки использовать названия близкие к решаемым данным элементом задачам. Поэтому первую ячейку, в которой содержится название товара, назовем «Name». Пишем данное наименование в поле и жмем на клавишу Enter на клавиатуре.
    32. Наименование первой ячейки в Microsoft Excel

    33. Точно таким же образом присваиваем ячейке, в которую будем вводить количество товара, имя «Volum».
    34. Наименование второй ячейки в Microsoft Excel

    35. А ячейке с ценой – «Price».
    36. Наименование третьей ячейки в Microsoft Excel

    37. После этого точно таким же образом даем название всему диапазону из вышеуказанных трех ячеек. Прежде всего, выделим, а потом дадим ему наименование в специальном поле. Пусть это будет имя «Diapason».
    38. присвоение наименования диапазону в Microsoft Excel

    39. После последнего действия обязательно сохраняем документ, чтобы названия, которые мы присвоили, смог воспринимать макрос, созданный нами в дальнейшем. Для сохранения переходим во вкладку «Файл» и кликаем по пункту «Сохранить как…».
    40. Сохранение книги в Microsoft Excel

    41. В открывшемся окне сохранения в поле «Тип файлов» выбираем значение «Книга Excel с поддержкой макросов (.xlsm)». Далее жмем на кнопку «Сохранить».
    42. Окно сохранения файла в Microsoft Excel

    43. Затем вам следует активировать работу макросов в своей версии Excel и включить вкладку «Разработчик», если вы это до сих пор не сделали. Дело в том, что обе эти функции по умолчанию в программе отключены, и их активацию нужно выполнять принудительно в окне параметров Excel.
    44. После того, как вы сделали это, переходим во вкладку «Разработчик». Кликаем по большому значку «Visual Basic», который расположен на ленте в блоке инструментов «Код».
    45. Переход в редактор макросов в Microsoft Excel

    46. Последнее действие приводит к тому, что запускается редактор макросов VBA. В области «Project», которая расположена в верхней левой части окна, выделяем имя того листа, где располагаются наши таблицы. В данном случае это «Лист 1».
    47. Редактор макросов в Microsoft Excel

    48. После этого переходим к левой нижней области окна под названием «Properties». Тут расположены настройки выделенного листа. В поле «(Name)» следует заменить кириллическое наименование («Лист1») на название, написанное на латинице. Название можно дать любое, которое вам будет удобнее, главное, чтобы в нем были исключительно символы латиницы или цифры и отсутствовали другие знаки или пробелы. Именно с этим именем будет работать макрос. Пусть в нашем случае данным названием будет «Producty», хотя вы можете выбрать и любое другое, соответствующее условиям, которые были описаны выше.

      В поле «Name» тоже можно заменить название на более удобное. Но это не обязательно. При этом допускается использование пробелов, кириллицы и любых других знаков. В отличие от предыдущего параметра, который задает наименование листа для программы, данный параметр присваивает название листу, видимое пользователю на панели ярлыков.

      Как видим, после этого автоматически изменится и наименование Листа 1 в области «Project», на то, которое мы только что задали в настройках.

    49. Изменение наименования листа в редакторе макросов в Microsoft Excel

    50. Затем переходим в центральную область окна. Именно тут нам нужно будет записать сам код макроса. Если поле редактора кода белого цвета в указанной области не отображается, как в нашем случае, то жмем на функциональную клавишу F7 и оно появится.
    51. Поле в редкторе макросов отобразилось в Microsoft Excel

    52. Теперь для конкретно нашего примера нужно записать в поле следующий код:


      Sub DataEntryForm()
      Dim nextRow As Long
      nextRow = Producty.Cells(Producty.Rows.Count, 2).End(xlUp).Offset(1, 0).Row
      With Producty
      If .Range("A2").Value = "" And .Range("B2").Value = "" Then
      nextRow = nextRow - 1
      End If
      Producty.Range("Name").Copy
      .Cells(nextRow, 2).PasteSpecial Paste:=xlPasteValues
      .Cells(nextRow, 3).Value = Producty.Range("Volum").Value
      .Cells(nextRow, 4).Value = Producty.Range("Price").Value
      .Cells(nextRow, 5).Value = Producty.Range("Volum").Value * Producty.Range("Price").Value
      .Range("A2").Formula = "=IF(ISBLANK(B2), """", COUNTA($B$2:B2))"
      If nextRow > 2 Then
      Range("A2").Select
      Selection.AutoFill Destination:=Range("A2:A" & nextRow)
      Range("A2:A" & nextRow).Select
      End If
      .Range("Diapason").ClearContents
      End With
      End Sub

      Но этот код не универсальный, то есть, он в неизменном виде подходит только для нашего случая. Если вы хотите его приспособить под свои потребности, то его следует соответственно модифицировать. Чтобы вы смогли сделать это самостоятельно, давайте разберем, из чего данный код состоит, что в нем следует заменить, а что менять не нужно.

      Итак, первая строка:

      Sub DataEntryForm()

      «DataEntryForm» — это название самого макроса. Вы можете оставить его как есть, а можете заменить на любое другое, которое соответствует общим правилам создания наименований макросов (отсутствие пробелов, использование только букв латинского алфавита и т.д.). Изменение наименования ни на что не повлияет.

      Везде, где встречается в коде слово «Producty» вы должны его заменить на то наименование, которое ранее присвоили для своего листа в поле «(Name)» области «Properties» редактора макросов. Естественно, это нужно делать только в том случае, если вы назвали лист по-другому.

      Наименование для листа в Microsoft Excel

      Теперь рассмотрим такую строку:

      nextRow = Producty.Cells(Producty.Rows.Count, 2).End(xlUp).Offset(1, 0).Row

      Цифра «2» в данной строчке означает второй столбец листа. Именно в этом столбце находится колонка «Наименование товара». По ней мы будем считать количество рядов. Поэтому, если в вашем случае аналогичный столбец имеет другой порядок по счету, то нужно ввести соответствующее число. Значение «End(xlUp).Offset(1, 0).Row» в любом случае оставляем без изменений.

      Второй столбец таблицы в Microsoft Excel

      Далее рассмотрим строку

      If .Range("A2").Value = "" And .Range("B2").Value = "" Then

      «A2» — это координаты первой ячейки, в которой будет выводиться нумерация строк. «B2» — это координаты первой ячейки, по которой будет производиться вывод данных («Наименование товара»). Если они у вас отличаются, то введите вместо этих координат свои данные.

      Две первые ячейки таблицы с данными в Microsoft Excel

      Переходим к строке

      Producty.Range("Name").Copy

      В ней параметр «Name» означат имя, которое мы присвоили полю «Наименование товара» в форме ввода.

      Имя поля наименования товара в форме ввода в Microsoft Excel

      В строках


      .Cells(nextRow, 2).PasteSpecial Paste:=xlPasteValues
      .Cells(nextRow, 3).Value = Producty.Range("Volum").Value
      .Cells(nextRow, 4).Value = Producty.Range("Price").Value
      .Cells(nextRow, 5).Value = Producty.Range("Volum").Value * Producty.Range("Price").Value

      наименования «Volum» и «Price» означают названия, которые мы присвоили полям «Количество» и «Цена» в той же форме ввода.

      Наименование полей количество и цена в Microsoft Excel

      В этих же строках, которые мы указали выше, цифры «2», «3», «4», «5» означают номера столбцов на листе Excel, соответствующих колонкам «Наименование товара», «Количество», «Цена» и «Сумма». Поэтому, если в вашем случае таблица сдвинута, то нужно указать соответствующие номера столбцов. Если столбцов больше, то по аналогии нужно добавить её строки в код, если меньше – то убрать лишние.

      Колонки в таблице в Microsoft Excel

      В строке производится умножение количества товара на его цену:

      .Cells(nextRow, 5).Value = Producty.Range("Volum").Value * Producty.Range("Price").Value

      Результат, как видим из синтаксиса записи, будет выводиться в пятый столбец листа Excel.

      Колонка для вывода суммы в Microsoft Excel

      В этом выражении выполняется автоматическая нумерация строк:


      If nextRow > 2 Then
      Range("A2").Select
      Selection.AutoFill Destination:=Range("A2:A" & nextRow)
      Range("A2:A" & nextRow).Select
      End If

      Все значения «A2» означают адрес первой ячейки, где будет производиться нумерация, а координаты « — адрес всего столбца с нумерацией. Проверьте, где именно будет выводиться нумерация в вашей таблице и измените данные координаты в коде, если это необходимо.

      Столбец с нумерацией в Microsoft Excel

      В строке производится очистка диапазона формы ввода данных после того, как информация из неё была перенесена в таблицу:

      .Range("Diapason").ClearContents

      Не трудно догадаться, что («Diapason») означает наименование того диапазона, который мы ранее присвоили полям для ввода данных. Если вы дали им другое наименование, то в этой строке должно быть вставлено именно оно.

      Наименование полей для ввода данных в Microsoft Excel

      Дальнейшая часть кода универсальна и во всех случаях будет вноситься без изменений.

      После того, как вы записали код макроса в окно редактора, следует нажать на значок сохранения в виде дискеты в левой части окна. Затем можно его закрывать, щелкнув по стандартной кнопке закрытия окон в правом верхнем углу.

    53. Код в редакторе макросов в Microsoft Excel

    54. После этого возвращаемся на лист Excel. Теперь нам следует разместить кнопку, которая будет активировать созданный макрос. Для этого переходим во вкладку «Разработчик». В блоке настроек «Элементы управления» на ленте кликаем по кнопке «Вставить». Открывается перечень инструментов. В группе инструментов «Элементы управления формы» выбираем самый первый – «Кнопка».
    55. Выбор элемента управления в Microsoft Excel

    56. Затем с зажатой левой клавишей мыши обводим курсором область, где хотим разместить кнопку запуска макроса, который будет производить перенос данных из формы в таблицу.
    57. Указание границ кнопки в Microsoft Excel

    58. После того, как область обведена, отпускаем клавишу мыши. Затем автоматически запускается окно назначения макроса объекту. Если в вашей книге применяется несколько макросов, то выбираем из списка название того, который мы выше создавали. У нас он называется «DataEntryForm». Но в данном случае макрос один, поэтому просто выбираем его и жмем на кнопку «OK» внизу окна.
    59. Окно назначения макроса объекту в Microsoft Excel

    60. После этого можно переименовать кнопку, как вы захотите, просто выделив её текущее название.
      Переименовывание кнопки в Microsoft Excel

      В нашем случае, например, логично будет дать ей имя «Добавить». Переименовываем и кликаем мышкой по любой свободной ячейке листа.

    61. Кнопка переименована в Microsoft Excel

    62. Итак, наша форма полностью готова. Проверим, как она работает. Вводим в её поля необходимые значения и жмем на кнопку «Добавить».
    63. Ввод данных в форму в Microsoft Excel

    64. Как видим, значения перемещены в таблицу, строке автоматически присвоен номер, сумма посчитана, поля формы очищены.
    65. Значения первой строки внесены в таблицу в Microsoft Excel

    66. Повторно заполняем форму и жмем на кнопку «Добавить».
    67. Повторный ввод данных в форму в Microsoft Excel

    68. Как видим, и вторая строка также добавлена в табличный массив. Это означает, что инструмент работает.

    Вторая строка добавлена в таблицу в Microsoft Excel

    Читайте также:
    Как создать макрос в Excel
    Как создать кнопку в Excel

    В Экселе существует два способа применения формы заполнения данными: встроенная и пользовательская. Применение встроенного варианта требует минимум усилий от пользователя. Его всегда можно запустить, добавив соответствующий значок на панель быстрого доступа. Пользовательскую форму нужно создавать самому, но если вы хорошо разбираетесь в коде VBA, то сможете сделать этот инструмент максимально гибким и подходящим под ваши нужды.

       Poky

    09.02.12 — 09:37

    Пользователи хотят видеть содержимое выбираемого файла. Т.е. нужна возможность программно подгружать лист excel в какой-то объет на форме. Реально ли это?

       Maxus43

    1 — 09.02.12 — 09:38

    в таб поле грузи

       shuhard

    2 — 09.02.12 — 09:39

    (0)[Реально ли это]

    да

       Poky

    3 — 09.02.12 — 09:40

    (1) В табличное поле? Расскажите как это сделать?

       IamAlexy

    4 — 09.02.12 — 09:40

    (0) бгыы..

    запуститьприложение(путькфайлу);

       Poky

    5 — 09.02.12 — 09:45

    (4) Пользователи не хотят метаться между окнами. Их задача заключается в том чтобы находить соответствие для строки excel-файла в справочнике нашей базы (автоматом это пока никак не реализовать, связь совершенно неявная, к тому же форматы файлов всегда разные). Я вот и хочу сделать обработочку, чтобы слева был excel-файл, а справа дерево справочника.

       shuhard

    6 — 09.02.12 — 09:46

    (5)[Я вот и хочу сделать обработочку, чтобы слева был excel-файл, а справа дерево справочника.]

    более тупое решение трудно представить

       IamAlexy

    7 — 09.02.12 — 09:46

    (5) на ИТСе есть обработка универсальная по загрузке из табилчных документов…

    и ты не поверишь…..

       Poky

    8 — 09.02.12 — 09:48

    (7) Что за обработка? Как называется?

       Maxus43

    9 — 09.02.12 — 09:48

    (5) может выгрузить содержимое справочника и в ексель на соседние ячейки закрузить? пусть в экселе сравнивают сидят…

       Poky

    10 — 09.02.12 — 09:49

    (7) И желательно сохранить форматирование файла (шрифты, формат, рамки, объединение ячеек).

       Poky

    11 — 09.02.12 — 09:50

    (9) справочник — 250.000 позиций. Выгрузить в excel не получится )

       Maxus43

    12 — 09.02.12 — 09:51

    (10) это уже сложно, ищи другой путь… этот изначально кривой

       shuhard

    13 — 09.02.12 — 09:51

    (10) [И желательно сохранить форматирование файла (шрифты, формат, рамки, объединение ячеек).]

    полный бред

    для мапинга справочников это нужно отрезать

       Maxus43

    14 — 09.02.12 — 09:51

    (11) действия, вывести список. в эксель просто копипастом можно пихнуть на другой лист например

       IamAlexy

    15 — 09.02.12 — 09:53

    (11) будь мужиком, обнови офис до 2010, блеять!

       IamAlexy

    16 — 09.02.12 — 09:53

    (10) ы ы ы ы ….

    ну ну…

    успехов…

       Poky

    17 — 09.02.12 — 09:55

    (15) Зачем? Как мне это поможет?

       Poky

    18 — 09.02.12 — 09:56

    (14) 250 тысяч позиций в список не вывести. Рабочего дня, да и памяти не хватит.

       shuhard

    19 — 09.02.12 — 09:58

    (18) не гони,

    это занимает 3-5 минуты

       Maxus43

    20 — 09.02.12 — 09:58

    (18) ну запросом выдёргивай данные, кусками по 10 тыщ, выводи в ТП и оттуда копипастом в эксель. Или отчет сделай и «СохранитьКопиюКак» — там в эксель

       БибиГон

    21 — 09.02.12 — 09:59

    (5) а зачем? Что должны пользователи сделать еще кроме как поглядеть?

       shuhard

    22 — 09.02.12 — 09:59

    (20) + 1

    или ADODB с реактивной скоростью

       ptiz

    23 — 09.02.12 — 10:00

    (0) Загрузи Ексель в регистр сведений и делай с ним что хочешь. Удобно запросами будет работать.

       Poky

    24 — 09.02.12 — 10:02

    А кто-нибудь пользовался ActiveX объектом «Microsoft Office Spreadsheet 11»?

       Poky

    25 — 09.02.12 — 10:03

    Задача стоит: не выгрузить справочник в excel и не загрузить excel в регистр или еще куда-то.

    Задача стоит: отобразить лист excel-документа на форме в 1С?

       БибиГон

    26 — 09.02.12 — 10:07

    см (21)

       Maxus43

    27 — 09.02.12 — 10:09

    загружай…

    Док = ПолучитьCOMОбъект(Путь + «ценыконкурентов.xls»);

    КоличествоСтраниц = 2;

    Для ТекНомер = 1 По КоличествоСтраниц Цикл

       Контрагент = Док.Sheets(ТекНомер).Cells(1,1).Value;

       Товар       = Док.Sheets(ТекНомер).Cells(2,2).Value;

       Цена       = Док.Sheets(ТекНомер).Cells(2,3).Value;

       счСтроки = 3;

       Сообщить(Строка(Товар) + «-» + Строка(Цена));

       Пока СокрЛП(Товар) <> «» Цикл    // можно использовать другой признак

                                        // окончания данных на листе

           Товар = Док.Sheets(ТекНомер).Cells(СчСтроки,2).Value;

           Цена  = Док.Sheets(ТекНомер).Cells(СчСтроки,3).Value;

           Сообщить(Строка(Товар) + «-» + Строка(Цена));

           
           счСтроки = счСтроки + 1;

           
       КонецЦикла;

    КонецЦикла;    

    Док.Application.Quit();

    Грузи в ТЗ сначала, потом это ТЗ в таб документ на форме можно вывести. без цвета и шрифта и рамок. с этим надо отдельно работать, долго и усердно

       Poky

    28 — 09.02.12 — 10:10

    (26) в конечном счете пользователи должны найти позицию в нашей базе и внести изменеия в excel (по-сути добавить туда несколько колонок «позиция»,»характеристики»,»возможность пересогласования на более дешевый аналог»,»цена»,»сумма» и т.п.)

       Poky

    29 — 09.02.12 — 10:13

    (27) ActiveX-объект «Microsoft Office Spreadsheet 11» позволяет сохранять форматирование и загрузка документа должна быть гораздо быстрее циклического обхода всех ячеек.

    Кто-нибудь его юзал?

       Maxus43

    30 — 09.02.12 — 10:14

    стоп, цель внести изменения в Эксель а не в 1с. и работать надо с экселем. ИМХО — выгружать справочник в эксель таки надо, а не извращаться…

       Poky

    31 — 09.02.12 — 10:19

    (30) да там поиск по справочнику для каждой позиции нужно делать исходя не только из данных справочника! Помимо всего прочего пользователи смотрят историю заказов текущей позиции, финансовые ограничения клиента, подтягивают данные смежных областей (типа возможность применения материала в текущих средах), обязательные комплекты и проч…

    Все это уже есть и работает.

    Нужно просто вытягивать на форму в 1С лист excel.

       ptiz

    32 — 09.02.12 — 10:21

    (31) А почему нельзя затянуть нужные данные в 1С, с ними поработать, сопоставить, а потом обратно занести в ексель?

       Poky

    33 — 09.02.12 — 10:29

    (32) Теряется форматирование файла, схемы и вложенные рисунки.

    Без этого 30-ти страничный документ становится нечитабельным (

       ptiz

    34 — 09.02.12 — 10:31

    (33) Стоп! Никто не говорит, что ексель надо создавать заново.

    После обработки в 1С проставить данные в нужные ячейки существующего файла.

       Poky

    35 — 09.02.12 — 10:38

    (34) Правильно! После обработки мы будем модифицировать excel-файл. А вот с «затянуть нужные данные в 1С» — проблема. Затягивать нужно весь лист excel-файла, с картинками, схемами и сохранением форматирования.

       ptiz

    36 — 09.02.12 — 10:47

    (35) Они картинками, схемами и форматированием для выставления соответствий пользуются?

       Poky

    37 — 09.02.12 — 10:50

    (36) Ага. Комплексные инженерные решения — вещь тонкая. Ошибка в одном узле приведет к разбалансировке всей дорогостоящей системы. Могут и посадить, если новая котельная в -30 вдруг накроется.

       Poky

    38 — 09.02.12 — 10:59

    Я на форму добавил ActiveX-объект «Microsoft Office Spreadsheet 11». Он позволяет сохранять форматирование и т.п. Только не могу понять как загружать в него выбранный файл. Хелп!

       Maxus43

    39 — 09.02.12 — 11:05

    у меня такого нет, гугли методы у этой штуки

       Poky

    40 — 09.02.12 — 11:11

    (39) Если такого нет, то нужно скачать и установить на всех компах, где это будет использоваться «Office Web Component» (OWC11.exe) с microsoft.com.

    Мне повезло — все работают через терминал.

      

    Maxus43

    41 — 09.02.12 — 11:14

    не спасибо, таких извратов мне не надо)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    
    using System;
    using System.Collections.Generic;
    using System.Diagnostics;
    using System.IO;
    using System.Windows.Forms;
    using Excel = Microsoft.Office.Interop.Excel;
     
    namespace WindowsFormsApplication1
    {
     
        public partial class Form1 : Form
        {
     
            List<char> ABC;
            //счетчик и "сбрасыватель" счетчика
            int abcIt = 0;
            int abc = 26; //26 букв в англ. алфавите ;)
     
            public Form1()
            {
                InitializeComponent();
            }
     
     
            private void Form1_Load(object sender, EventArgs e)
            {
     
                ABC = new List<char>();
     
                for (int i = 65; i < 91; i++) //ABCDEF... англ. алфавит
                {
                    ABC.Add((char)i);
                }
     
            }
     
     
            private void button1_Click(object sender, EventArgs e)  //Загружаем данные в dataGridView с Excel файла и вырисовываем dataGridView
            {
                bool Load = true;
                CloseExcel();
     
                bool isSelected = false;
                openFileDialog1.InitialDirectory = "C:";
                openFileDialog1.Title = "Выбрать файл";
                openFileDialog1.FileName = "";
                openFileDialog1.Filter = "Файлы xlsx|*.xlsx";
     
                if (openFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    Prop.Path = openFileDialog1.FileName;
                    isSelected = true;
                    Prop.FileName = openFileDialog1.SafeFileName;
                }
                else
                {
                    MessageBox.Show("Файл не выбран");
                }
     
     
                if (isSelected)  //Файл выбран, начинаем загрузку в dataGridView
                {
     
                    this.Cursor = Cursors.AppStarting; //Меняем вид курсора пока происходит загрузка из файла на dataGridView.
                    dataGridView1.RowHeadersWidth = 60; //Ширина столбца, заголовков строк
                    abcIt = 0;
                    abc = 26;
     
     
                    Excel.Application xlApp;
                    Excel.Workbook xlWorkBook;
                    Excel.Worksheet xlWorkSheet;
                    
     
                    object misValue = System.Reflection.Missing.Value;
     
                    xlApp = new Excel.Application();
     
     
                    var workbooks = xlApp.Workbooks;
     
                    xlWorkBook = workbooks.Open(Prop.Path, 0, false, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "t", false, false, 0, true, 1, 0);
     
                    var worksheets = xlWorkBook.Worksheets;
     
                    xlWorkSheet = (Excel.Worksheet)worksheets.get_Item(1);
     
                    //Счетчики
                    int NullRows = 0;
                    int NullColums = 0;
                    int index = 1;
     
                    //Считаем сколько у нас заполненных строк и столбцов в excel файле. Считать будем по заголовкам. Все остальное в расчет не брал.
     
                    //Количество строк. Подсчет ведется для создания количества строк на dataGridView.
                    for (int x = 1; x < 256; x++) //То есть больше 256х256 он искать не будет. Но и лишние - пустые ячейки он считать не будет.
                    {
                        if (xlWorkSheet.Cells[x, index].Value == null) //Если ячейка пустая, то наш счетчик считает до 5 и выходит из цикла. (Вспомнилась считалочка, "Я считаю до пяти, не могу до десяти")
                        {
                            NullRows++;
     
                            if (NullRows == 5)
                            {
                                Prop.X = x - 5;
                                if (Prop.X > 0) //Проверка на вертикальные заголовки. Если есть текст, то загружаем его в dataGridView
                                {
                                    break;
                                }
                                else
                                {
                                    x = 0; 
                                    NullRows = 0; //Обнуляем счетчики, для дальнейшего подсчета
                                    index++; //Увеличиваем индекс на 1, для просмотра строк, следующих пяти столбцов
                                    if (index == 5) //Если же 5 строк пяти столбцов оказались без текста, то...
                                    {
                                        MessageBox.Show("Файл либо пустой, либо поиск рассчитан на определенное расположение текста в Excel файле. Работа с данным файлом, в данное версии программы, прекращена");
                                        index = 1;
                                        Load = false;
                                        break;
                                    }
                                    
                                }
                            }
                        }
                        else //Если же после пустых ячеек(до 5), есть еще заполненная ячейка, то "обнуляем" наш счетчик.
                        {
                            if (NullRows >= 1)
                            {
                                NullRows = 0;
                            }
                        }
                    }
     
                    //Количество столбцов. Подсчет ведется для создания количества столбцов на dataGridView.
                    for (int y = 1; y < 256; y++)
                    {
                        if (xlWorkSheet.Cells[1, y].Value == null)
                        {
                            NullColums++;
                            if (NullColums == 5)
                            {
                                Prop.Y = y - 5;
                                if (Prop.Y > 0) //Проверка на вертикальные заголовки(надеюсь понятно, что это такое;)). Если есть текст, то загружаем его
                                {
                                    break;
                                }
                                else
                                {
                                    y = 0;
                                    NullColums = 0; 
                                    index++;
                                    if (index == 5)
                                    {
                                        MessageBox.Show("Файл либо пустой, либо поиск рассчитан на определенное расположение текста в Excel файле. Работа с данным файлом, в данное версии программы, прекращена");
                                        index = 1;
                                        Load = false;
                                        break;
                                    }
                                }
                            }
                        }
                        else
                        {
                            if (NullColums >= 1)
                            {
                                NullColums = 0;
                            }
                        }
                    }
     
                    if (Load)
                    {
                        //Рисуем dataGridView1
                        dataGridView1.RowCount = Prop.X;
                        dataGridView1.ColumnCount = Prop.Y;
     
     
                        //названия/имена "x" и "y" малость перепутаны ;)
                        for (int x = 0; x < Prop.Y; x++)
                        {
     
                            if ((string)dataGridView1.Columns[x].HeaderCell.Value == "") //Если вместо "АА" "АВ" и тд. будет "", то...
                            {
                                //Если дойдем до "AZ", то после следующей "махинации", следующий заголовок столбца станет "BA"..."BZ","CA"..."CZ" и тд.
                                if ((x - 26) == 26)
                                {
                                    abcIt++;
                                    abc += 26;
                                }
     
                                dataGridView1.Columns[x].HeaderCell.Value = ABC[abcIt].ToString() + ABC[x - abc].ToString();  //Пишем в заголовки столбцов (AA AB AC AD.. DA DB... ZZ дальше ZZ выдаст ошибку, индекс за пределами массива. Если расчет верен, ZZ будет столбцом № 17602 в Excel файле)
     
                            }
     
                            for (int y = 0; y < Prop.X; y++)
                            {
                                if (dataGridView1.Rows[y].HeaderCell.Value == null) //проверка на null - чтобы лишний раз не записывать одно и то же число в одну и ту же ячейку
                                {
                                    dataGridView1.Rows[y].HeaderCell.Value = (y + 1).ToString();  //Записываем в dataGridView, в строковые заголовки, значения от 1 до Prop.Y
                                }
     
                                //Записываем в dataGridView
                                dataGridView1[x, y].Value = xlWorkSheet.Cells[y + 1, x + 1].Value;
                            }
                        }
     
                    }
                    
                    
     
                    //Закрываем документы
                    
                    xlWorkBook.Close(true, misValue, misValue);
                    xlApp.Quit();
     
     
                    this.Cursor = Cursors.Default; //Меняем вид курсора в первоисходное положение
                    
                }   
     
            }
     
     
            private void button2_Click(object sender, EventArgs e) //Сохраняем в Excel файл
            {
                CloseExcel();
     
                bool isSave = false;
                saveFileDialog1.InitialDirectory = "C:";
                saveFileDialog1.Title = "Сохранить в файл";
                saveFileDialog1.FileName = "";
                saveFileDialog1.Filter = "Файлы xlsx|*.xlsx";
                saveFileDialog1.FileName = Prop.FileName;
                
     
                if (saveFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    Prop.Path = saveFileDialog1.FileName;
                    isSave = true;
                }
                else
                {
                    MessageBox.Show("Файл не сохранен");
                }
     
     
                if (isSave)
                {
     
                    //Если файл не существует, то мы создадим его
                    if (!File.Exists(Prop.Path))
                    {
                        Excel.Application WorkExcel = new Excel.Application();
                        Excel.Workbook WorkBook = WorkExcel.Workbooks.Add(); // создаем книгу
                        
                        WorkBook.SaveAs(Prop.Path);//сохранить Excel файл
     
                        WorkBook.Close();
                        WorkExcel.Quit();
                    }
     
     
                    this.Cursor = Cursors.AppStarting; //Меняем вид курсора пока происходит сохранение в файл.
     
                    Excel.Application xlApp;
                    Excel.Workbook xlWorkBook;
                    Excel.Worksheet xlWorkSheet;
     
     
                    object misValue = System.Reflection.Missing.Value;
     
                    xlApp = new Excel.Application();
     
     
                    var workbooks = xlApp.Workbooks;
     
                    xlWorkBook = workbooks.Open(Prop.Path, 0, false, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "t", false, false, 0, true, 1, 0);
     
                    var worksheets = xlWorkBook.Worksheets;
     
                    xlWorkSheet = (Excel.Worksheet)worksheets.get_Item(1);
     
                    
                    Prop.X = dataGridView1.Columns.Count;
                    Prop.Y = dataGridView1.Rows.Count;
     
     
                    //Сохраняем в Excel файл.
                    for (int x = 0; x < Prop.X; x++)
                    {
                        for (int y = 0; y < Prop.Y; y++)
                        {
                            xlWorkSheet.Cells[y + 1, x + 1].Value = dataGridView1[x, y].Value;
                        }
                    }
     
     
     
                    xlWorkBook.Save();
     
     
     
                    xlWorkBook.Close(true, misValue, misValue);
                    xlApp.Quit();
     
     
                    this.Cursor = Cursors.Default;
     
                    MessageBox.Show("Сохранено!");
     
     
                }
       
     
            }
     
            void CloseExcel()
            {
                int proc = 0;
                bool OK = false;
                bool Cancel = false;
                
                foreach (Process item in Process.GetProcesses())
                {
                    if (item.ProcessName == "EXCEL")
                    {
                        proc++;
                        if (proc > 0 && !Cancel)
                        {
                            //Чтобы не повторяться, то есть по несколько раз не выдавать одно и тоже сообщение
                            if (!OK)
                            {
                                var result = MessageBox.Show("Для корректной работы программы процесс Microsoft Excel нужно завершить. При завершении все не сохраненные файлы будут потеряны. Прежде чем завершить работу процесса, сохраните данные. Все ровно завершить?", "Обнаружен включенный процесс Microsoft Excel", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning);
     
                                if (result == DialogResult.OK)
                                {
                                    OK = true;
                                }
                                else
                                {
                                    Cancel = true;
                                }
                            }
     
                            if (OK)
                            {
                                item.Kill();
                            }
     
                        }
                    }
                    
                    if (Cancel)
                    {
                        break;
                    }
     
                }
                
            }
            
     
     
        }
    }
     

    Megamen2

    Пользователь

    Сообщений: 101
    Регистрация: 21.07.2017

    Здравствуйте, специалисты разбирающиеся в экселе.

    Подскажите — можно ли вытащить на форму — лист, так чтобы можно было на нем — делать все то же самое, что и на обычном листе — вводить данные, рисовать диаграммы и т.д. ?

     

    Nordheim

    Пользователь

    Сообщений: 3154
    Регистрация: 18.04.2017

    А в чем смысл?  Чем не устраивает работа на листе?

    «Все гениальное просто, а все простое гениально!!!»

     

    Megamen2,Здравствуйте, посмотрите

    здесь

    с сообщения №12

     

    Megamen2

    Пользователь

    Сообщений: 101
    Регистрация: 21.07.2017

    Александр П., прошел по ссылке, посмотрел сообщение №12.
    Приведен скриншот того, что мне нужно. Но без каких-либо объяснений. То есть совершенно непонятно — откуда взять эту настройку, как ее подключить и т.д.

     

    Megamen2,Ну если вам название компонента и скриншот из сообщения 13 ни о чем не говорит то извините.

     

    Megamen2

    Пользователь

    Сообщений: 101
    Регистрация: 21.07.2017

    Александр П., подключил этот компонент SpreadSheet.

    А как диаграммы-то в нем строить ?
    И как — рисовать автофигуры ?

     

    Андрей VG

    Пользователь

    Сообщений: 11878
    Регистрация: 22.12.2012

    Excel 2016, 365

    #7

    07.12.2017 10:06:24

    Доброе время суток.

    Цитата
    Megamen2 написал:
    А как диаграммы-то в нем строить ?
    И как — рисовать автофигуры ?

    Никак. SpreadSheet — упрощённая версия рабочего листа, оставшаяся с Excel 2003, когда была возможность публикации страницы с некоторой функциональностью как web-страницы.
    Не совсем понятна цель размещения функциональности листа Excel на форме. Не проще ли сделать форму не модальной и работать с построением автофигур, данными, графиками непосредственно на листе Excel?

     

    Megamen2

    Пользователь

    Сообщений: 101
    Регистрация: 21.07.2017

    #8

    07.12.2017 10:34:16

    Цитата
    Андрей VG написал:
    Не проще ли сделать форму не модальной

    А как — сделать форму не модальной ?

     

    Nordheim

    Пользователь

    Сообщений: 3154
    Регистрация: 18.04.2017

    #9

    07.12.2017 10:36:50

    В свойствах формы установите:

    Код
    ShowModal = False

    Можно при загрузке кодом

    Код
    Private Sub CommandButton1_Click()
    UserForm1.Show vbModeless
    End Sub

    Изменено: Nordheim07.12.2017 10:53:20

    «Все гениальное просто, а все простое гениально!!!»

     

    Megamen2

    Пользователь

    Сообщений: 101
    Регистрация: 21.07.2017

    Nordheim, я не совсем понял.
    А в чем смысл немодальной формы — в моем вопросе ?

     

    Nordheim

    Пользователь

    Сообщений: 3154
    Регистрация: 18.04.2017

    Немодальная форма не блокирует лист поэтому можно не закрывая ее (форму) работать с листом (листами), файлами.

    Изменено: Nordheim08.12.2017 10:24:51

    «Все гениальное просто, а все простое гениально!!!»

     

    Megamen2

    Пользователь

    Сообщений: 101
    Регистрация: 21.07.2017

    Nordheim, так я так — нормально работаю с листом.
    Я спрашивал — как лист — расположить на ФОРМЕ, чтобы там строились диаграммы и можно было рисовать автофигуры.

     

    Андрей VG

    Пользователь

    Сообщений: 11878
    Регистрация: 22.12.2012

    Excel 2016, 365

    #13

    08.12.2017 10:52:28

    Цитата
    Megamen2 написал:
    как лист — расположить на ФОРМЕ

    Написать свой COM-компонент, позволяющий отображать и работать с листом Excel (подобно тому как это можно делать вставив объект листа Excel, например в Word), который подобно другим компонентам, например ProgressBar, можно поместить на UserForm.
    Подойдёт такой ответ?

     

    Megamen2

    Пользователь

    Сообщений: 101
    Регистрация: 21.07.2017

    #14

    08.12.2017 12:03:49

    Цитата
    Андрей VG написал:
    COM-компонент, позволяющий отображать и работать с листом Excel

    Вы не могли бы привести код такого компонента ?

     

    Андрей VG

    Пользователь

    Сообщений: 11878
    Регистрация: 22.12.2012

    Excel 2016, 365

    #15

    08.12.2017 13:33:43

    Цитата
    Megamen2 написал:
    Вы не могли бы привести код такого компонента ?

    А я не уверен, что кто-либо на форуме подобным занимался. Могу предположить, что Владимир (ZVI) или Сергей (Doobler) делали подобное.

    Почитайте

    , в качестве вводного обзора.

    Понравилась статья? Поделить с друзьями:

    А вот еще интересные статьи:

  • Как поменять ячейки местами в excel горячими клавишами
  • Как поменять язык excel vba
  • Как поменять ярлык на документ word
  • Как поменять язык excel 2016
  • Как поменять язык функций в excel

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии