Страницы: 1
RSS
Отчет о проделанной работе, Застрял на макросе
 
Добрый день.
Задача следующая:
Необходимо сделать форму отчета о проделанной работе сотрудника за день.
В столбцах "Задача" и "Название компании" в каждой последующей ячейке должен быть выпадающий список с возможностью ввода новых данных с их последующим сохранением в списке( с добавлением новых элементов). Ячеек в столбце "Задача" не фиксированное количество, т.е количество дел у человека может быть десять, а может и больше(но сомневаюсь что больше тридцати). Соостветственно нужно будет добавить еще одну ячейку с выпадающим списком.

Все бы хорошо,для первого выпадающего списка в столбце "Задача" все сделал. Однако, когда дело дошло до следующей ячейки я застрял. На макросе. В ВБ не писал со времен первых курсов в институте и все операторы позабыл.

Требуется помощь в написании макроса.
 
Цитата
Необходимо сделать форму отчета
Так включите стандартную форму XL - она вам и для заполнения таблицы пригодится, и для отчета подойдет (при включенных фильтах). Да и "болванкой" может послужить для новой формы... ;)
"Ctrl+S" - достойное завершение ваших гениальных мыслей!.. ;)
 
Попарсил в поисковиках-не нашел ничего дельного. Не совсем понимаю о чем вы.  :)
 
Цитата
Не совсем понимаю
Форма условна. Где кусок таблицы (в реальной структуре и форматах), по данным которой вы собираетесь строить отчет? И, по-моему, вы немного запутались в двух соснах - вводить через форму и через нее отчитываться... ;)
"Ctrl+S" - достойное завершение ваших гениальных мыслей!.. ;)
 
Форма не привязана ни к какой CRM.

Данные берутся следующим образом.
Работник сам ведет учет своего рабочего времени. Заполняет поля "Задача" и "Название", а так же поля "Время начала" и "Время окончания".

Ежедневно в конце рабочего дня форма отправляется руководителю.

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

Написал более развернутый ответ, но благодаря багу он не отправился. :evil:
 
М-да, стартуйте - http://www.planetaexcel.ru/techniques/1/ !.. ;)
ps Попутно - выпадающий календарь.
"Ctrl+S" - достойное завершение ваших гениальных мыслей!.. ;)
 
Собственно на основании этого мануала и делал свою форму. Однако встал на макросе.
 
А что не получается?
 
Off
>> Однако встал на макросе.
Однако скабрезненько, двузначненько :D
Я сам - дурнее всякого примера! ...
 
Сделав в первой ячейке выпадающий список согласно примеру(все работает в первой ячейке без проблем) перешел к следующей. И тут появилась проблема-выпадающий список работает, однако при вводе нового текста в ячейку он не вносится в выпадающий список(как в первой ячейке).

Приложил пример. Там все видно.
 
Так нужно создать именованный (динамический) диапазон и контролировать ЭТУ ячейку на событие Change.
 
И каким образом реализовывается контроль ячейки на событие?

Не могли бы вы представить рабочий код?
 
А здесь вы не бывали - http://www.planetaexcel.ru/techniques/1/35/ ?!. ;)
"Ctrl+S" - достойное завершение ваших гениальных мыслей!.. ;)
 
Цитата
И каким образом реализовывается контроль ячейки на событие?
Не могли бы вы представить рабочий код?
Рабочий код для ячейки С9 смотрите в ВАШЕМ же файле.
 
Наверное я неверно выразился. Для С9 все работает.
Допустим я хочу,что бы все что есть в ячейке С9 было и в ячейке С10(и так далее). Как в таком случае выглядит код?
Для С9 вот так:
Private Sub Worksheet_Change(ByVal Target As Range)

Dim lReply As Long

   If Target.Cells.Count > 1 Then Exit Sub
   If Target.Address = "$C$9" Then
    If IsEmpty(Target) Then Exit Sub
      If WorksheetFunction.CountIf(Range("Значение"), Target) = 0 Then
         lReply = MsgBox("Добавить введенное имя " & _
                        Target & " в выпадающий список?", vbYesNo + vbQuestion)
         If lReply = vbYes Then
             Range("Значение").Cells(Range("Значение").Rows.Count + 1, 1) = Target
         End If
      End If
    End If
End Sub
 
Если нужно перечислить сразу несколько ячеек - используйте диапазон. Вместо
Код
If Target.Address = "$C$9" Then
Напишите такую строку:
Код
If Not Intersect(Target, Range("C9:C100")) Is Nothing Then

И оформляйте код тегом.
 
Юрий, огромное спасибо. В таком варианте все работает.

Но возник сопутствующий вопрос. Попытался на тот же лист добавить код для столбца "Название компании" с адресами ячеек D9:D100. Однако при попытке ввода в выпадающий список нового названия компании появилась ошибка "Compile Error:Ambiguousname detected:Worksheet_change" и дается ссылка на строку:
Private Sub Worksheet_Change(ByVal Target As Range).
 
В листе может быть только один макрос с таким названием. Вот Экс и ругает Вас.
Я сам - дурнее всякого примера! ...
 
В таком случае как действовать дальше?

Прикрепляю файл с текущими результатами.
Изменено: alex89 - 12.08.2013 14:21:34
 
Цитата
alex89:
как действовать дальше?
Подумать.
Скрытый текст
Я сам - дурнее всякого примера! ...
 
Огромное спасибо, господа профессионалы!
Страницы: 1
Читают тему
Наверх