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

Страницы: 1
Получить индекс элемента коллекции по ключу этого элемента
 

Доброго здоровья всем!

Эта тема очень давно уже была на форуме ссылка. Но может быть, что то изменилось за это время. Причем недавно здесь была тема «Как узнать key текущего item при просмотре коллекции?». Там было решение от testuser. Меня интересует, как получить индекс элемента коллекции по его ключу. Мне кажется что должно быть какое то простое решение. Причем интересно то, что в коллекции листов это возможно. Насколько я понимаю имя листа (Name) это по сути ключ коллекции листа.

Код
Debug.Print Worksheets("Лист1").Index

Немного поясню цель. Необходимо заменить элемент коллекции без изменения структуры коллекции (порядка в коллекции). В словаре таких проблем нет, там можно просто заменить элемент словаря по его ключу. Но иногда удобнее использовать коллекцию. В коллекции заменить элемент коллекции мы не можем (я не знаю такого способа), можно только удалить элемент коллекции, а потом добавить измененный элемент. Но чтобы не нарушать порядок надо добавить измененное значение на тоже место и у коллекции в методе ADD есть аргументы After и Before, но для этого надо знать индекс элемента коллекции, и раз есть эти аргументы в методе ADD, то по логике должен быть способ легко получить индекс элемента коллекции по его ключу. Конечно можно решить эту задачу по другому, но все получается некрасиво через костыли.

Изменено: Евгений Смирнов - 22.12.2023 12:30:24
Получить ссылку на объект по PID, который вернула функция Shell
 

Доброго здоровья всем!

Подскажите пожалуйста как получить ссылку на объект по PID (идентификатор процесса), который вернула функция Shell.  Например в переменную vPID возвращается PID запущенного процесса, но получить ссылку на новый объект Excel у меня никак не получается.

Код
vPID = Shell("excel.exe /x")
Не все гиперссылки на сайты работают из Ворда и Экселя.
 

Добрый вечер всем

Не могу понять почему некоторые гиперссылки на сайты не работают из экселя и ворда. Если ссылку вставляешь в строку поиска браузера открывается. Все локальные ссылки работают, проблема только с ссылками на сайты. Есть маленькая прога типа блокнота с возможностью использовать ссылки, там тоже работают. А вот из офисных документов не все. В файле 4 ссылки 2 первые срабатывают открывается сайт, а 3 и 4 появляется сообщение «Не удается открыть: адрес ссылки. Не удается загрузить нужные данные». Ссылка на этот сайт тоже не срабатывает. Стоит винда 7 Офис 2002 и 2010. Офис установлен не полный пакет. Не устанавливал Power poin Outlook Access.  Браузер Яндекс. Никогда не пользовался Internet Explorer. С чем это связано: есть какие то настройки в экселе или не установлен какой то компонент. Объясните пожалуйста. Может кто-то с этим сталкивался, а то не очень удобно из экселя копировать в браузер.

Почему не всегда корректно работает UsedRange., Как с этим бороться или вообще не стоит применять.
 

Доброго здоровья всем!

Я давно замечал, что UsedRange косячит и практически его не применял. Недавно в одной теме была ссылка на статью Дмитрия Щербакова «КАК ОПРЕДЕЛИТЬ ПОСЛЕДНЮЮ ЯЧЕЙКУ НА ЛИСТЕ ЧЕРЕЗ VBA?». Вроде внимательно прочитал. Сначала попробовал на чистой книге все нормально. Потом попался файл, в нем не работает корректно. И переопределение используемого диапазона строкой не помогает.

Код
With ActiveSheet.UsedRange: End With

Все что знаю попробовал. Удалил все имена, посмотрел коллекцию Shapes, очистил все пустые ячейки через команду очистить все, посмотрел ID ячеек. Ничего не нашел, помогает только удаление этих столбцов, но это для VBA не лучший вариант. Выходит, что метод UsedRange для определения последней ячейки лучше не применять. В примере на первом листе.

