Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 След.
Как сделать скролл на Listbox?, быстрый переход на другой лист через список листов
 
Jungl,это бомба=)

Спасибо!
Как сделать скролл на Listbox?, быстрый переход на другой лист через список листов
 
Цитата
Jungl написал:
К сожалению мне не удалось после вызова формы установить фокус на браузере, чтобы можно было сразу скроллить, а не кликать мышкой на селекты. Может кто подскажет.
Как вариант, искать координаты центра монитора/рабочего окна Excel, (диалоговое окно ведь появляется в центре) и вызывать событие "Клик мышкой в эту точку". Но реализация такого пока вне сферы моих знаний в VBA.
Как сделать скролл на Listbox?, быстрый переход на другой лист через список листов
 
Цитата
JeyCi написал:
- фильтровать в листбокс по вводимому значению в текстбокс... и скроллить не надо будет
интересная мысль. Т.е. реализовать что-то типа быстрого поиска. Это, возможно, будет еще удобнее в итоге, чем большая простыня с поиском и выбором нужного листа.
Как сделать скролл на Listbox?, быстрый переход на другой лист через список листов
 
Цитата
Dima S написал:
Открою вам секрет - по сочетанию клавиш можно запускать макрос, который переходит на лист из содержанием)
Знаю=)
Но диалоговое окошко-Листбокс в центре экрана мне показалось удобнее.
Цитата
Dima S написал:
Когда листов 40-80 или "овердофига" - тут нужно задуматься в другом направлении - а правильные ли инструменты я использую для работы с данными.
Цитата
Мотя написал:
АБСОЛЮТНО согласна!!!
Цитата
Grr написал:
Если все листы будут с накопительным числовым индексом и постоянным префиксом (как в приложенном примере), то можно запрашивать номер листа Inputbox-ом и осуществлять переход на соответствующий лист
Число листов и их имена динамически меняются.

Я работаю с контекстной рекламой, каждый лист — список запросов определенной группы, группы образуются тоже динамически (комбинированием разных типов слов), так что число листов динамически меняется в зависимости от проекта.
Есть разные самописные скрипты, в зависимости от результата их работы мне надо "ручками" проверить 2-5-10-100-n ячеек, взглянуть на итоговый результат их работы.
По другому хранить проекты, запускать по ним скрипты будет еще неудобнее. В Access лезть пока  не хочу=)
Поэтому мне нужен быстрый и удобный способ прыгать между листами.

Цитата
С.М. написал:
Что бы нажать одновременно CTRL+ALT+W всё равно придётся отпустить замученную работой мышу.
Дайте ей отдохнуть !
Кто вам сказал? Хоткей под левой рукой нажимается идеально, правая управляет мышой. На "чистый" Alt повесить не могу, т.к. "панель быстрого доступа" и так давно занята.

Цитата
RAN написал:
http://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=1&TID=54585&TITLE_SEO=54585&MID=495...
Цитата
JeyCi написал:
перехватом сообщений WM_MOUSEWHEEL ... (в общем и целом)
Спасибо, конечно, но в стартовом топике я именно про это и писал, удивляясь, что когда в ListBox появляется скролл-бар, он не работает, и решения, что я нашел — перехватывать колесо мыши с кучей глюков. Собсна, мой вопрос то был: какого фига так сложно, может есть проще способ, который я не выгуглил?

Цитата
Jungl написал:
Вариант с webbrowser. К сожалению мне не удалось после вызова формы установить фокус на браузере, чтобы можно было сразу скроллить, а не кликать мышкой на селекты. Может кто подскажет.


быстрый переход на лист(web).xlsm  (65.2 КБ)
Прикольная реализация, но отсутствие фокуса на старте, конечно, непонятно. А такую форму можно сделать динамически расширяемой по высоте в зависимости от числа строк?
Изменено: zamboga - 14 Дек 2016 13:48:54
Изменять размер ListBox в зависимости от длины списка, VBA
 
Logistic,спасибо, но это примерно тоже самое, что я сам написал, только в вашем варианте чуть больше информации выводится.

Ваш вариант, как и мой, не делает автоматический ресайз окошка с формой в зависимости от числа листов.
Вызов штатного окна со списком листов горячей клавишей и в центр окна, Хоткей или на VBA
 
По просьбе модераторов -- один вопрос, одна тема. Где вы увидели дубликат?
Здесь речь о стандартном окошке выбора листов, на который хочу хоткей и вызов в центр монитора.

