Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Мое решение для учета клиентов и изготовления заказов
 
В свое время возникла потребность добавить несколько функций к обычной таблице, дабы было удобнее контролировать процесс изготовления заказов и следить за расходами. Уже после добавления первой упрощенной функции было понятно, что на этом будет сложно остановиться и через пару месяцев постоянных дополнений ту первоначальную табличку с клиентами было совсем уж и не узнать.
В этом примере я постараюсь объяснить, что да как работает в моей “программе” в силу своих возможностей (я не являюсь программистом)
Сначала объясню, что вообще хотелось получить:
1) Нужна была таблица, в которой можно было бы вести учет клиентов, заказов (с возможностью отслеживать стадии от заготовки до отправки), денежных средств (как долги у клиентов, так и общая прибыль по клиентам)
2) На первой странице нужно получить список всех клиентов и тут же увидеть есть ли у них заказы или же денежные долги, а также кол-во материала, требуемое для изготовления заказа.
3) У каждого клиента должен быть свой собственный лист, на котором можно получить детальную информацию по заказам, а также должны быть формы, которые позволяют быстро добавлять информацию о новом заказе, о статусе выполнения заказа и др. вспомогательные элементы. Плюс необходимо иметь возможность быстро ориентироваться в данных таблицы для чего была применена цветовая схема, которая закрашивала строки с разными статусами в определенные цвета.

Посмотреть видео работы таблицы можно тут.


Для корректной работы примера нужно включить вот эти библиотеки в VBA (зайти в Tools / references и поставить галочки):



Увы, 160 кБ (да еще в архивах) при разрешенных 100. Извините... [МОДЕРАТОР]

к сожалению даже в архиве из-за размера нельзя разместить так что выкладываю в гугл диске:
https://drive.google.com/open?id=0BzwnDGw1EaQOcEUtbEhSbTBRT0U
Изменено: Antero - 22.04.2017 22:52:14
VBA: возможно ли часть кода Формы перенести в отдельный Модуль и далее обращаться к нему?
 
вроде и сам сделал, правда пришлось внести код в саму форму через Private Sub vychislenie(), а в код кнопки вызов по vychislenie (жаль что просто создав модуль так не получается)

Но по крайней мере код сейчас в конце и не мешает
VBA: возможно ли часть кода Формы перенести в отдельный Модуль и далее обращаться к нему?
 
я не программист что бы написать лаконичный код - но хотя бы упорядочить было бы уже нормальным выходом из положения.
VBA: возможно ли часть кода Формы перенести в отдельный Модуль и далее обращаться к нему?
 
что бы разгрузить код - весьма неудобно редактировать и дописывать такое нагромождение
VBA: возможно ли часть кода Формы перенести в отдельный Модуль и далее обращаться к нему?
 
Здравствуйте.
Интересует такой вопрос:
Есть Форма в которой пользователь выбирает значение из нескольких выпадающих списков и при нажатии на кнопку на основе выбранного должно произойти вычисление.
Однако все эти Ифы и Селект кейсмы (например If combo1.text="1" then ...) занимают довольно много места на экране из-за того что значений в списках довольно много.
Вот и я задался вопросом - можно ли это перенести в отдельный модуль, а в код нажатия кнопки вставить его вызов ?
как в ADO используя INSERT INTO обратиться к столбцу таблицы базы данных по номеру, а не по названию
 
Меня сподвигло к таким телодвижениям то, что в будущем количество как и наименования столбцов в базе данных могут меняться и дабы не переписывать программу нужно сразу воспользоваться масштабируемым кодом

я пошел вот по такому пути:

1) определяем кол-во столбцов в нужной таблице нашей БД
Код
Dim fldCount As Integer
fldCount = rec.Fields.Count

2) создаем массив который наполняем именами столбцов
Код
Dim Array_Var() As String
    For iCol = 1 To fldCount
    ReDim Preserve Array_Var(iCol - 1)
       Array_Var(iCol - 1) = rec.Fields(iCol - 1).Name
    Next