И еще один вопрос. Есть ли простой оператор определить адреса или хотя бы количество текущих областей (CurrentRegion) на листе в используемом диапазоне (UsedRange). Используя метод Find можно, но это несколько строк, а мне как и некоторым здесь писать лень. В примере на листе 2 две области.

Формула для вывода дубликатов и не дубликатов столбца
 

Доброго здоровья всем!

Просьба написать две формулы: для вывода дубликатов т.е значений которые встречаются 2 или более раз, и формула для вывода значений, которые встречаются 1 раз, желательно без использования новых функции, чаще пользуюсь старым Excel 2002.

И еще одна просьба вот прошу написать формулы, т.к. это у меня получается не очень. В принципе хотел бы сам лучше научиться писать, но как – то совсем плохо это получается. Макрос для меня проще. Обычно алгоритм и даже не один в голове появляется, а по формулам ничего. Ну первую функцию еще выберу, а дальше обычно ступор. Может посоветуете как научится, что где прочитать. Может у кого-то есть книга в электронном виде, прочитав которую будет лучше получаться. Наверняка те, кто хорошо пишет формулы, читали такую книгу. По макросам у меня есть пара книг ну и несколько справок, в которые иногда заглядываю, плюс есть несколько сайтов, где можно что - то посмотреть, а по формулам ничего нет.

Расширенный фильтр. Проблемы в разных версиях Эксель.
 

Здравствуйте. Есть файл для простенького учета. Делал давно в Экселе 2002. Тогда в Vba знаний было 0. Надо было ускорить процесс ввода значений в некоторые ячейки, строк ~1300. Тогда почему-то решил использовать расширенный фильтр. Потратил много времени, но в конечном итоге получилось. На листе есть текстовое поле, его значение записывается в ячейку B2. при наборе символов отрабатывает фильтр. Все было хорошо в Эксель 2002, фильтруется мгновенно, а вот с новыми версиями получается тормоз и даже совсем зависает, особенно при очистке символов. Сейчас решил разобраться, в чем дело. Удалил  лишние листы, лишние формулы, условное форматирование, имена. Проверил коллекцию Shapes. Ничего плохого не нашел. Сейчас у меня две винды XP и 7 разницы практически нет. Office 2002 и 2010. Железо старое лет 20 уже. Вот не могу понять, почему в 2002  все работает в 2010 виснет. Ну минут 5-7 ждал. Единственное, что понял в новом Эксель делает какие-то расчеты и виснет. При переводе на ручной режим пересчета формул свойство Calculation и отключении пересчета на листе EnableCalculation работает, но визуально заметная задержка в фильтрации. Для сравнения скачал файл с этого сайта расширенный фильтр в приемах, строк там немного меньше и формул нет. Он работает нормально.

Объясните пожалуйста в чем проблема. Программисты накосяли начиная с 2003 экселя, или у меня ошибки в коде и как с этим бороться.

В файле для быстрого перемещения текстовое поле–лист F4 и Tab, фильтрация по 2 столбцу.

Условное форматирование некорректно работает, Формула для условного форматирования
 

Доброго здоровья всем!

На листе ведем базу данных. При вводе во 2 столбец значения, макросом заполняются 1 столбец «Дата начала процесса», 4 столбец формула =ТДАТА() и для этого столбца вводится формула для УФ =ТДАТА()=D2. Когда процесс заканчивается я вставляю в 4 и 5 столбец вместо формул значения.  УФ ввожу для того, чтобы видеть какие процессы еще идут. Но УФ на первом листе в файле примера работает некорректно, заливка пропадает например при прокрутке листа, при переключении между листами и т.д. На втором листе в столбец C ввел туже формулу для УФ, а в формулу УФ сделал ссылку на этот столбец, тогда все нормально, но нужен дополнительный столбец. Объясните пожалуйста почему это происходит и как это исправить без дополнительного столбца. Может для УФ можно написать другую формулу, желательно без использования новых функции, чаще пользуюсь старым Excel 2002.

Суммирование диапазона по условию, Функция СУММЕСЛИ
 

Доброго здоровья всем!

