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

Страницы: 1
Проверка данных из списка на ввод нескольких значений в одну ячейку через запятую
 
Добрый день, дорогие форумчане!

Голову ломаю, никак не могу понять какой функцией можно описать поставленную задачу.
Есть список фамилий из нескольких строк и столбцов. Фамилии могут повторяться.
Необходимо проверять данные записанные в ячейку, чтобы они соответствовали условию.
Условие следующее:
Разрешены любые фамилии из списка разделенные запятой с пробелом, но никакие кроме них. И фамилии не должны повторяться.
Что-то вроде ЕСЛИНЕ(СОВПАД(А2:D4);", ";СОВПАД(А2:D4);", ";...n) - запретить

Пример корректно введенных данных:
Иванов, Петров, Сидоров

Заглавные или прописные - не важно.
Фамилия может быть и одна

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

Буду очень признателен за помощь.
Активация форм по введенному в TextBox значению, Необходимо добавить правило, при которым бы активировалась необходимая форма
 
Уважаемые форумчане. Помогите решить проблемку.
Создал в книге три формы для добавления данных. На листе как правило используются одновременно 2-3 формы, поэтому открываю их в режиме vbModeless.
Ввод данных осуществляется путем терминал-ридера (barcodescanner) модели datalogic. Он считывает ШК и возвращает значение.
Смысл задачи в том, чтобы активировать одну из трех форм путем считывания необходимого штрихкода.
Фокус в книге может быть только на одной из шести позиций
В первой форме - в одном из двух текстовых полей
Во второй форме - в одном из двух текстовых полей
Либо же в третьей форме - в одном из двух текстовых полей

Волшебные слова для активации формы:
GiveTerm - активирует первую форму
TakeTerm - активирует вторую форму
AddMan - активирует третью форму

Т.е. если значение одного из текстовых полей этих форм равны одному из этих слов - активируется соответствующая форма.
Код у форм практически идентичный

Код
Private Sub DataAdd()
With ThisWorkbook.Sheets("Выдача").Range("Журнал[ШК Терминала]")
    .Cells(.Rows.Count + 1, 1).Resize(1, 2).Value = Array(TextBox1.Value, TextBox2.Value)
End With
End Sub 

Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean): Call DataAdd:
Me.TextBox1 = ""
Me.TextBox2 = ""
End Sub 

Private Sub UserForm_Activate()
Me.TextBox2.SetFocus
Me.TextBox1.SetFocus
End Sub
 
Я так понимаю колдовать надо в DataAdd()
Попробую что-нибудь до утра надумать, но зная свои способности - сомневаюсь что найду решение.
Буду дико рад любой помощи.  :)
Спасибо!
Не получается установить фокус в поле ввода, Используются формы в режиме vbModeless
 
Уважаемые форумчане. Помогите решить проблемку.
Создал в книге три формы для добавления данных. На листе как правило используются одновременно 2-3 формы, поэтому открываю их в режиме vbModeless.
Хочется настроить формы так чтобы при клике на картинку в форме, или при их активации фокус автоматически устанавливался на Textbox1 но никак не получается этодо добиться.
Пробовал прописывать

Код
Private Sub UserForm_Activate()
Me.TextBox1.SetFocus
End Sub

Private Sub UserForm_Click()
Me.TextBox1.SetFocus
End Sub

Private Sub UserForm_Initialize()
Me.TextBox1.SetFocus
End Sub

Private Sub Image1_Click()
Me.TextBox1.SetFocus
End Sub