3) наполняем БД
Код
kolvo = ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row 'узнаем последнюю заполненную строку во втором столбце (в моем случае 2-ой столбец самый показательный)

    Dim gg As String
    Dim ff As String
    Dim tt As String

    For k = 8 To kolvo 
    tt = "INSERT INTO " & idklientabd
         For i = 0 To fldCount - 1
         gg = gg & Array_Var(i)
         If i <> (fldCount - 1) Then gg = gg & ", "
         ff = ff & "'" & ActiveSheet.Cells(k, i + 1) & "'"
         If i <> (fldCount - 1) Then ff = ff & ", "
         Next i
    cmd.CommandText = tt & " (" & gg & ") VALUES (" & ff & ")"
    cmd.Execute
    gg = ""
    ff = ""
Next k
Изменено: Antero - 11.10.2016 19:40:44
как в ADO используя INSERT INTO обратиться к столбцу таблицы базы данных по номеру, а не по названию
 
Здравствуйте уважаемые форумчане.
В данный момент я использую при заполнении таблицы БД следующий код:
Код
Do While Not rec.EOF ' очищаю базу данных (в моем случае это более простой способ заполнение базы - сначала все удалить, потом наполнить)
rec.Delete
rec.MoveNext
Loop
   kolvo = Sheets(idklienta).Cells.SpecialCells(xlCellTypeLastCell).Row ' узнаю последнюю строку в таблице эксель

 For i = 8 To kolvo
    bd1 = Sheets(idklienta).Range("A" & i)
    bd2 = Sheets(idklienta).Range("B" & i)
    bd3 = Sheets(idklienta).Range("C" & i)
    bd4 = Sheets(idklienta).Range("D" & i)
cmd.CommandText = "INSERT INTO " & idklientabd & " (`id`, `data`, `stoimost`, `komentarii`) VALUES ('" & bd1 & "','" & bd2 & "','" & bd3 & "','" & bd4 & "'')"
cmd.Execute
next i

Однако со временем столбцов станет больше и из-за этого мне кажется что данный код не очень то масштабируемый - возможно есть способ вносить данные в столбец не указывая его имя, а указывать его номер ?
Если так нельзя то быть может есть способ создать массив состоящий из имен заголовков столбцов и уже через него записывать данные.
Изменено: Antero - 10.10.2016 14:18:23
VBA - как основываясь на выделенных ячейках удалить строки
 
Большое спасибо за помощь.
VBA - как основываясь на выделенных ячейках удалить строки
 
к сожалению не работает - вылетает ошибка

ps
Нашел что можно добавить Is Nothing - тогда работает
Изменено: Antero - 02.10.2016 10:49:29
VBA - как основываясь на выделенных ячейках удалить строки
 
Спасибо.
Скажите, а как можно проверить не выбраны ли ячейки с 1 по 7 строку
VBA - как основываясь на выделенных ячейках удалить строки
 
необходим именно макрос - он будет встроен в существующую систему
VBA - как основываясь на выделенных ячейках удалить строки
 
Здравствуйте.
Пожалуйста подскажите как удалить строки чьи ячейки выделены, при этом если вдруг случайно выделена ячейка хоть одной из строк с 1 по 7 то выдавалась бы предупреждение об ошибке (в этих строках важная информация которую нельзя потерять)

например выделены ячейки D20:F20 и E9 - нужно удалить строки 9 и 20
Как скопировать элементы на форме и разместить их ниже существующих
 
Цитата
Grr написал:
Думал, Вам будет интересно самостоятельно прийти к нужному результату
Конечно я добавлю комбобокс - но сначала решил попробовать с простым текстбоксом )
Как скопировать элементы на форме и разместить их ниже существующих
 
Цитата
Grr написал:
В контексте моего примера будет так:
Большое спасибо !!!
Как скопировать элементы на форме и разместить их ниже существующих
 