Давно не заходил на сайт. Если кто помнит с формулами у меня не очень хорошо получается. Задача вроде простая, но я уже несколько часов потратил, а красивая формула не получается.

На листе ведем базу данных. 1 столбец «Дата», 2 столбец «Сумма». Надо подсчитать 3 суммы: за последний год, последний месяц, последний день. Логично использовать функцию СУММЕСЛИ. Написал, но формулы для расчета за последний год и последний месяц надо править при изменении года или месяца. Если правильно разобрался с функцией СУММЕСЛИ в качестве первого аргумента запихнуть формулу не получиться, только ссылка на диапазон. Попробовал использовать СУММПРОИЗВ в принципе получилось, но она получилась тормозная. У меня железо старое и при работе макроса заметно торможение. Хотелось бы без использования новых функций, чаще пользуюсь старым Excel 2002. Вообщем надо 2 красивые формулы суммы за последний год, последний месяц. Помогите пожалуйста. Заранее благодарю.

Что за массив возвращает функция CtrConv
 
Доброго здоровья!
Функция имеет следующий синтаксис: StrConv(String,Conversion,[LocaleID])
Аргумент Conversion может принимать 8 констант, задающих тип преобразования строки. 3 из них нам наверно не нужны (vbWide, vbNarrow, vbHiragana). Еще 3(vbUpperCase, vbLowerCase, vbProperCase) мы редко используем т.к. есть другие функции (UCase, LCase). А вот что возвращает функция с константами vbUnicode vbFromUnicode мне хочется понять. Что возвращает функция с константой vbFromUnicode вроде разобрался. А вот что получается с константой vbUnicode вообще непонятно.
Код
Sub DDDfgg()
Dim str1$, XX() As Byte
    str1 = "Яна" & ChrW(700)
XX = StrConv(str1, vbUnicode)
    For i = LBound(XX) To UBound(XX)
        Debug.Print XX(i)
    Next
End Sub
С помощью этой процедуры мы получаем массив. На каждый символ строки str1 получаем 4 элемента массива XX. Предполагаю, что в этих 4 элементах зашифрован код символа Unicode, но как получить этот код символа из этих 4 элементов не пойму. Который день не могу ничего найти в интернете. В справке по функциям VBA тоже нет ответа. Вопрос наверно простой, но я никак не могу разобраться, что в этих 4 элементах массива зашифровано. Помогите пожалуйста разобраться. (Очень буду признателен, если подробно разъяснят, что получается при использовании констант vbUnicode vbFromUnicode)
Работа с текстовыми файлами в режиме прямого доступа, Функции ввода-вывода низкого уровня
 
Доброго здоровья!

Познакомился с этой темой в принципе давно, читая книгу Джона Уокенбаха, но поверхностно. За последнее время здесь было несколько тем по работе с текстовыми файлами. Одна из них «Сохранение файла с нужным разделителем» набрала ~ 30000 просмотров т.е пользователей интересует вопрос работы с текстовыми файлами. Я знаю, что с ними можно работать и на языке VBScript. С нового года стал изучать VBScript, но пришлось отвлечься и попробовать до конца разобраться с работой в режиме прямого доступа. Предполагаю, что принципы работы одинаковые (только операторы, функции разные) поэтому потом будет легче разбираться с VBScript. К великому моему сожалению найти  статьи, где все разложено по полочкам, мне не удалось. В книге Джона тоже маловато написано. Здесь ничего не нашел. На сайте Дмитрия Щербакова в разделе хитрости нашел и бегло прочитал несколько статей (некоторые  тонкости хорошо обьяснены), но по вопросу этой темы статья скудная. Нашел пару подходящих статей, и то в них есть некоторые противоречия. Строго следуя завещаниям великого Ленина,  исходя из лозунга «Учиться, учиться и ещё раз учиться» стараюсь разобраться, но в связи с тем, что не являюсь «профи» остались некоторые вопросы. Очень прошу помочь начинающему программисту разобраться, и ответить на вопросы изложенные ниже.