Так же пробовал использовать TextBox без Me и заменял Me на "Выдача" (так называется первая форма.
В общем гуглил, пробовал сам, но пока не разобрался. Если кто сможет помочь, буду крайне признателен. Спасибо.
Изменено: chirick86 - 06.12.2013 00:18:48 (Прикрепил файл)
Макрос формы заполнения таблицы, Необходимо чуть-чуть подправить макрос
 
Добрый день, дорогие форумчане!
Вы уже не раз помогали мне в моих вопросах, позвольте спросить еще раз.

Понадобилась мне в журнале форма ввода написанная на VBA.
Имеется журнал, в котором - два листа. На первом листе две формы. Одна вносит данные на таблицу1 первого листа, вторая - на таблицу2 второго листа.
С помощью гугла и любимой Планеты Excel нашел необходимый код. Немного его модифицировал (избавил от лишних ненужных мне функций). На выходе получил вот такой код:
Код
Private Sub CommandButton1_Click()
Dim iLastRow As Long
Dim iList2Sht As Worksheet
Set iList2Sht = ThisWorkbook.Sheets("Лист2")
With Sheets(iList2Sht.Name)
    iLastRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1
    .Cells(iLastRow, 1) = Me.TextBox1
    .Cells(iLastRow, 2) = Me.TextBox2
End With
    Me.TextBox1 = ""
    Me.TextBox2 = ""
End Sub

Все в принципе хорошо и прекрасно работает, но дело в том, что на листах я использую "Умные таблицы", а в коде у нас объявляется переменная "Лист". Из-за этого данные вводятся в первую строку после таблицы. К сожалению, я не силен в VBA. Подскажите, как можно модифицировать данный код с третьей по пятую строку, чтобы объявить именно конкретную таблицу и работу с ней, а не конкретным листом.

И второй вопрос. Можно ли как-то реализовать ввод данных не по нажатию кнопки в форме, а после ввода информации во второе текстовое поле? Если переписать код:
Код
Private Sub TextBox2_Change()
Dim iLastRow As Long
Dim iList1Sht As Worksheet
Set iList1Sht = ThisWorkbook.Sheets("Лист1")
With Sheets(iList1Sht.Name)
    iLastRow = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
    .Cells(iLastRow, 1) = Me.TextBox1
    .Cells(iLastRow, 2) = Me.TextBox2
End With
    Me.TextBox1 = ""
    Me.TextBox2 = ""
End Sub

То изменения заносятся в базу сразу же после первого символа во втором поле, а не после команды ввода.

Заранее благодарю за любую оказанную помощь!
Макрос на запрет заполнения ячейки при условии
 
Добрый день дорогие форумчане.
Создал небольшой журнал для ведения выдачи и приема оборудования.

Использовал в нем макрос "Автоматический ввод текущей даты в ячейку при вводе данных"
Код
Private Sub Worksheet_Change(ByVal Target As Range)
     
    For Each cell In Target
       If Not Intersect(cell, Range("ШК_сотрудника")) Is Nothing Then
            With cell.Offset(0, 2)
               .Value = Now
               .EntireColumn.AutoFit
            End With
       End If
    Next cell
End Sub

Смысл в том, что при вводе данных в таблицу в столбец "ШК_сотрудника", в столбец "Время выдачи" автоматически проставляются дата и время в соответствующую строку.
Время сдачи подхватывается из другой таблицы. Необходимо изменить макрос так, чтобы при вводе сотрудника он бы проверял список уже вбитых сотрудников и не висят ли на них не сданные терминалы, т.е.

1) вводим данные
2) макрос проходит по столбцу "ШК сотрудника"
2а) если не находит работает дальше и вносит дату и время в нужную ячейку
2б) если находит необходимого сотрудника, то:
3)макрос проверяет соответствующую ячейку в столбце "Время сдачи"
3а) если ячейка не пуста - работает дальше и вносит дату и время в нужную ячейку
4а) если ячейка пуста - отменяет введенные данные в ячейку в первом пункте и выводит сообщение (MsgBox) "За сотрудником уже закреплен терминал"

В идеале, если это не сильно усложнит задачу чтобы еще и выводил терминал из столбца "Терминал ФИО", хотя это и не столь обязательно.
Был бы рад, если кто сможет помочь.
Заранее благодарю.
Прикрепил файл, если нужно.
Изменено: chirick86 - 21.10.2013 00:01:12
Макрос, отслеживающий уникальности поля, Необходимо дописать макрос Checkbox от Николая Павлова
 