В соседних темах — самописный макрос для той же задачи, т.к. стандартными средствами не знаю как это сделать.
Изменено: zamboga - 14 Дек 2016 13:36:54
Как сделать скролл на Listbox?, быстрый переход на другой лист через список листов
 
Цитата
zamboga написал: А если листы без номеров, а имеют текстовые имена?
Цитата
Мотя написал: Это не имеет никакого значения - проверьте!
Это я к тому, что если есть цифровой индекс — то искать нужный лист — легче.

Цитата
Мотя написал: С переходами с листа на лист - проблематично...
Вот именно поэтому я и написал то, что  в первом посте=)

Цитата
Karataev написал: Если только для себя, то попробуйте ListView
Поизучал. Решил, что мне все-таки лень его сейчас внедрять.

Обнаружил, что если в диалоговом окне в форме ListBox зажать ЛЕВУЮ кнопку мыши и НЕ ОТПУСКАТЬ её, то можно скроллировать список, просто двигая саму мышку вверх и вниз.
Вызов штатного окна со списком листов горячей клавишей и в центр окна, Хоткей или на VBA
 
MonsterBeer, Plex платный.
У меня бесплатный ASAP, там такого нет.
Как сделать скролл на Listbox?, быстрый переход на другой лист через список листов
 
Мотя, это и так у меня есть, первый лист в моем рабочем файле в рабочем файле и есть лист с индексами. Оглавление листов сделать не сложно=)

Когда листов овердофига, то скажите мне, как мне быстро перейти, например, с листа 40 на лист 80? А если листы без номеров, а имеют текстовые имена?
Ваш сценарий:
1. найти лист 1 в длинном горизонтальном списке листов (или мышкой идти в левый нижний угол, и выбирать там через ПКМ. Но там я сразу выберу нужный лист).
2. перейти на этот лист
3. перейти с него на нужный лист.

Мой сценарий:
1. Хоткей со списком листов
2. Сразу переход на нужный.
Вызов штатного окна со списком листов горячей клавишей и в центр окна, Хоткей или на VBA
 
Есть стандартный список всех листов, который вызывается ПКМ в левом нижнем углу.
На большом мониторе прыгать мышкой туда-сюда постоянно не очень удобно. Что побудило меня написать простенький скрипт, который вызывает список листов для быстрого перехода к нужному. Но и там не все хорошо, т.к. есть проблема со скроллом, и проблема с автоматическим ресайзом формы.

Может быть, я зря изобретаю велосипед, и все проще?

Как вызывать это стандартное окно с листами горячей клавишей? Как сделать так, чтобы это окно вызывалось в центр рабочей области?
Как сделать скролл на Listbox?, быстрый переход на другой лист через список листов
 
Запускать буду только у себя. Но если еще и отдельную среду для такой мелочи надо разворачивать, то это тоже костыль какой-то, что не айс.
Как сделать скролл на Listbox?, быстрый переход на другой лист через список листов
 
Excel 2016.
У меня файл с кучей листов. Делаю удобный переход между ними (да, я знаю что можно нажать ПКМ в левом нижнем углу самого Excel, где стрелки перехода между листами, но туда надо тянуться мышкой, что не очень удобно на большом мониторе).

Список листов вызывается сочетанием CTRL + ALT + W
Переход на нужный лист — двойной щелчок на нужном листе или кнопкой.

Вопрос. Как сделать, чтобы работал скролл мышкой в Listbox? Яндекс с гуглом предлагают страшные решения по перехвату мышиного колесика с глюками и без гарантии нормальной работы. Неужели так все плохо? Ведь если скролл-бар автоматом появляется, по логике, сам скролл мышкой должен работать. Может опция какая-то специфическая есть у ListBox, которую я не выгуглил?
Изменять размер ListBox в зависимости от длины списка, VBA
 
Excel 2016.
У меня файл с кучей листов. Делаю удобный переход между ними (да, я знаю что можно нажать ПКМ в левом нижнем углу самого Excel, где стрелки перехода между листами, но туда надо тянуться мышкой, что не очень удобно на большом мониторе).

Список листов вызывается сочетанием CTRL + ALT + W
Переход на нужный лист — двойной щелчок на нужном листе или кнопкой.

Вопрос. Можно ли сделать, чтобы размер Listbox'a (и размер самой формы) автоматически менялся в зависимости от числа элементов в ней?
Изменено: zamboga - 14 Дек 2016 00:23:25
Можно ли задать массив через Range, добавив формулу для каждого элемента? Или только цикл?, на VBA
 
Казанский, тфу ты, как просто. Надо было попробовать так написать сразу, но я что-то не рискнул так кодить для массива=))