Есть 5 режимов работы Input, Output, Append, Binary, Random. Первые три объединяются в группу Sequential. В книге Джона написано, что для VBA интерес представляет только режимы последовательного доступа. С чем я не совсем согласен. Думаю, что бинарный режим тоже нужен, в определенных случаях. Больше всего проблем в изучении вызвал произвольный режим.

1 Во первых это связано с тем, что не знаю, что такое записи (определение) Или понятие записи в разных ситуациях разные понятия? ( Часто встречаю это понятие в статьях)
2 Ключевое слово Len в команде Open используется только в режиме Random?
3 Если мы не знаем длину записи, то не сможем открыть в режиме Random,  файл  записанный в режиме Random?
4 Вроде разобрался как заменить определенные символы в файле, увеличить размер файла не переписывая в другой, а вот как обрезать например конец файла (несколько символов) без перезаписи файла (т.е. создания другого файла меньшего размера) так и не понял. Или это невозможно в этих режимах?
5 Почему так редко применяют эти режимы для работы с текстовыми файлами? (Есть какие то ограничения например: нельзя работать с сетевыми дисками, маленькая скорость считывания или что-нибудь еще)
6 Все ли верно написано в тексте ниже:

Функции ввода-вывода низкого уровня (прямого доступа) осуществляют обмен с файлами или периферийными устройствами путем прямого обращения к соответствующим функциям операционной системы (системным вызовам). Отличительные особенности средств прямого доступа к файлам следующие.
1. Они не предоставляют возможности буферизации информации при пересылке.
2 Они не обеспечивают преобразования данных из внутреннего машинного представления в текстовый формат.
3 Они дают возможность перемещать указатель текущей позиции в потоке на нужный байт.
4 При низкоуровневом открытии файла с ним связывается файловый дескриптор. Дескриптор является целым значением, характеризующим размещение информации об открытом файле во внутренних таблицах операционной системы. Дескриптор используется при последующих операциях с файлом.
Функция перекодировки текстовых файлов из « родной кодировки» (1251) в UTF-8
 
Доброго здоровья!
Вопрос перекодировки файлов у меня возник года 3-4 назад. Решил сделать файл Эксель для хранения контактов.(Для резерва на всякий случай) Для быстрой загрузки их в телефон нужен файл Vcard, написал макросы экспорта импорта Excel-Vcard. Но в итоге оказалось, что телефон хочет кодировку UTF-8. (Наотрез отказался от 1251). Стал искать в интернете функции перекодировки, но сначала мои поиски не увенчались успехом. В то время на компе у меня был установлен только Excel 2002. Он к великому моему сожалению, так и не согласился перекодировать файлы в UTF-8 всяко уговаривал, даже 0,5л предлагал. Решил попробовать через Word. Читая книгу Джона Уокенбаха каким-то чудесным образом удалось написать эти волшебные несколько строк, но телефон начал ругаться и на этот файл. Оказалось ему надо UTF-8 без BOM, а Word зараза делал с BOM. Пришлось опять читать книгу, а потом в режиме прямого доступа к текстовым файлам отрезать эту BOM. В итоге получилось кривовато, тогда я вновь приступил к поискам, и в конечном итоге они увенчались успехом. Один из найденных макросов использует только VBA, маленький, хорошо работает, делает UTF-8 без BOM и быстрее чем Word, но я зачем-то решил почитать, как кодируются символы в UTF-8, и это стало моей роковой ошибкой, вопросов почему-то стало больше, а ответов меньше. С тех пор мучает меня вопрос.(Даже сплю хуже)
Мне кажется, что в конструкции Select Case cтрока >4095 не верна. Помогите пожалуйста разобраться правильно неправильно. Если не правильно как записать правильно?
Предполагаю, что используя объект ADODB.Stream будет лучше, но по программе обучения не дошел ещё до этого объекта. В файле функция и процедура для перекодировки текстового файла.
Код
Private Function EncodeUTF8noBOM(ByVal txt As String) As String 'Перекодировка строки в UTF-8 без BOM
Dim Sim As String, txt1 As String
    For i = 1 To Len(txt)
    Sim = Mid(txt, i, 1)
