Здравствуйте. Пробовал найти здесь похожую информацию, но отчаялся. Вот задача. Необходимо создать макрос на кнопку, которая (после ее нажатия) будет сохранять выбранные данные из выпадающих списков (которые выберет пользователь) на отдельные листы. В одном листе будет сохранять каждое выбранное значение как цифровое увеличение на единицу в соответствующие колонки (Список учета 1 и 2). А во втором - в конкретные ячейки наименование выбора из выпадающего списка (Лист учета)
Отлично и кратенько. Но немного не то..В последнем листе должны сохраняться как цифры так и названия выбранных наименований.. А не цифровая позиция наименования выпадающего списка.
Semenov_0, задание не понятно. Например почему на листе "СПИСОК учета 1", под 39 пунктов 15? Ведь на листе "Таблица выбора" под пунктом 39 выбрано число "3". Какая взаимосвязь между 3 и 15?
В листе "Таблица выбора" работают выпадающие списки. Под номером 39 как раз подхватывается информация (в данном случае это цифра 3) из листа "Список учета 1". Задача состоит в следующем: 1. Пользователь в листе "Таблица выбора" из выпадающих списков делает выбор. Нажимает кнопку "Сохранить". 2. Выбранные данные (как цифры так и текст) должны сохраниться в листах: 2.1. "Список учета 1" и "Список учета 2" нарастающим итогом с шагом +1 в числовом выражении напротив значения, которое будет выбрано в "Таблице выбора". 2.2. "Лист учета" - сохраняется как бы "маска" выбора из листа "Таблица выбора".
Прописанный здесь макрос работает, но не до конца правильно, т.к. надо сохранять не числовой вариант выбора из выпадающего списка, а текст. То есть, если я выбрал под номером 41 слово "нет", то в "Листе учета" под номером 41 должно отобразиться именно слово "нет", а не цифра 3, которая соответствует его номеру по списку выбора. Вот как-то так...
Макрос работает хорошо для сохранения данных в листах "Список учета1" и "Список учета2". А вот в "Листе учета" он сохраняет не так как надо.. И лучше, если бы это оформить именно макросом на кнопку "Сохранить", а не прописывать формулу, чтобы подхватывала данные или что-то в этом роде..
Что-то ничего не понял.. Так как мне надо больше данных, то я решил добавить выпадающие списки. Но как только я это сделал, мне выдало ошибку...
Код
Set objControl = shTablica.Shapes("Drop Down 1").ControlFormat
-- пишет, что не найден.. Не могу понять..((Может подскажете?
вот весь код.я правильно оформил тэгом??
Код
Option Explicit
Sub СОХРАНИТЬ()
Dim shTablica As Worksheet
Dim shListUcheta As Worksheet, shSpisok1 As Worksheet, shSpisok2 As Worksheet
Dim objControl As ControlFormat, rng As Range, var, r As Long
Set shTablica = ActiveSheet
Set shListUcheta = Worksheets("Лист учета")
Set shSpisok1 = Worksheets("СПИСОК учета 1")
Set shSpisok2 = Worksheets("СПИСОК учета 2")
Set objControl = shTablica.Shapes("Drop Down 1").ControlFormat
r = WorksheetFunction.Match(CDbl(objControl.List(objControl.ListIndex)), shListUcheta.Columns("A"), 0)
Set objControl = shTablica.Shapes("Drop Down 39").ControlFormat
shListUcheta.Cells(r, "B").Value = objControl.List(objControl.ListIndex)
Set objControl = shTablica.Shapes("Drop Down 40").ControlFormat
shListUcheta.Cells(r, "C").Value = objControl.List(objControl.ListIndex)
Set objControl = shTablica.Shapes("Drop Down 41").ControlFormat
shListUcheta.Cells(r, "D").Value = objControl.List(objControl.ListIndex)
Set objControl = shTablica.Shapes("Drop Down 42").ControlFormat
shListUcheta.Cells(r, "E").Value = objControl.List(objControl.ListIndex)
Set objControl = shTablica.Shapes("Drop Down 43").ControlFormat
shListUcheta.Cells(r, "F").Value = objControl.List(objControl.ListIndex)
Set rng = shSpisok1.Range("A2:B16")
Set objControl = shTablica.Shapes("Drop Down 39").ControlFormat
var = objControl.List(objControl.ListIndex)
r = WorksheetFunction.Match(CDbl(var), rng.Columns("A"), 0)
rng.Cells(r, "B").Value = rng.Cells(r, "B").Value + 1
Set rng = shSpisok1.Range("A19:B20")
Set objControl = shTablica.Shapes("Drop Down 40").ControlFormat
var = objControl.List(objControl.ListIndex)
r = WorksheetFunction.Match(CDbl(var), rng.Columns("A"), 0)
rng.Cells(r, "B").Value = rng.Cells(r, "B").Value + 1
Set rng = shSpisok1.Range("A28:B30")
Set objControl = shTablica.Shapes("Drop Down 41").ControlFormat
var = objControl.List(objControl.ListIndex)
r = WorksheetFunction.Match(var, rng.Columns("A"), 0)
rng.Cells(r, "B").Value = rng.Cells(r, "B").Value + 1
Set rng = shSpisok1.Range("C2:D4")
Set objControl = shTablica.Shapes("Drop Down 43").ControlFormat
var = objControl.List(objControl.ListIndex)
r = WorksheetFunction.Match(CDbl(var), rng.Columns("C"), 0)
rng.Cells(r, "D").Value = rng.Cells(r, "D").Value + 1
Set rng = shSpisok2.Range("A2:B211")
Set objControl = shTablica.Shapes("Drop Down 42").ControlFormat
var = objControl.List(objControl.ListIndex)
r = WorksheetFunction.Match(CDbl(var), rng.Columns("A"), 0)
rng.Cells(r, "B").Value = rng.Cells(r, "B").Value + 1
End Sub
Semenov_0, оформите код тегами. У Вас ошибка предполагаю здесь (а не там, где Вы написали в посте 9):
Код
Set objControl = shTablica.Shapes("Drop Down 43").ControlFormat
Это означает, на активном листе нет выпадающего списка с именем "Drop Down 43". В посте 7 я написал, что изменил имена выпадающих списков. Вам надо изменить имя у выпадающего списка, который Вы вставили.
стартовое - в смысле самое первое? Если да, то вроде изначально написал все сразу и ничего не менял.. В любом случае, просто значит раньше не обращал внимания на возможность редактирования сообщений..
Да и тут прошу помочь в совсем другом вопросе.. т.к. или лыжи не едут, или...
А если я не весь код прописал, то будет выдавать ошибку? Я имею в виду, что типа не видит имя списка..
Я имею в виду следующее: прописал только это действие..
Код
Set objControl = shTablica.Shapes("Drop Down 43").ControlFormat
shListUcheta.Cells(r, "G").Value = objControl.List(objControl.ListIndex)
А вот это еще не прописывал...
Код
Set rng = shSpisok1.Range("C2:D4")
Set objControl = shTablica.Shapes("Drop Down 43").ControlFormat
var = objControl.List(objControl.ListIndex)
r = WorksheetFunction.Match(var, rng.Columns("C"), 0)
rng.Cells(r, "D").Value = rng.Cells(r, "D").Value + 1
ткните мне пальцем кто-нибудь куда и как проставить правильно имя списка, чтобы в коде vba он учитывался и был виден...!!
Semenov_0, в посте 7 написано, как имя назначать. Прочитайте и сравните с тем, что Вы показываете в посте 17. Я так понял, что Вы назначили имя ячейке, а нужно назначить имя выпадающему списку - выделите его, а затем в поле "Имя" назначьте имя.
Karataev написал: Semenov_0, в посте 7 написано, как имя назначать. Прочитайте и сравните с тем, что Вы показываете в посте 17.Я так понял, что Вы назначили имя ячейке, а нужно назначить имя выпадающему списку - выделите его, а затем в поле "Имя" назначьте имя.
!!!Точно!!Нужно на самом деле быть внимательным просто...Нда.. только уже выскочила ошибка cdbl(var)= tipe mismatch вот тут - в строке 4 кода:
Код
Set rng = shSpisok1.Range("C2:D4")
Set objControl = shTablica.Shapes("Drop Down 43").ControlFormat
var = objControl.List(objControl.ListIndex)
r = WorksheetFunction.Match(CDbl(var), rng.Columns("C"), 0)
rng.Cells(r, "D").Value = rng.Cells(r, "D").Value + 1
В переменную "var" данные берутся из выпадающего списка "Drop Down 43". CDbl переводит данные в переменной "var" в число, но в переменной "var" не число, поэтому происходит ошибка. Значит в выпадающем списке не число.
точно. Не число, а текст. Уже начал читать про то, что написано в этой строке.. спасибо за пояснение. Но вот вы прописали такой же код для выпадающего списка 41 - и все работает.. Вот я и подумал, что не стоит переписывать по-другому.. вот как то выглядит::
Код
Set rng = shSpisok1.Range("A28:B30")
Set objControl = shTablica.Shapes("Drop Down 41").ControlFormat
var = objControl.List(objControl.ListIndex)
r = WorksheetFunction.Match(var, rng.Columns("A"), 0)
rng.Cells(r, "B").Value = rng.Cells(r, "B").Value + 1
!!точно, исправил.. И уже как-то совсем неудобно становится дальше спрашивать..) Вроде ничего не пропустил. Код точно такой же..Но пишет ошибку, что "Невозможно получить свойство Match класса WorksheetFunction" ...