Спасибо!
Не открывается гиперссылка, заблокирована возможным нарушением бехопасности
 
В данном случае безопасность не причем.

Проблема в том, что Excel не видит файл по указанному вами пути.
Проверяйте синтаксис пути, синтаксис имени файла, синтаксис имени листа.
Код
=ГИПЕРССЫЛКА("[d:\папка с пробелами\файл с пробелами.xlsx]'Имя листа с пробелами'!"&АДРЕС(41;3);"Имя ссылки")

Путь + имя файла + имя листа обрамляется двойными кавычками " "
путь + имя файла обрамляется квадратными скобками [ ]
Имя листа обрамляется одинарными кавычками, апострофами ' '
После имени листа еще и добавляется восклицательный знак.
Можно ли задать массив через Range, добавив формулу для каждого элемента? Или только цикл?, на VBA
 
Файл прикладывать смысла нет, вопрос короткий.

Задаю массив. Для простоты кода переменные заменены на абсолютные значения.
Код
arr = Range(Cells(1, 1), Cells(10, 10)).Value

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

Как прикрутить функцию Application.Trim("ячейка") к массиву, чтобы в него попадали уже обработанные данные, без лишних пробелов?
Только циклом или есть синтаксис для этого?
Выделение из исходного текста поиска Google, если в результате поиска есть ссылка на ru.wikipedia.org
 
1. Полагаю, это из-за того, что на гугле (да и на яндексе) ссылки не прямые на источник, а через их внутреннюю систему аналитики + формат urlencode:
Код
https://www.google.ru/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0ahUKEwiH1OilxO7QAhXEWCwKHQ5dDQ0QFggaMAA&url=https%3A%2F%2Fru.wikipedia.org%2Fwiki%2F%25D0%259A%25D0%25B0%25D0%25BC%25D0%25B5%25D0%25BD%25D0%25B8%2C_%25D0%259A%25D0%25B0%25D1%2580%25D0%25BB%25D0%25BE%25D1%2581&usg=AFQjCNErBafn2fe1qncWF2O5xiOoRTwDbQ&sig2=y4rNAfuqoHndpLepZ4yyqw&cad=rja
2. А что бы вам напрямую в википедии не искать? https://ru.wikipedia.org/w/index.php?search=Carlos+Kameni&title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0­%B1...
Не могу прервать выполнение процедуры по нажатии кнопки или по "крестику"
 
The_Prist,спасибо, разобрался!

Для "пришельцев" с поисковых систем. Пауза для скрипта VBA с возможностью продолжения.
Во вложении итоговый код (скрипт) на VBA, который решает задачу:
  • Поставить скрипт на паузу, показать окно продолжения (НЕ модальное)
  • Пользователь может сделать любые действия в Excel, не прерывая сам скрипт
  • Продолжить скрипт по нажатию "Ок" / прервать скрипт по нажатию на "Выход" или "крестик"
Изменено: zamboga - 12 Дек 2016 00:29:32
Не могу прервать выполнение процедуры по нажатии кнопки или по "крестику"
 
heso, нет, так как как раз, пока форма Visible, я через DoEvents могу выполнять любые действия в книге, так как окно UserForm1 НЕ модальное.

Казанский, я понял ошибку с "глобальностью", и спасибо за "выход"!
Хочется еще, чтобы при нажатии на "крестик" так же была остановка скрипта. Сейчас же поведение такое, как будто я просто скрываю форму.
Никто не знает, можно ли как-то перехватывать нажатие на "крестик"?

Как вариант, можно попробовать сделать наоборот, делать "выход" по условию "UserForm1 = invisible, но тогда как мне реализовать по-другому задачу "поставить скрипт на паузу, сделать действия в книге, продолжить скрипт"?
Не могу прервать выполнение процедуры по нажатии кнопки или по "крестику"
 
Для "пришельцев" с поисковых систем. Пауза для скрипта VBA с возможностью продолжения.
Вложение "Пауза для скрипта с возможностью продолжения.xlsm"

Во вложении итоговый код (скрипт) на VBA, который решает задачу:
  • Поставить скрипт на паузу, показать окно продолжения (НЕ модальное)
  • Пользователь может сделать любые действия в Excel, не прерывая сам скрипт
  • Продолжить скрипт по нажатию "Ок" / прервать скрипт по нажатию на "Выход" или "крестик"

Первоначальный вопрос. Вложение "Выход.xlsm" с ошибкой, прерывание скрипта еще не реализовано.
Скрытый текст
Изменено: zamboga - 10 Дек 2016 14:02:43
Как запустить цикл только по определенным (выделенным мышкой) листам книги?, на VBA
 
