Да, проставить да/нет/учёт так будет быстро. А вот чтоб данные скопировать - всё равно нужен цикл. И массив тут тоже не поможет...Разве что с двумя заморачиваться... Или можно эти данные сразу собирать в словарь, и брать уже из словаря в массив из столбца-получателя. Но думаю не стОит так заморачиваться - сколько там может быть в среднем совпадений на одну выбранную персону?
Да, проставить да/нет/учёт так будет быстро. А вот чтоб данные скопировать - всё равно нужен цикл. И массив тут тоже не поможет...Разве что с двумя заморачиваться... Или можно эти данные сразу собирать в словарь, и брать уже из словаря в массив из столбца-получателя. Но думаю не стОит так заморачиваться - сколько там может быть в среднем совпадений на одну выбранную персону?Hugo
Забыл сказать - код в файле Private Sub Worksheet_Change(ByVal Target As Range) уже был, он к моему функционалу отношения не имеет. Просто раз был, то пусть будет для ТС. Если кто сохранил себе как пример - можете этот код удалить, чтоб с толку не сбивал
Забыл сказать - код в файле Private Sub Worksheet_Change(ByVal Target As Range) уже был, он к моему функционалу отношения не имеет. Просто раз был, то пусть будет для ТС. Если кто сохранил себе как пример - можете этот код удалить, чтоб с толку не сбивал Hugo
Почему то не получается перенести работоспособность на мой файл (у него формат xlsm) , копирую макрос , вставляю в свой файл (открываю исходный текст лист1 (учет)) далее в режиме конструктора выделяю 4 формы копирую в буфер обмена, вставляю в свой файл на страницу "учет" - выходит ошибка 400 в чем подвох может быть?
Почему то не получается перенести работоспособность на мой файл (у него формат xlsm) , копирую макрос , вставляю в свой файл (открываю исходный текст лист1 (учет)) далее в режиме конструктора выделяю 4 формы копирую в буфер обмена, вставляю в свой файл на страницу "учет" - выходит ошибка 400 в чем подвох может быть?Лехаа
Трудно сказать... Горячие клавиши задали? Это прописывается вручную в свой ствах макроса по Alt+F8 (т.е. я делал вручную). Если это не помогло (хотя тогда бы просто ничего не работало) - покажите форуму свой файл - удалите лишние листы и лишние данные - оставьте примерно то, что уже было в примере выше. Правдя я xlsm тут посмотреть не смогу (т.е. смогу, но только через конвертер, а у меня после него элементы обычно не работают).
Трудно сказать... Горячие клавиши задали? Это прописывается вручную в свой ствах макроса по Alt+F8 (т.е. я делал вручную). Если это не помогло (хотя тогда бы просто ничего не работало) - покажите форуму свой файл - удалите лишние листы и лишние данные - оставьте примерно то, что уже было в примере выше. Правдя я xlsm тут посмотреть не смогу (т.е. смогу, но только через конвертер, а у меня после него элементы обычно не работают).Hugo
For Each el In Split(oDic.Item(Me.TextBox1.Text)) .Cells(el + 1, 18) = test If test = "да" Then .Cells(el + 1, 31) = .Cells(el + 1, 16) Next
[/vba]Так вот, количество совпадений - это Ubound(Split(oDic.Item(Me.TextBox1.Text)))+1 или можно сделать счётчик и на каждый el его увеличивать. Число получили - и что с ним делать?
Там в коде есть такой блок:
[vba]
Code
For Each el In Split(oDic.Item(Me.TextBox1.Text)) .Cells(el + 1, 18) = test If test = "да" Then .Cells(el + 1, 31) = .Cells(el + 1, 16) Next
[/vba]Так вот, количество совпадений - это Ubound(Split(oDic.Item(Me.TextBox1.Text)))+1 или можно сделать счётчик и на каждый el его увеличивать. Число получили - и что с ним делать?Hugo
Полученное число отобразить на панельке, примерно такой надписью "Всего: 3" коротко и ясно - нужно это для проверки, потому как вносится это с бумажного носителя и было бы наглядно исправили три совпадения как и на бумаге , а то так как то в слепую получается но так вообще легче жить стало! Спасибо еще раз огромное !
Полученное число отобразить на панельке, примерно такой надписью "Всего: 3" коротко и ясно - нужно это для проверки, потому как вносится это с бумажного носителя и было бы наглядно исправили три совпадения как и на бумаге , а то так как то в слепую получается но так вообще легче жить стало! Спасибо еще раз огромное !Лехаа
Сообщение отредактировал Лехаа - Четверг, 30.08.2012, 12:46
Тогда лучше сразу при выборе клиента показать, сколько его записей в таблице - если что-то подозрительно, то кнопку можно не нажимать Вечером посмотрю - там нужно ещё и "панельку" добавлять... Или может прямо на кнопке и написать, вместо ОК? Всё равно файл только из дома смогу показать. Может пока сами попробуете сделать? Как поменять надпись на кнопке - запишите процесс рекордером, потом используйте полученный код.
Тогда лучше сразу при выборе клиента показать, сколько его записей в таблице - если что-то подозрительно, то кнопку можно не нажимать Вечером посмотрю - там нужно ещё и "панельку" добавлять... Или может прямо на кнопке и написать, вместо ОК? Всё равно файл только из дома смогу показать. Может пока сами попробуете сделать? Как поменять надпись на кнопке - запишите процесс рекордером, потом используйте полученный код.Hugo
Не получилось вчера заняться кнопкой... Поэтому сегодня просто код, без файла: 1. эту процедуру замените на такую:
[vba]
Code
Private Sub ListBox1_Click() flag = True TextBox1 = ListBox1.List(ListBox1.ListIndex, 1) Me.CommandButton1.Caption = UBound(Split(oDic.Item(Me.TextBox1.Text))) + 1 Me.ListBox1.Visible = False Me.ComboBox1.Visible = True Me.CommandButton1.Visible = True End Sub
[/vba] 2. Ну а тут обнаружилось 4 лишних строки (немного от этого страдал функционал), замените всё на это:
[vba]
Code
Private Sub TextBox1_Change() Dim X As Long, i&, kk If Not flag Then Me.ListBox1.Clear If Len(Me.TextBox1) <> 0 Then Me.ListBox1.Visible = True X = 0 With ListBox1 For Each kk In oDic.keys If UCase(kk) Like "*" & UCase(Me.TextBox1) & "*" Then .AddItem "" .List(X, 1) = kk X = X + 1 End If Next End With Else Me.ListBox1.Visible = False End If End If flag = False End Sub
[/vba]
Вроде бы всё...
Не получилось вчера заняться кнопкой... Поэтому сегодня просто код, без файла: 1. эту процедуру замените на такую:
[vba]
Code
Private Sub ListBox1_Click() flag = True TextBox1 = ListBox1.List(ListBox1.ListIndex, 1) Me.CommandButton1.Caption = UBound(Split(oDic.Item(Me.TextBox1.Text))) + 1 Me.ListBox1.Visible = False Me.ComboBox1.Visible = True Me.CommandButton1.Visible = True End Sub
[/vba] 2. Ну а тут обнаружилось 4 лишних строки (немного от этого страдал функционал), замените всё на это:
[vba]
Code
Private Sub TextBox1_Change() Dim X As Long, i&, kk If Not flag Then Me.ListBox1.Clear If Len(Me.TextBox1) <> 0 Then Me.ListBox1.Visible = True X = 0 With ListBox1 For Each kk In oDic.keys If UCase(kk) Like "*" & UCase(Me.TextBox1) & "*" Then .AddItem "" .List(X, 1) = kk X = X + 1 End If Next End With Else Me.ListBox1.Visible = False End If End If flag = False End Sub
Hugo, добрый день! обнаружил что если выставлять "да" не копируется значение из ячейки "P" в я чейку "AE" такое есть в макросе или такое сложно прикрутить? (в начальной задачке такое указывал: в тех ячейках в которых проставилось "да" нужно скопировать содержимое ячейки P в ячейку AE)
Hugo, добрый день! обнаружил что если выставлять "да" не копируется значение из ячейки "P" в я чейку "AE" такое есть в макросе или такое сложно прикрутить? (в начальной задачке такое указывал: в тех ячейках в которых проставилось "да" нужно скопировать содержимое ячейки P в ячейку AE)Лехаа
Здравствуйте. Т.е. 31.08.2012, 13:50 "все работает", а 18.09.2012 09:34 перестало? В коде Private Sub CommandButton1_Click() была (есть?) такая строка: [vba]
Code
If test = "да" Then .Cells(el + 1, 31) = .Cells(el + 1, 16)
[/vba] Так что что-то копируется. Другой вопрос - что и куда? Может быть в 16-ом столбце нет данных, или формат таблицы изменился и вместо "+1" нужно писать иначе? Но тогда и тут "да" будет в другой строке: [vba]
Code
.Cells(el + 1, 18) = test
[/vba]
Здравствуйте. Т.е. 31.08.2012, 13:50 "все работает", а 18.09.2012 09:34 перестало? В коде Private Sub CommandButton1_Click() была (есть?) такая строка: [vba]
Code
If test = "да" Then .Cells(el + 1, 31) = .Cells(el + 1, 16)
[/vba] Так что что-то копируется. Другой вопрос - что и куда? Может быть в 16-ом столбце нет данных, или формат таблицы изменился и вместо "+1" нужно писать иначе? Но тогда и тут "да" будет в другой строке: [vba]