Условие: два диапазона на одном листе, Range(A1:A20) и Range(B1:B20) Задача: очистка ячейки во втором диапазоне (B1:B20) при изменении значения в соответствующей ячейке (в той же строке) первого диапазона (A1:A20). Помогите пожалуйста. В поиске ответа не нашёл.
Условие: два диапазона на одном листе, Range(A1:A20) и Range(B1:B20) Задача: очистка ячейки во втором диапазоне (B1:B20) при изменении значения в соответствующей ячейке (в той же строке) первого диапазона (A1:A20). Помогите пожалуйста. В поиске ответа не нашёл.votangi59
Сообщение отредактировал votangi59 - Четверг, 06.03.2025, 19:18
Добрый вечер. Вставьте в модуль этого листа (именно в модуль листа, а не в общий модуль) такой код. [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Range("A1:A20"), Target) Is Nothing Then Target.Offset(, 1).ClearContents End If End Sub
[/vba]
Добрый вечер. Вставьте в модуль этого листа (именно в модуль листа, а не в общий модуль) такой код. [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Range("A1:A20"), Target) Is Nothing Then Target.Offset(, 1).ClearContents End If End Sub
Приветствую, i691198. Благодарю, ваш код работает, НО, извините, я, по незнанию и неопытности, не корректно описал задачу. Дело в том, что в диапазон A1:A20 данные не вводятся, а подтягиваются путём копирования из диапазона находящегося на другом листе. В диапазоне на другом листе и происходят изменения. Т.е в диапазоне A1:A20, при изменении данных не происходит нажатие кнопки ввода (Enter). К сожалению, по объективным причинам, не имею возможности приложить файл. Попробую по-другому изложить суть вопроса. На Лист1 имеется куча комбобоксов (в одном столбце), при выборе значения в списке любого комбобокса, меняется значение в привязанной к нему ячейке. Из этих ячеек, привязанных к комбобоксам, т.е. диапазона, по формуле, автоматом, данные копируются в столбец на другом листе (Лист2). Во втором столбце на Лист2 имеются вводимые в ручную данные, вот эти данные и следует обнулять, при изменении значения в первом столбце листа2, в который скопированы значения из Лист1, в котором комбобоксы. То есть по сути, требуется, что бы при изменении значения в любом комбобоксе на одном листе, очищалась соответствующая ячейка на другом листе. Надеюсь, теперь правильно сформулировал вопрос.
Приветствую, i691198. Благодарю, ваш код работает, НО, извините, я, по незнанию и неопытности, не корректно описал задачу. Дело в том, что в диапазон A1:A20 данные не вводятся, а подтягиваются путём копирования из диапазона находящегося на другом листе. В диапазоне на другом листе и происходят изменения. Т.е в диапазоне A1:A20, при изменении данных не происходит нажатие кнопки ввода (Enter). К сожалению, по объективным причинам, не имею возможности приложить файл. Попробую по-другому изложить суть вопроса. На Лист1 имеется куча комбобоксов (в одном столбце), при выборе значения в списке любого комбобокса, меняется значение в привязанной к нему ячейке. Из этих ячеек, привязанных к комбобоксам, т.е. диапазона, по формуле, автоматом, данные копируются в столбец на другом листе (Лист2). Во втором столбце на Лист2 имеются вводимые в ручную данные, вот эти данные и следует обнулять, при изменении значения в первом столбце листа2, в который скопированы значения из Лист1, в котором комбобоксы. То есть по сути, требуется, что бы при изменении значения в любом комбобоксе на одном листе, очищалась соответствующая ячейка на другом листе. Надеюсь, теперь правильно сформулировал вопрос.votangi59
Добрый вечер. Если нужно отследить изменение данных формулами, то это немного сложнее. Например так. 1. Создаем общий модуль и в нем объявляем глобальную переменную [vba]
Код
Public Carr()
[/vba] - это контрольный массив. 2. В модуль книги вставляем код [vba]
Код
Private Sub Workbook_Open() Carr = Sheets("Лист2").Range("A1:A20").Value End Sub
[/vba] - при открытии книги копируем в контрольный массив значения из первого столбца листа 2. 3. В модуль листа 2 вставляем код [vba]
Код
Private Sub Worksheet_Calculate() Dim Ar1, i%, Flag As Boolean Ar1 = Range("A1:A20") Flag = False For i = 1 To 20 If Ar1(i, 1) <> Carr(i, 1) Then Flag = True Cells(i, 2).ClearContents End If Next If Flag Then Carr = Range("A1:A20") End Sub
[/vba] - если на листе произошел пересчет каких то формул, то сравниваем значения первого столбца со значениями контрольного массива. Если в каких то строках есть несовпадения, то удаляем значения во втором столбце. При наличии изменений в первом столбце, опять копируем его в контрольный массив. И так далее.
Добрый вечер. Если нужно отследить изменение данных формулами, то это немного сложнее. Например так. 1. Создаем общий модуль и в нем объявляем глобальную переменную [vba]
Код
Public Carr()
[/vba] - это контрольный массив. 2. В модуль книги вставляем код [vba]
Код
Private Sub Workbook_Open() Carr = Sheets("Лист2").Range("A1:A20").Value End Sub
[/vba] - при открытии книги копируем в контрольный массив значения из первого столбца листа 2. 3. В модуль листа 2 вставляем код [vba]
Код
Private Sub Worksheet_Calculate() Dim Ar1, i%, Flag As Boolean Ar1 = Range("A1:A20") Flag = False For i = 1 To 20 If Ar1(i, 1) <> Carr(i, 1) Then Flag = True Cells(i, 2).ClearContents End If Next If Flag Then Carr = Range("A1:A20") End Sub
[/vba] - если на листе произошел пересчет каких то формул, то сравниваем значения первого столбца со значениями контрольного массива. Если в каких то строках есть несовпадения, то удаляем значения во втором столбце. При наличии изменений в первом столбце, опять копируем его в контрольный массив. И так далее.i691198
Сообщение отредактировал i691198 - Пятница, 07.03.2025, 20:11
Благодарю, i691198. Извините, неважный из меня повествователь. Изменю предыдущий текст: "...Из этих ячеек, привязанных к комбобоксам, т.е. диапазона, по формуле, автоматом, данные копируются в столбец на другом листе (Лист2)." Формул нету, копирование элементарное, в ячейку А1 листа 2 прописывается: " =Лист1!$А1 ", т.е. из ячейки привязанной к комбобоксу на листе 1, копируются данные в столбец "А" на листе2. На листе2 второй столбец, допустим " В " - в нём, в ручную, задаётся значение, это значение должно обнуляться (ячейка очищается) при изменении в столбце "А" этого же листа. Скрин схему сделал, может так понятнее будет что требуется.
Благодарю, i691198. Извините, неважный из меня повествователь. Изменю предыдущий текст: "...Из этих ячеек, привязанных к комбобоксам, т.е. диапазона, по формуле, автоматом, данные копируются в столбец на другом листе (Лист2)." Формул нету, копирование элементарное, в ячейку А1 листа 2 прописывается: " =Лист1!$А1 ", т.е. из ячейки привязанной к комбобоксу на листе 1, копируются данные в столбец "А" на листе2. На листе2 второй столбец, допустим " В " - в нём, в ручную, задаётся значение, это значение должно обнуляться (ячейка очищается) при изменении в столбце "А" этого же листа. Скрин схему сделал, может так понятнее будет что требуется.votangi59
Я вас наверное удивлю, но выражение =Лист1!$А1 это именно формула. Так что можете пробовать способ, который я предложил выше. Немного еще поясню. В моем примере сделана жесткая привязка к диапазону A1:A20, а значения удаляются в диапазоне B1:B20. Коды простые, при необходимости можете сами подправить адреса диапазонов. И еще один важный момент - после того как вставите эти коды сразу же сохраните, закройте и снова откройте этот файл, иначе будет работать неправильно.
Я вас наверное удивлю, но выражение =Лист1!$А1 это именно формула. Так что можете пробовать способ, который я предложил выше. Немного еще поясню. В моем примере сделана жесткая привязка к диапазону A1:A20, а значения удаляются в диапазоне B1:B20. Коды простые, при необходимости можете сами подправить адреса диапазонов. И еще один важный момент - после того как вставите эти коды сразу же сохраните, закройте и снова откройте этот файл, иначе будет работать неправильно.i691198
Приветствую, i691198. Спасибо, что уделяете мне внимание. Я совсем недавно в VBA. Если б я знал как это сделать: "1. Создаем общий модуль и в нем объявляем глобальную переменную". )) 1. Правильно ли будет так: VBAProject... - Modules - пкм - Insert - Module Открыть окно с созданным модулем, вставить единственную строку: [vba]
Код
Public Carr()
[/vba] 2. В модуле книги у меня уже есть код: [vba]
Код
Option Explicit --------------------------- Private Sub Workbook_Open() InitComboHandlers End Sub
[/vba] возможно ли в него добавить ваш код? Или необходимо создать ещё модуль? С остальным мне понятно, конечно диапазоны поменяю.
Приветствую, i691198. Спасибо, что уделяете мне внимание. Я совсем недавно в VBA. Если б я знал как это сделать: "1. Создаем общий модуль и в нем объявляем глобальную переменную". )) 1. Правильно ли будет так: VBAProject... - Modules - пкм - Insert - Module Открыть окно с созданным модулем, вставить единственную строку: [vba]
Код
Public Carr()
[/vba] 2. В модуле книги у меня уже есть код: [vba]
Код
Option Explicit --------------------------- Private Sub Workbook_Open() InitComboHandlers End Sub
[/vba] возможно ли в него добавить ваш код? Или необходимо создать ещё модуль? С остальным мне понятно, конечно диапазоны поменяю.votangi59
Сообщение отредактировал votangi59 - Суббота, 08.03.2025, 11:17
Это не получится, такой модуль может быть только один и он уже имеется для каждого листа. И процедура по событию Workbook_Open может быть только одна для каждого листа, так что просто добавьте в нее строку Carr = Sheets("Лист2").Range("A1:A20").Value.
Это не получится, такой модуль может быть только один и он уже имеется для каждого листа. И процедура по событию Workbook_Open может быть только одна для каждого листа, так что просто добавьте в нее строку Carr = Sheets("Лист2").Range("A1:A20").Value.i691198
Уважаемый i691198, что-то у меня не получается. По разному пробовал, вываливается ошибка - Subscript out of range. Привожу код после адаптации к моим условиям: [vba]
Код
Option Explicit ----------------------------- Private Sub Workbook_Open() InitComboHandlers Carr = Sheets("Бл_кол-ва").Range("F7:F38").Value ' запомнили что было, имя листа и диапазон End Sub
[/vba] [vba]
Код
' Лист "Бл_кол-ва", где требуется проверка на изменение данных и их удаление при изменении Private Sub Worksheet_Calculate() Dim Ar1, i%, Flag As Boolean ' что означает символ "%" ? Ar1 = Range("F7:F38") ' диапазон отслеживания изменений Flag = False For i = 1 To 31 ' пробовал ставить строки For i = 7 To 38 If Ar1(i, 1) <> Carr(i, 1) Then ' сравниваем, ОШИБКА: "Subscript out of range". Пробовал вместо "1" ставить столбец- "F" т.е. "6" Flag = True Cells(i, 10).ClearContents ' 10-й столбец, где обнуляем при изменениях End If Next If Flag Then Carr = Range("F7:F38") ' здесь не понятно, какое условие? Если Flag ? То запомнили что стало End Sub
[/vba] Подскажите, пожалуйста, в чём ошибка?
Уважаемый i691198, что-то у меня не получается. По разному пробовал, вываливается ошибка - Subscript out of range. Привожу код после адаптации к моим условиям: [vba]
Код
Option Explicit ----------------------------- Private Sub Workbook_Open() InitComboHandlers Carr = Sheets("Бл_кол-ва").Range("F7:F38").Value ' запомнили что было, имя листа и диапазон End Sub
[/vba] [vba]
Код
' Лист "Бл_кол-ва", где требуется проверка на изменение данных и их удаление при изменении Private Sub Worksheet_Calculate() Dim Ar1, i%, Flag As Boolean ' что означает символ "%" ? Ar1 = Range("F7:F38") ' диапазон отслеживания изменений Flag = False For i = 1 To 31 ' пробовал ставить строки For i = 7 To 38 If Ar1(i, 1) <> Carr(i, 1) Then ' сравниваем, ОШИБКА: "Subscript out of range". Пробовал вместо "1" ставить столбец- "F" т.е. "6" Flag = True Cells(i, 10).ClearContents ' 10-й столбец, где обнуляем при изменениях End If Next If Flag Then Carr = Range("F7:F38") ' здесь не понятно, какое условие? Если Flag ? То запомнили что стало End Sub
[/vba] Подскажите, пожалуйста, в чём ошибка?votangi59
Сообщение отредактировал votangi59 - Воскресенье, 09.03.2025, 05:00
Добрый день. Есть две ошибки - 1. В массивах по 32 элемента, значит и цикл должен быть For i = 1 To 32. 2. Переменная цикла i начинается с 1, а значения в 10 столбце нужно стирать начиная с 7 строки, соответствующая строка должна быть такая Cells(i+6, 10).ClearContents Если не забывать сохранять, закрывать и снова открывать файл, то все должно работать. Пояснения: - i% это сокращенный вариант объявления переменной i as Integer - переменная Flag логическая, если изменились значения в диапазоне F7:F38 то она меняет значение с False на True, значит нужно переписать контрольный массив на текущие значения. (у вас на листе могут быть и другие формулы и при их пересчете обновлять контрольный массив не требуется). Для наглядности можно условие в операторе If записать так If Flag = True Then . . . , хотя смысла в этом нет.
Добрый день. Есть две ошибки - 1. В массивах по 32 элемента, значит и цикл должен быть For i = 1 To 32. 2. Переменная цикла i начинается с 1, а значения в 10 столбце нужно стирать начиная с 7 строки, соответствующая строка должна быть такая Cells(i+6, 10).ClearContents Если не забывать сохранять, закрывать и снова открывать файл, то все должно работать. Пояснения: - i% это сокращенный вариант объявления переменной i as Integer - переменная Flag логическая, если изменились значения в диапазоне F7:F38 то она меняет значение с False на True, значит нужно переписать контрольный массив на текущие значения. (у вас на листе могут быть и другие формулы и при их пересчете обновлять контрольный массив не требуется). Для наглядности можно условие в операторе If записать так If Flag = True Then . . . , хотя смысла в этом нет.i691198
Сообщение отредактировал i691198 - Воскресенье, 09.03.2025, 10:53
Приветствую,i691198, а так же всех, кто посетил эту тему! i691198, всё прекрасно работает, получилось, и именно так, как требовалось. i691198, премного благодарен за неоценимую помощь! А то я уже начал выдумывать другие пути реализации задуманного. Огромное спасибо за науку! Удачи во всех делах!
Вопрос решён положительно. Тема закрыта.
Приветствую,i691198, а так же всех, кто посетил эту тему! i691198, всё прекрасно работает, получилось, и именно так, как требовалось. i691198, премного благодарен за неоценимую помощь! А то я уже начал выдумывать другие пути реализации задуманного. Огромное спасибо за науку! Удачи во всех делах!
Здравствуйте, форумчане. Пришлось вновь вернуться к этой теме. Может кто-нибудь подсказать, нельзя ли обойтись, в выше приведённом коде, без кода в модуле книги? [vba]
Код
Option Explicit ---------------------- Private Sub Workbook_Open() Carr = Sheets("Бл_кол-ва").Range("F7:F38").Value End Sub
[/vba] Нельзя ли объявить переменную "Carr" другим способом?
Здравствуйте, форумчане. Пришлось вновь вернуться к этой теме. Может кто-нибудь подсказать, нельзя ли обойтись, в выше приведённом коде, без кода в модуле книги? [vba]
Код
Option Explicit ---------------------- Private Sub Workbook_Open() Carr = Sheets("Бл_кол-ва").Range("F7:F38").Value End Sub
[/vba] Нельзя ли объявить переменную "Carr" другим способом?votangi59
Сообщение отредактировал votangi59 - Вторник, 18.03.2025, 09:55
Приветствую, i691198! Меня всё устраивает, ваш код прекрасно работает! Но есть одно "но". Файл работает в "чистом" Экселе. Дело в том, что я, для защиты экселевских файлов от несанкционированного доступа, использую некоторый софт. Возможно знакомы, или слышали о программе "LockXLS" - прога защищает файлы экселя с кучей возможностей. Так вот, после защиты файла, эксель тупо крашется при старте. Версии файлов, без кодов отслеживания изменений, функционируют нормально. Пробовал защищать в двух версиях "LockXLS" - результат один. Этим софтом защитил не один файл - опыт имею. Методом научного тыка, путём неоднократного изменения (блокирования) в оригинальном файле кодов, связанных с сравнением данных, выяснил, что именно запись в модуле книги вешает эксель при открытии файла. Ознакомившись с материалами по объявлению переменных, попробовал сам исправить ситуацию, не получилось. Маловато знаний. И спасибо вам за наводку на "учебник".
Приветствую, i691198! Меня всё устраивает, ваш код прекрасно работает! Но есть одно "но". Файл работает в "чистом" Экселе. Дело в том, что я, для защиты экселевских файлов от несанкционированного доступа, использую некоторый софт. Возможно знакомы, или слышали о программе "LockXLS" - прога защищает файлы экселя с кучей возможностей. Так вот, после защиты файла, эксель тупо крашется при старте. Версии файлов, без кодов отслеживания изменений, функционируют нормально. Пробовал защищать в двух версиях "LockXLS" - результат один. Этим софтом защитил не один файл - опыт имею. Методом научного тыка, путём неоднократного изменения (блокирования) в оригинальном файле кодов, связанных с сравнением данных, выяснил, что именно запись в модуле книги вешает эксель при открытии файла. Ознакомившись с материалами по объявлению переменных, попробовал сам исправить ситуацию, не получилось. Маловато знаний. И спасибо вам за наводку на "учебник".votangi59
Сообщение отредактировал votangi59 - Вторник, 18.03.2025, 16:26
Добавлю уточнение. Переходы с листа на лист осуществляются посредством кнопок ActiveX. Кнопки привязаны к макросам. Полагаю, к этим событиям, перехода, можно как-то и привязать сравнение, изменение диапазонов (что было, что стало) и как следствие очистка ячеек в третьем диапазоне при несовпадении строк в двух первых. Пытаюсь сам реализовать идею, но плохо знаком с необходимыми операциями.
Добавлю уточнение. Переходы с листа на лист осуществляются посредством кнопок ActiveX. Кнопки привязаны к макросам. Полагаю, к этим событиям, перехода, можно как-то и привязать сравнение, изменение диапазонов (что было, что стало) и как следствие очистка ячеек в третьем диапазоне при несовпадении строк в двух первых. Пытаюсь сам реализовать идею, но плохо знаком с необходимыми операциями.votangi59
Попробуйте привязать на событие Private Sub Worksheet_Activate() в том листе, где комбобоксы Если значения для листа "Бл_кол-ва" меняются еще из какого-нибудь листа, то привяжите и на него
А можно вообще без массива. Насколько я понял, у Вас каждой ячейке лист2 соответствует ячейка на лист1, которой соответствует свой комбобокс. Причем, ссылки между лист2 и лист1 прямые, типа =Лист1!$А1, без всякий сложных взаимосвязей. Тогда можно просто к каждому комбобоксу прописать код, стирающий соответствующую ячейку на лист2 (можно один код на все комбы, чтобы он сам определял, что нажато, но это сложнее для понимания). Или можно привязаться к изменениям на лист1. Что-то типа самого первого макроса в этой теме, но диапазоны на разных листах
А вообще - давно бы сделали пример файла и положили сюда. Все было бы гораздо проще и быстрее. В примере нужно просто несколько комбобоксов с РЕАЛЬНЫМ расположением на лист1 и реальные формулы на лист2. Все данные можно заменить на огурцы-помидоры-кабачки
Попробуйте привязать на событие Private Sub Worksheet_Activate() в том листе, где комбобоксы Если значения для листа "Бл_кол-ва" меняются еще из какого-нибудь листа, то привяжите и на него
А можно вообще без массива. Насколько я понял, у Вас каждой ячейке лист2 соответствует ячейка на лист1, которой соответствует свой комбобокс. Причем, ссылки между лист2 и лист1 прямые, типа =Лист1!$А1, без всякий сложных взаимосвязей. Тогда можно просто к каждому комбобоксу прописать код, стирающий соответствующую ячейку на лист2 (можно один код на все комбы, чтобы он сам определял, что нажато, но это сложнее для понимания). Или можно привязаться к изменениям на лист1. Что-то типа самого первого макроса в этой теме, но диапазоны на разных листах
А вообще - давно бы сделали пример файла и положили сюда. Все было бы гораздо проще и быстрее. В примере нужно просто несколько комбобоксов с РЕАЛЬНЫМ расположением на лист1 и реальные формулы на лист2. Все данные можно заменить на огурцы-помидоры-кабачки_Boroda_
Приветствую, _Boroda_! Да, именноно так, вы всё правильно поняли:
Цитата
... у Вас каждой ячейке лист2 соответствует ячейка на лист1, которой соответствует свой комбобокс. Причем, ссылки между лист2 и лист1 прямые, типа =Лист1!$А1, без всякий сложных взаимосвязей ...
На Лист 1 ещё присутствует сортировка диапазона после выбора в комбобоксах, по двум разным критериям (либо так, либо эдак), это тоже влияет на изменения во втором листе. Пожалуй вы правы, стоит, всё-таки попробовать выложить файл. Оставить в базе данных 5, 6 строк и вписаться в размер файла для форума. Конечно, можно в архив упаковать, но данные конфиденциальные - прислушаюсь к вашему совету:
Цитата
... заменить на огурцы-помидоры-кабачки ...
Тем более, что у меня сложный, "мудрёный" алгоритм расчёта и код очень далёк от совершенства )) - может и в этом деле форумчане не откажут в помощи, помогут оптимизировать код. На текущий момент пробую другим способом решить проблему, кое-что получилось - самое главное софт защиты не ругается и не вешает Эксель! Остальное понемногу докручу. Время покажет. Благодарю за внимание, отзыв и совет. Бум пробовать.
Приветствую, _Boroda_! Да, именноно так, вы всё правильно поняли:
Цитата
... у Вас каждой ячейке лист2 соответствует ячейка на лист1, которой соответствует свой комбобокс. Причем, ссылки между лист2 и лист1 прямые, типа =Лист1!$А1, без всякий сложных взаимосвязей ...
На Лист 1 ещё присутствует сортировка диапазона после выбора в комбобоксах, по двум разным критериям (либо так, либо эдак), это тоже влияет на изменения во втором листе. Пожалуй вы правы, стоит, всё-таки попробовать выложить файл. Оставить в базе данных 5, 6 строк и вписаться в размер файла для форума. Конечно, можно в архив упаковать, но данные конфиденциальные - прислушаюсь к вашему совету:
Цитата
... заменить на огурцы-помидоры-кабачки ...
Тем более, что у меня сложный, "мудрёный" алгоритм расчёта и код очень далёк от совершенства )) - может и в этом деле форумчане не откажут в помощи, помогут оптимизировать код. На текущий момент пробую другим способом решить проблему, кое-что получилось - самое главное софт защиты не ругается и не вешает Эксель! Остальное понемногу докручу. Время покажет. Благодарю за внимание, отзыв и совет. Бум пробовать.votangi59
Совсем мозги заплёл. Подскажите, пожалуйста, как надо сделать, чтобы объявить глобальную переменную, которая является диапазоном (или двумерным массивом? как правильно) Что делаю: 1. В Modules создаю Module1: (объявляю переменную типа String) [vba]
Код
Option Explicit Public stMem As String
[/vba] 2. В "Эта книга": (при открытии книги, присваиваю значение ячейки ранее объявленной переменной) [vba]
Код
Option Explicit ------------------------------------ Private Sub Workbook_Open() stMem = Sheets("Бл_кол-ва").Range("F7").Value InitComboHandlers ' Инициализация комбо боксов End Sub
[/vba] Работает, но нужно не одну ячейку присвоить, а диапазон "F7:F38". Пробовал так: [vba]
Код
stMem = Sheets("Бл_кол-ва").Range("F7:F38").Value
[/vba] - не работает. В чем ошибка?
Совсем мозги заплёл. Подскажите, пожалуйста, как надо сделать, чтобы объявить глобальную переменную, которая является диапазоном (или двумерным массивом? как правильно) Что делаю: 1. В Modules создаю Module1: (объявляю переменную типа String) [vba]
Код
Option Explicit Public stMem As String
[/vba] 2. В "Эта книга": (при открытии книги, присваиваю значение ячейки ранее объявленной переменной) [vba]
Код
Option Explicit ------------------------------------ Private Sub Workbook_Open() stMem = Sheets("Бл_кол-ва").Range("F7").Value InitComboHandlers ' Инициализация комбо боксов End Sub
[/vba] Работает, но нужно не одну ячейку присвоить, а диапазон "F7:F38". Пробовал так: [vba]