конечно, это попадалось. Я ищу по-русски, типа http://vba-help.ru/vbahelp/excel/Worksheet/
Как запустить цикл только по определенным (выделенным мышкой) листам книги?, на VBA
 
JayBhagavan,
Цитата
zamboga написал:
Справка — это первое, что я пытаюсь использовать. Но по непонятной причине она у меня пропала:  http://prntscr.com/dguwcg  , поэтому приходится гуглить каждую проблему.
Как запустить цикл только по определенным (выделенным мышкой) листам книги?, на VBA
 
Казанский, нажал F2, много думал=))

Все, что я пока нашел в сети, носит разрозненный характер, и я не думал, что объектов так много, поэтому и попросил его список с полным описанием.

Я в свое время нагуглил и изучил такие объекты, как [Application, Workbooks, Workbook, Sheets, Worksheets, Worksheet, Rows, Columns, Range].
Но подозревал, что объектов больше, чем этот список, т.к. как минимум, я еще знаю ActiveWorkbook, ActiveSheet, ActiveWindow.
Кроме того, для многих функций и объектов в VBA после их написания и установки "точки" выводится список их свойств и методов (.Count, .Select и т.д.)

Я не всегда понимаю разницу между, например, Worksheets и Sheets, Worksheet и Sheet, поэтому приходится каждый раз гуглить.
В общем, мне пока очень не хватает справочника по базовым объектам/функциям и их синтаксису.
Как запустить цикл только по определенным (выделенным мышкой) листам книги?, на VBA
 
Цитата
Sanja написал:
Самому допилить не вариант не интересно?
Ещё как интересно. Наоборот, сижу, ковыряю VBA вместо основной работы=))

Sanja, Юрий М, я не заметил, что в примере Sanja там тоже .SelectedSheets. Мой комментарий относился к If...Then
Код
    If sh.Name = "Sheet1" Then
        MsgBox "Sheet1 is selected"
        Exit For
    End If
Как запустить цикл только по определенным (выделенным мышкой) листам книги?, на VBA
 
Цитата
The_Prist написал: кстати, в большинстве случаев активировать лист вообще нет нужды.
Действительно, в моем случае это почти не нужно. Спасибо, подтолкнули в правильном направлении, причесал скрипт, убрал ненужные Activate.

Цитата
Sanja написал: Пример из штатной справки
Справка — это первое, что я пытаюсь использовать. Но по непонятной причине она у меня пропала: http://prntscr.com/dguwcg , поэтому приходится гуглить каждую проблему.
Приведенный вами пример мне не совсем подходит (вернее, не подходит), т.к. у меня нет задачи запустить скрипт только на одном, заранее определенном листе. Мне надо запускать скрипт на разных Листах в разных Книгах (в том числе сгенерированных другими скриптами), и комбинации Листов каждый раз могут быть разные.


Цитата
The_Prist написал:For Each sh In ActiveWindow.SelectedSheets
спасибо, опять выручили! То, что нужно.

А нет у кого-нибудь ссылки со списком всех Объектов + их Свойства и Методы?
Пока всё, что я нагуглил — там не было свойства "SelectedSheets".
Как запустить цикл только по определенным (выделенным мышкой) листам книги?, на VBA
 
Сейчас так:
Код
    For Each sh In Sheets
        sh.Activate
        ...        'много букв
    Next
Работа ведется по всем листам книги.


А как сделать цикл только по выделенным листам, которые выделяем в обычном окне Excel, мышкой, перед запуском макроса?
Можно ли задать 3х-мерный массив (лист, строка, столбец), не используя цикл?, на VBA
 
У меня как раз x64 офис.

Вообще, я согласен, что лучше сразу забивать только нужными данными.

У меня в большинстве случаев так и будет, т.к. чаще всего я на "вход" скрипту задаю txt файл, в котором одна колонка, в каждой строке которой всего 1-2 слова.
Когда на вход стал подавать xlsx из нескольких листов, встала вышеописанная задача. Я даже бросился код менять, чтобы Словарь сразу забивать (без массива, как сейчас), но понял, что для этого придется половину проекта переписать, изменив саму логику (алгоритм). Решил, что пока тормозов не будет или ошибки не свалятся от больших объемов — этого делать не буду.

