Як створити в vba excel додаток для складання заявки на канцелярські товари для офісу - трюки

Розглянемо ще одну задачу. Наша мета - розробити зручний додаток для складання заявки на канцелярські товари для офісу. Почнемо з того, що створимо нову робочу книгу Microsoft Excel і на другому аркуші сформуємо список товарів з їх цінами (рис. 2.8). Цей список, як і в попередньому прикладі. організований досить просто - назва і поруч його ціна. Тепер на першому робочому аркуші створимо зручну форму для введення інформації про замовлення (рис. 2.9).

Розглянемо спочатку технічні дії з оформлення першого листа. По-перше, приберемо сітку з екрану (це дію вже зустрічалося раніше). Після цього оформимо стовпці А, В, С і D наступним чином: встановимо зовнішні і внутрішні кордони, введемо написи стовпців в осередку А3, В3, С3 і D3. Тепер перейдемо до розташування елементів управління иа листі. Самий правий елемент управління - «Поле зі списком». Ім'я цього об'єкта нам далі потрібно, і тому для його властивості Name встановимо «наше» значення - Spk.

Як створити в vba excel додаток для складання заявки на канцелярські товари для офісу - трюки

Мал. 2.8. Прайс-лист на канцелярські товари

Крім поля зі списком, на аркуші присутній напис, вище якої в осередку робочого аркуша розташовується слово Підсумок. Сама напис використовується для під: подружжя суми. Її ім'я буде використовуватися в подальших процедурах, і тому встановимо її властивість Name в значення Symma. У верхній частині рис. 2.9 розташовуються ще три кнопки - Очистити. Перерахунок та Друк. Їх імена виберемо соответствешю - Clr. Calc і Prn.

На цьому дизайн інтерфейсу завершено, і можна перейти до програмування. По-перше, необхідно зробити так, щоб список Spk автоматично заповнювався при відкритті книги. Тому оформимо процедуру, виконувану при відкритті книги, в такий спосіб (лістинг 2.11).

'Лістинг 2.11. Процедура Workbook_Open Private Sub Workbook_Open () 'Очищення списку Worksheets (1) .Spk.Clear' Підрахунок кількості записів в прайсі на другому аркуші N = 0 While Worksheets (2) .Cells (N + 2, 1) .Value <> "" N = N + 1 Wend 'Заповнення списку For i = 1 To N a = Worksheets (2) .Cells (i + 1, 1) .Value "" _ Worksheets (2) .Cells (i + 1, 2) .Value "Rub." Worksheets (1) .Spk.AddItem a Next 'Установка нуля в поле для суми Worksheets (1) .Symma.Caption = "0"' Початкова установка списку Worksheets (1) .Spk.ListIndex = -1 End Sub

Як створити в vba excel додаток для складання заявки на канцелярські товари для офісу - трюки

Мал. 2.9. Електронний бланк замовлення на канцелярські товари

Наступне завдання в рамках даної розробки полягає в тому, щоб при натисканні на сюжеті користувача елементі поля зі списком інформація фіксувалася в черговий рядку першого робочого аркуша. Таким способом ми включаємо в заявку черговий рядок, що реалізується за допомогою процедури, представленої в лістингу 2.12.

'Лістинг 2.12. Процедура, яка виконується після клацання на поле зі списком Private Sub Spk_Click () 'Підрахунок в змінної N кількості вже заповнених рядків бланка замовлення N = 0 While Cells (N + 4, 1) .Value <> "" N = N + 1 Wend 'Записуємо назва черговий позиції в заявку Cells (N + 4, 1) = Worksheets (2) .Cells (Spk.ListIndex + 2, 1) .Value' Записуємо ціну черговий позиції з прайсу Cells ( N + 4, 2) = Worksheets (2) .Cells (Spk.ListIndex + 2, 2) .Value 'Використовуємо функцію InputBox для введення кількості товарів ColTov = InputBox ( "Введіть кількість", "введення числа одиниць товару", 1) Cells (N + 4, 3) .Value = ColTov 'Обчислення суми по позиції товару If IsNumeric (ColTov) = True Then Cells (N + 4, 4) .Value = ColTov * Cells (N + 4, 2) .Value End If 'Підрахунок підсумкової суми Symma.Caption = CStr (Val (Symma.Caption) + Cells (N + 4, 4)) End Sub