Select Case AscW(Sim)
Case Is > 4095: txt1 = Chr(&HE0 + AscW(Sim) \ &H1000) & Chr(AscW(Sim) \ &H40) & Chr(&H80 + AscW(Sim) Mod &H40)
Case Is > 127: txt1 = Chr(&HC0 + AscW(Sim) \ &H40) & Chr(&H80 + AscW(Sim) Mod &H40)
Case Else: txt1 = Sim
End Select
    EncodeUTF8noBOM = EncodeUTF8noBOM & txt1
    Next
End Function
UDF Функция перевода чисел между разными системами исчисления
 
Доброго здоровья!
Нужна UDF функция перевода чисел между основными (2 8 10 16) системами исчисления. Функция с 3 аргументами (Исходное число, разрядность исходного числа, разрядность результата). Наверняка такая давно написана, но здесь я нашел только 2 функции перевод из любой разрядности в десятичную и наоборот. Может плохо искал. Ведь непорядок, мне иногда проще и быстрее воспользоваться калькулятором на телефоне (там есть такая возможность) чем Excel.
Заранее благодарен за помощь
Метод Evaluate Преобразовать строку в фигурных скобках в массив строк
 
Доброго здоровья всем!
Помогите пожалуйста разобраться. Не получается в коде VBA  записать строку в фигурных скобках типа {Вася, федя} и через Evaluete получить массив.  Причем с числами типа {4, 5} все нормально и если взять строку с ячейки A1 тоже получается, а без использования листа в коде VBA не получается, что-то пишу наверно неправильно. Пример в файле.
Решение математических буквенно-числовых ребусов в Excel, криптоарифметическая задача
 
Доброго здоровья всем!
Помогите пожалуйста решить детскую задачку по математике с помощью Эксель.
Когда-то  в школе в виде дополнительного задания на дом дали следующую задачу:
УДАР+УДАР =ДРАКА.
Надо вместо букв подставить цифры, чтобы выражение было верно. (Одна буква=одна цифра). Да и на олимпиадах такие задачи были в средних классах. Первый раз я её долго делал (типа перебором). Позже понял, что такие задачи решаются за несколько минут путем логических рассуждений. Наверно, чтобы  решить её при помощи Эксель надо гораздо больше времени (Мне так кажется). Как это сделать при помощи формул вообще не представляю (в формулах не силен). Макросом можно попробовать, но никогда такие задачи не решал. Обычно берем данные с листа, что-то делаем с ними и выгружаем на лист. Очень хотелось бы посмотреть, как это сделать в Эксель.
Заранее благодарен за предложенные варианты (Формула или макрос без использования всяких надстроек)

P.S. Для разнообразия и проверки универсальности решения КИС+КСИ=ИСК
Изменено: Евгений Смирнов - 15.01.2022 15:30:03 (Исправил ошибку в последней строке)
Регулярные выражения. Применение некоторых символов в паттернах
 
Здравствуйте
Вчера в теме  Регулярные выражения. Почему в коллекции Matches нет одного слова. разобрались с моим  вопросом, но когда учишься возникают другие. RAN вчера написал паттерн который выводит 3 слова в коллекцию Matches из строки
"-word1 -word2 -word3 -word4 -word5"
Код
"(?:\s)\-([a-z0-9]+)(?=\s)"
Вечером разбирался с ним, но к сожалению полностью не смог понять. Метасимволы, квантификаторы, позитивный, негативный просмотр вперед и назад с этими терминами вроде понятно. Но кое что не понятно для меня.
1. Применение круглых скобок. В паттерне RAN их 3. Последние я понимаю нужны. Читал, что ещё они применяются  для группировки символов, чтобы применить к группе квантификатор. А в данном случае для чего не понимаю. Те хочу узнать в каких ещё случаях применяются круглые скобки
2. В первой круглой скобке стоит «?:» Только на одном сайте нашел: «Чтобы найденные выражения внутри круглых скобок не попали в результат, следует добавить символы ?: после открывающей скобки». Попробовал убрал 1 и 2 скобки  вместе с ?: результат одинаковый. Вообщем не понял, для чего применяются знак вопроса и двоеточие.
3. Я заранее готовился к изучению регулярок и сохранял в файле некоторые макросы с регулярками с сайта. Вчера просмотрел их, стал встречать знакомые буквы в паттернах(значит есть позитивные изменения), но одна незнакомая. Кажется паттерн Кузьмича выдергивание Эл почты
Код
"[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}"
Не могу до конца прочитать первое выражение в квадратных скобках. Латиница верхний регистр, цифры, точка, знак подчеркивания, а дальше ступор, не знаю что обозначает знак проценты и нигде на сайтах не нашел, видимо не умею пользоваться инетом.
Помогите пожалуйста разобраться
Файл не стал прикреплять наверно он не нужен или можно взять с вчерашней темы
Изменено: Евгений Смирнов - 21.12.2021 06:34:36
Регулярные выражения. Почему в коллекции Matches нет одного слова.
 