Имеется некая база предметов из онлайн игры.
На листе применен макрос Checkbox от Николя Павлова
Так как в игре персонаж не может одновременно носить два шлема, либо надеть на себя двое штанов, очень хотелось бы реализовать функцию, которая позволила бы при экипировке предмета определенного класса отменять предыдущую экипировку такого же класса.
Например: Пользователь установил галку напротив какого-нибудь шлема (экипировал его). Затем находит в базе более интересный на его взгляд шлем и тоже его экипирует. При этом отменяется экипировка того, первого, шлема, но не отменяется экипировка всех остальных предметов.
Специально для реализации подобной функции, мною был введен дополнительный столбец B (скрыт по умолчанию) с типом предметов. Где заданы стандартные текстовые значения для предметов (Шлем, Оплечье, Куртка, Перчатки, Поножи, Ботинки, Плащ, Кинжал) для первой и (Браслет, Кольцо, Серьга, Карман, Шея) второй таблицы. Все значения с большой буквы (не знаю важен ли регистр).
Примерный алгоритм:
Так как уже имеется макрос вбивающий экипировку в столбец C при выделении ячейки, скорее всего логичным видится модификация этого макроса, для проверки масива B:C на совпадения с типом экипированного и экипируемого предмета. При нахождении совпадения отменяется экипированный ранее предмет и экипируется новый.

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

Файл с БД

P.S. Огромное спасибо ber$erk за помощь с УФ для выделения строк.
[ Закрыто] Помощь с несколькими макросами, а так же с функцией для текста, аналогичной функции СУММЕСЛИ, Здесь несколько проблем с которыми нужны подсказки/помощь
 
Здравствуйте форумчане и знатоки! Я уже давненько начал создавать один файлик для себя и для друзей из содружества некую базу предметов из одной хорошей онлайн-игры (Властелин колец Онлайн), но столкнулся с некоторыми проблемами из-за довольно поверхностного знания Excel.
В данной книге собирается экипировка персонажа текущей версии игры, а так же последующих обновлений.
База состоит из двух независимых таблиц. В первой таблице все что не относится к бижутерии, но в основном сеты (комплеты) брони. Во второй таблице - бижутерия. (кольца, браслеты и т.д.)
Каждый предмет обладает уникальными характеристиками. Предполагается, что есть возможность экипировать каждый предмет. При этом в соответствующие поля суммируются значения экипированных предметов, чтобы можно было просмотреть полученные характеристики и сравнивать полезность/ценность различных предметов.
Реализованно это по принципу Истина/ложь. Имеется столбец A (по умолчанию скрытый). Значение 1 (истина) соответствует экипированному предмету. 0 - соответственно означает что предмет не экипирован. Через функцию СуммЕсли реализовано суммирование значений экипированных предметов. Макрос экипироваки реализован в столбце C. Решение взято из темы Николая Павлова, за что ему огромное Спасибище!

Далее я привожу список проблем в порядке сложности их реализации (на мой взгляд)

Проблема 1
Необходимо реализовать подсветку (выделение) той строки, которая соответствует экипированному предмету. Что-то подобное я нашел в этой теме Николая Павлова, только там говорится про выделение координат, а в нашем случае, необходимо выделение строки, а так же необходимо сохранить это выделение, продолжая дальнейшую навигацию по листу.
Нужно чтобы когда активирован один предмет и выделена строка, при активации следующего предмета выделялась еще одна строка, но выделение предыдущей строки не слетало. При этом, необходимо чтобы данное выделение выполнялось только в случае если именно происходит событие экипировка, т.е. в столбце C ставится галка. При снятии же галки, выделение данной строки должно пропасть.

Здесь необходимо уточнить, что в будущем для пользователей сохранится возможность только проставлять галочки в столбце С, разворачивать объединенные строки, и пользоваться кнопками макросов. Поэтому можно и желательно реализовать алгоритм именно выделения, не боясь что при нажатии DEL сотрутся все выделенные значения. Вариант применения фоновой заливки ячеек, конечно тоже примлем, но все же очень бы хотелось, чтобы нашелся вариант именно выделения, т.к. он куда эстетичней и приятней для глаза.