В общем, сделал пока так:
Код
    'создаем массив с данными для поиска
    ReDim arr(Worksheets.Count, lLastRowMax, lLastColMax)
    'Забиваем массив данными
    If Worksheets.Count = 1 Then    'если один лист, используем Range
        ReDim arr(lLastRowMax, lLastColMax)
        arr = Range(Cells(ActiveSheet.UsedRange.Row, ActiveSheet.UsedRange.Column), Cells(lLastRow, lLastCol)).Value
    Else                            'если несколько листов, используем цикл
        For Each sh In Sheets
            sh.Activate
            For i = ActiveSheet.UsedRange.Row To lLastRow
                For j = ActiveSheet.UsedRange.Column To lLastCol
                    arr(ActiveSheet.Index, i, j) = Cells(i, j).Value
                Next
            Next
        Next
    End If
Изменено: zamboga - 8 Дек 2016 12:29:47
Можно ли задать 3х-мерный массив (лист, строка, столбец), не используя цикл?, на VBA
 
Цитата
SAS888 написал:
Можно использовать массив массивов
Я читал про них. Сделал вывод, что для меня массив массивов не подойдет, т.к. дальше работа ведется с каждым элементом массива через
Код
For Each el In arr
    ...      'тут много букв
Next
Поэтому сейчас реализовал через цикл. Будет тормозить на очень больших объемах данных — буду оптимизировать код, благо точно есть куда (далее на основе массива создается Словарь, а можно это сделать сразу)

Цитата
SAS888 написал:
замечание от   Hugo  из поста № 3 все равно актуально!
Массив у меня задается так:
   
Код
    ReDim arr(Worksheets.Count, lLastRowMax, lLastColMax)
lLastRowMax и lLastColMax определяю заранее на каждом листе (циклом)
Код
    For Each sh In Sheets
        sh.Activate
    
        'определяем последнюю ячейку с данными
        With ActiveSheet.UsedRange: End With
        lLastRow = ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1
        lLastCol = ActiveSheet.UsedRange.Column + ActiveSheet.UsedRange.Columns.Count - 1
        
        If lLastRowMax < lLastRow Then lLastRowMax = lLastRow
        If lLastColMax < lLastCol Then lLastColMax = lLastCol

    Next
Глобально, скрипт нужен лично мне, у меня 16 Гиг оперативки, так что я как то не парюсь по этому поводу. Пока памяти хватает с избытком=)
Ну или я не понимаю тогда, что конкретно имеется в виду SAS888 и Hugo в 3м посте. Поясните, плз.

Цитата
Казанский написал:
некоторые функции листа работают с трехмерными ссылками. Они перечислены во втором посте этой темы:
http://www.planetaexcel.ru/forum/?PAGE_NAME=read&FID=8&TID=10351
Спасибо, посмотрел. Не мой случай — я работаю с текстовыми данными.
Изменено: zamboga - 8 Дек 2016 12:09:15
Можно ли задать 3х-мерный массив (лист, строка, столбец), не используя цикл?, на VBA
 
А как иначе?

У меня за редким исключением в каждой ячейке есть данные. Мне они нужны для обработки. Через Range проще всего засунуть их в массив, несколько пустых ячеек мне не мешают.

Так было до тех пор, пока не попался файл с несколькими вложенными листами. Понятно, что можно цикл запустить, но я полагал, что как-то можно попроще, используя ActiveSheet.Index и Range
Изменено: zamboga - 7 Дек 2016 18:10:41
Можно ли задать 3х-мерный массив (лист, строка, столбец), не используя цикл?, на VBA
 
Вот код, которым задаем массив со всеми ячейками с данными.

Код
Option Base 1

        'определяем последнюю ячейку с данными
        With ActiveSheet.UsedRange: End With
        lLastRow = ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1
        lLastCol = ActiveSheet.UsedRange.Column + ActiveSheet.UsedRange.Columns.Count - 1
         
        'задаем массив исходных данных
        arr = Range(Cells(1, 1), Cells(lLastRow, lLastCol)).Value

Подскажите, плз, есть ли способ, чтобы превратить массив arr в трехмерный вида  arr(номер_листа, строка, столбец)? Я не могу сообразить синтаксис. Как добавить номер листа?

   
Код
For Each sh In Sheets
    sh.Activate
    arr = Range(Cells(1, 1), Cells(lLastRow, lLastCol)).Value    'как добавить номер листа в эту строку?
Next

Понятно, что можно запустить двойной вложенный цикл (for i=1 to lLastRow, for j=1 to lLastCol) по всем ячейкам каждого листа, а есть ли способ проще, используя Range или еще как то?
Изменено: zamboga - 8 Дек 2016 12:06:39
Страницы: 1 2 След.
Наверх