Здравствуйте

На днях стал знакомиться с регулярками. На одном сайте  при чтении не смог все понять. Есть код

Код
Sub fdsg()
Dim re, Item, s As String
s = "-word1 -word2 -word3 -word4 -word5"
Set re = CreateObject("VBScript.RegExp")
re.Pattern = "\s\-([a-z0-9]+)\s"
re.Global = True
    For Each Item In re.Execute(s)
        Debug.Print Item.Value
    Next
End Sub

Я так читаю Pattern. Пробел, тире, (латиница в нижнем регистре и цифры) одно или более вхождений, пробел. Но в коллекции Matches получается только два значения

-word2  -word4, а я думаю, что должно быть 3 те  -word3 тоже должно быть. Объясните пожалуйста балбесу, чего я не понимаю.

Изменено: Евгений Смирнов - 20.12.2021 10:42:04
Заполнение словаря только ключами. Какой вариант лучше?
 
Здравствуйте! Уважаемые знатоки.

Объясните  пожалуйста разницу.
Есть 3 варианта  заполнение словаря только ключами
1. Tp1 = Dict(Key)
2. Dict(Key) = 0&
3  Dict.Add  key, ""

В 1 варианте  значения словаря будут Empty. Во 2 варианте значения текст "0". С точки зрения объема занимаемой памяти и скорости какой вариант лучше ? Или ссылку где почитать.
Хотя может я что-то неверно понимаю. Я только учусь работать со словарями
Как без использования рабочего листа записать в переменную массив, возвращаемый формулой
 
Здравствуйте уважаемые знатоки.
Помогите пожалуйста разобраться в вопросе. У меня не получается получить массив с помощью метода Evaluate.
Есть диапазон строк и простая формула =СЧЁТЕСЛИ($A$2:$A$11;$A$2:$A$11).
Она возвращает массив значений В справке написано: ”Если выбрана часть формулы в строке формул
подсчитать выбранную часть клавиша F9 Для замены выбранной части формулы рассчитанным значением
нажмите клавишу ENTER” В результате этих действий мы увидим {3:3:3:2:2:5:5:5:5:5}
Те формула возвращает массив. Также если эту формулу использовать в качестве аргумента массив в функции
Индекс можно получить любой элемент массива, что также доказывает данная формула возвращает массив
В файле примере (макрос1) получения массива значений этой формулы при помощи листа
т.е записываем её в диапазон листа считываем в переменную Variant Tp и получаем массив {3:3:3:2:2:5:5:5:5:5}
а методом Evaluate (Макрос3 в примере) получаем одно значение, по видимому 1 элемент массива, а не массив.
Как без использования рабочего листа(что реализовано в макрос1) записать в переменную массив возвращаемый данной формулой.
Можно ли получить результат вычисления формулы в VBA без использования Имен и ячейки листа
 
Здравствуйте уважаемые знатоки.
Можно ли получить результат вычисления формулы записанной в ячейки С1 т.е. (5) в VBA без использования Имен и ячейки листа
Изменено: Евгений Смирнов - 02.04.2021 10:54:57
Сколько в Excel функций рабочего листа, которые возвращают ссылки на ячейку или диапазон
 