Тут використовуються стандартні функції Visual Basic: Val (для перекладу даних з тестового виду в числовий), CStr (для перекладу інформації з числового виду в текстовий) і IsNumeric (для перевірки - чи є вираз цілим числом). На рис. 2.10 показано заповнення бланка декількома товарами.

Обробку клацань на кнопках Перерахунок та Очистити ми розглянемо трохи пізніше, а поки займемося третім листом, який показаний на рис. 2.11. Тут ніяких елементів управління немає - тільки текст і форматування осередків. До десятої рядка третього листа текст статичний - результат розміщення та подальшого форматування даних в осередках листа. Починаючи з 11-го рядка, інформація є наслідком виконання процедури, яка виконується після клацання на кнопці Друк. Тепер, після того як заготівля друкованої форми створена, можна перейти до розробки процедури, виконуваної після клацання на кнопці Друк. текст якої з необхідними пояснешшмі наводиться в лістингу 2.13.

Як створити в vba excel додаток для складання заявки на канцелярські товари для офісу - трюки

Мал. 2.10. Заповнення бланка заявки на канцтовари

'Лістинг 2.13. Обробка клацання на кнопці Друк Private Sub Prn_Click () Dim SymmaItog As Long 'Підрахунок числа заповнених рядків з товарами на 3-му аркуші N = 0 While Worksheets (3) .Cells (N + 11, 1) .Value <> "" N = N + 1 Wend 'Очищення інформації з видаленням кордонів For i = 1 To N For j = 1 To 5 Worksheets (3) .Cells (10 + i, j) .Value = "" Worksheets (3) .Cells (10 + i, j) .Borders.LineStyle = xlNone Next Next 'Очищення підсумкової інформації Worksheets (3) .Cells (10 + N + 2, 4) .Value = "" Worksheets (3) .Cells (10 + N + 2, 5) .Value = "" 'Підрахунок числа рядків з товарами на 1-му аркуші N1 = 0 While Cells (N1 + 4, 1) .Value <> "" N1 = N1 + 1 Wend 'Мінлива Symmaltog для підсумкової інформації SymmaItog = 0' Цикл для заповнення 3-го листка For i = 1 To N1 Worksheets (3) .Cells (10 + i, 1) .Value = i Worksheets ( 3) .Cells (10 + i, 2) .Value = Cells (i + 3, 1) Worksheets (3) .Cells (10 + i, 3) .Value = Cells (i + 3, 2) Worksheets (3) .Cells (10 + i, 4) .Value = Cells (i + 3, 3) Worksheets (3) .Cells (10 + i, 5) .Value = Cells (i + 3, 4) SymmaItog = SymmaItog + Cells ( i + 3, 4) 'Оформлення осередку рамкою For j = 1 To 5 Worksheets (3) .Cells (10 + i, j) .Borders.LineStyle = xlContinuos Next Next Worksheets (3) .Cells (10 + N1 + 2, 4) .Value = "Разом" Worksheets (3) .Cells (10 + N1 + 2, 5) .Value = SymmaItog Worksheets (3) .Activate End Sub

На початку процедури вводиться змінна, в якій далі підраховується сума. Для обведення осередків з виведеною інформації ми скористалися властивістю LineStyle колекції Borders. На початку процедури за допомогою присвоєння цій властивості значення xlNone досягається усунення наявних кордонів. У другій половині процедури після виведення інформації осередки обводятся суцільною лінією:

Worksheets (3) .Cells (10 + i, j) .Borders.LineStyle = xlContinuos