Цитата
Grr написал:
десь я получаю значения введенные в предыдущую пару текст боксов и присваиваю полученное значение вновь созданным элементам формы
Извините, но я не понял - что бы присвоить переменной данные из текстбокса как нужно к нему обратиться ?
к обычному текстбоксу я обращаюсь так
perem = textbox1.text

но подобным образом получить значение из tb1 не получается ((
Изменено: Antero - 18.11.2015 15:23:53
Как скопировать элементы на форме и разместить их ниже существующих
 
Спасибо за пример - однако буду очень благодарен если поясните некоторые моменты:-
1) какие имена получаются у текст боксов (возможно нужно получать значение которое введено в них каким то специфическим образом, или можно и так text1.text )
2) что значит
On Error Resume Next:
           .Value = UserForm1.Controls("tb" & (CurrentNumber * 2 - 2 + i)).Value

3) что значит
Set aCommands(X).DieCmds = obTemp
Как скопировать элементы на форме и разместить их ниже существующих
 
Здравствуйте.

Пожалуйста подскажите как скопировать определенные элементы на форме (с сохранением свойств) и расположить их ниже существующих.

Например на форме есть два комбобокса (combo1 и combo2 ) и тесктбокс (text1) и нужно, что бы при нажатии на кнопку на форме появились еще два комбобокса (combo3 и combo4), а так же текстбокс (text2) .
При повторном нажатии на кнопку так же копируются и вставляются эти элементы.

содержание комбобоксов (combo1 и combo2) задается в
Код
UserForm_Activate()
Combo1.List = Application.Transpose(Sheets("Лист1").Range("AB2:AB40"))
Combo2.List = Application.Transpose(Sheets("Лист1").Range("AD2:AD40"))

нужно что бы при копировании боксов копировалось и их содержимое
Изменить цвет в диапазоне ячеек в строках где выделены ячейки - VBA
 
Спасибо - дальше буду пытаться разбираться - просто это действие заменяет несколько тех что пришлось бы сделать моим методом .
Еще раз ОГРОМНОЕ спасибо
Изменить цвет в диапазоне ячеек в строках где выделены ячейки - VBA
 
Цитата
МВТ написал: Можно просто
Да -так более понятно ))
Я опробовал код в действии - все замечательно ! И под это дело мне пришла в голову мысль как можно еще улучшить таблицу, но для этого нужно под конец операции по смене цвета сделать так, что бы была выделена строка которая находится ближе к началу.
Например мы поменяли цвет в ячейках A20:M20, A18:M18, A17:M17, A8:M8 - нужно что бы под конец операции строка A8 была выделена  
Изменить цвет в диапазоне ячеек в строках где выделены ячейки - VBA
 
Большое вам спасибо MBT
Попробую разобраться в коде - тут практически все команды я вижу впервые ))
Изменено: Antero - 09.11.2015 15:49:56
Изменить цвет в диапазоне ячеек в строках где выделены ячейки - VBA
 
А как сделать так, что бы цвет менялся только в определенном диапазоне ячеек A:M
Изменено: Antero - 09.11.2015 15:15:31
Изменить цвет в диапазоне ячеек в строках где выделены ячейки - VBA
 
Здравствуйте.
столкнулся с задачкой которая мне не по силам ((
Суть задачи такова :
нужно изменить цвет ячеек в диапазоне Ax:Mx в тех строках листа где пользователь выделил ячейки (пользователь может выделить и более одной ячейки в строке, но это не имеет значение - главное именно то что ячейки выделены в нужных строках)

До этого я работал только с одной строкой где выбрана ячейка и использовал вот такой код:
Код
Dim arow As Integer
Dim nrow As String
arow = ActiveCell.Row
nrow = "A" & arow & ":M" & arow
ActiveSheet.Range(nrow).Interior.Color = RGB(198, 224, 180)
Страницы: 1
Наверх