ДВССЫЛ,СМЕЩ ещё есть                          

Есть ли функция рабочего листа подсчитывающая количество определенных символов в строке
 
Уважаемые знатоки.
Как подсчитать количество определенных символов в строке
Вопрос может показаться не серьезным но у меня вызвал затруднения.
Вроде просмотрел все функции но не могу понять как это сделать просто, чтобы не получилась формула на строку экрана
В VBA сам могу несколько вариантов написать. Да использую Excel 2002г
Изменено: Евгений Смирнов - 19.03.2021 13:21:32
Можно ли формулой без использования функции если получить такой результат
 
Можно ли формулой без использования функции если получить такой результат

ДанныеРезультат
2538125381
2536425364
2552525525
0ЛОЖЬ
0ЛОЖЬ
2590225902
2625226252
Если 0   Возвращается логическое значение
Если >0 Возвращается число
Изменено: Евгений Смирнов - 08.03.2021 10:30:05
Использование операторов типа vTp1=[AAA].(с квадратными скобками)
 

Здравствуйте знатоки Excel

Пару лет назад я решил написать макросы для работы с файлами Vcard, чтобы хранить свои контакты в Excel. Импорт экспорт Excel - Vcard написал без проблем, но не стал делать кнопки на листе решил сделать интеллектуальную командную панель.

Да забыл сказать, что предпочитаю старый Excel. Лента мне не нравиться.

Но с панелями инструментов есть один недочет в Excel. Нельзя вкладывать панели в рабочие книги (это не совсем хорошо) их надо создавать программно при открытии файла и удалять при закрытии. Вот здесь мне понадобились глобальные переменные, а вот работать с ними без матов невозможно. Тогда я не мог понять, что происходит позже разобрался. Оказывается при возникновении ошибки происходит повторная перезагрузка модуля и инициализация переменных. Те все значения теряются. Когда конечно все отлажено и не возникают ошибки или они обрабатываются тогда нормально, но когда только пишешь макрос хочется поругаться. Позже я все таки переделал это и записал эти значения в имена.

Но с именами не все красиво Например записываешь массив в имя AAA.

Если надо вернуть имя через оператор vTp1 = ThisWorkbook.Names("AAA").Value

То получаешь строку в начале = потом кавычки и в конце кавычки те надо сначала обрезать 2 символа впереди и один символ сзади чтобы получить имя. Не совсем красиво.

Недавно узнал, что можно вытащить имя таким оператором vTp1=[AAA]. Все хорошо, но почему то он работает только когда активна книга где он написан. Открываешь новую книгу и он не работает. Я не понимаю почему так.

И вообщем как вы думаете где лучше хранить глобальные значения (такие которые были бы доступны для всех процедур и никогда не теряли свои значения)

  • В глобальных переменных

  • В именах

  • На скрытых листах

Как поймать событие Change текстового поля на командной панели
 
Здравствуйте !
Помогите решить задачу.

В прикрепленном файле есть процедура создания текстового поля на командной панели.  Как поймать события нажатия клавиш Ansi или событие Change этого поля, чтобы связать его с макросом.
Например, чтобы текст из этого текстового поля записывался в ячейку A1 при каждом нажатии клавиш Ansi.
Связывать с текстовым полем на листе или на форме я умею, там есть событие Change.

В новом экселе поле будет в меню надстройки
Адресация ячеек в Range
 
Записываем в диапазон Rg1 ячейки A2,A6,A8 оператор Set Rg1 = Range(”A2,A6,A8”)
Количество ячеек в диапазоне оператор Rg1.Cells.Count возвращает 3
А вот адрес 3 ячейки Rg1 оператор Rg1.Cells(Rg1.Cells.Count).Address возвращает A4
Почему возвращается А4. ведь последняя ячейка Rg1 А8 или неправильно написан 3 оператор
Как из Rg1 возвратить A8
Страницы: 1
Наверх