Проблема 2
Некоторые предметы, а так же комплекты из нескольких предметов, помимо числовых характеристик обладают текстовой характеристикой. Все текстовые бонусы собираются в столбце R в соответствующих предметам строках. Активация бонуса происходит только в случае экипировки предмета. Это реализовано с помощью двух функций ЕСЛИ, вложенных одна в другую. (просто как правило больше двух текстовых бонусов в одном комплекте не встречается)
Необходимо, по аналогии с функцией СУММЕСЛИ, примененной для числовых характеристик, суммировать текстовые значения так, чтобы в необходимую ячейку (R4) выводилась суммированная текстовая информация из всего столбца R. Я пробовал поиграться с функцией СЦЕПИТЬ, но ввиду слабого знания EXCEL - ничего не вышло. Да и, думается мне, что эта функция здесь вовсе не пригодна.
Более сложный вариант задачи (крайне приветствуетя). Реализовать так, чтобы отдельно собиралась текстовая информация из первой таблицы (доспехи) в ячейку R5, а из второй таблицы (бижутерия) в ячейку R98, а затем чтобы в ячейку R4 уже выводилась общая информация из обеих таблиц. То же самое у меня реализовано через СУММЕСЛИ по всем числовым характеристикам, это можно посмотреть в файле.
Совет: Если кто-то этим займется, предупрежу, чтобы активировать текстовые бонусы нужно экипировать (проставить галочки) предметы имеющие эти бонусы. Например 4-6 вещей из одного сета.

Проблема 3 (самая важная)
Так как в игре персонаж не может одновременно носить два шлема, либо надеть на себя двое штанов, очень хотелось бы реализовать функцию, которая позволила бы при экипировки предмета определенного класса отменять предыдущую экипировку такого же класса.
Например: Пользователь установил галку напротив какого-нибудь шлема (экипировал его). Затем находит в базе более интересный на его взгляд шлем и тоже его экипирует. При этом отменяется экипировка того, первого, шлема, но не отменяется экипировка всех остальных предметов.
Специально для реализации подобной функции, мною был введен дополнительный столбец B (скрыт по умолчанию) с типом предметов. Где заданы стандартные текстовые значения для предметов (Шлем, Оплечье, Куртка, Перчатки, Поножи, Ботинки, Плащ, Кинжал) для первой и (Браслет, Кольцо, Серьга, Карман, Шея) второй таблицы. Все значения с большой буквы (не знаю важен ли регистр).
Примерный алгоритм:
Так как уже имеется макрос вбивающий экипировку в столбец C при выделении ячейки, скорее всего логичным видится модификация этого макроса, для проверки масива B:C на совпадения с типом экипированного и экипируемого предмета. При нахождении совпадения отменяется экипированный ранее предмет и экипируется новый.

Проблема 4 (пока не актуальна, но тоже в будущем необходима)
Если моя несоразмерная наглость еще никого не убила, и вы все еще читаете эту тему, и все прошлые проблемы уже решены (я в процессе буду зачеркивать решенные проблемы с указанием автора решения), то понадобиться решение четвертой и последней на данный момент задачи.
Проблема в том, что в игре персонаж умеет одевать на себя по две серьги, два браслета и два кольца (это при условии что они не обладают уникальностью).
Я еще не продумал как поступить. Самым простым решением конечно является просто продублировать не уникальные серьги, кольца и браслеты, чтобы экипировать по два, но это кажется не логичным и... как бы это сказать... Не эстетичным что-ли. Гораздо интересным решением проблемы было бы ввести новый тип поля, где указывать на уникальность предмета, и если он не является таковым, то возможность задания удвоения его характеристик, что на деле бы означало два экипированных предмета.
Но тут возникает проблема. При таком раскладе нельзя трогать столбец A. Нельзя указать там цифру 2, т.к. там только два значения 0 - ложь и 1 - истина. Численные же характеристики вбиваются вручную и не рассчитываются формулами. Соответственно нужна функция, которая бы отслеживала экипировку предмета, и в случае двойной экипировки, динамично удваивала бы численные характеристики и бонусы предмета, а в случае отмены экипировки, возвращала бы характеристики на исходные.
Повторюсь задача не актуальна и в ней пока совершенно нет необходимости.

Заранее очень-очень благодарю, хотя бы даже за подсказки, если не решение проблем.

Собственно сам файл
Изменено: chirick86 - 11.07.2013 09:31:12
Страницы: 1
Наверх