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

Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 526 След.
Как в listbox вывести формат для столбца как в ячейках
 
Только если массив заполнять построчно, считывая при этом либо формат ячеек, либо забирать свойство .Text
Ну или итоговый массив arr после получения построчно обрабатывать, применяя к нужным столбцах необходимый формат(при помощи той же Format).
Изменено: Дмитрий(The_Prist) Щербаков - 01.02.2026 17:01:32
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Виртуальный диапазон из отдельных ячеек
 
Цитата
ЭксЭль написал:
ВПР тоже не должен работать
с чего бы? ВПР прекрасно умеет работать с массивами - в неё это заложено. Там можно задать виртуальный массив вместо диапазона ячеек. А БДСУММ не умеет работать с массивами - только с диапазонами ячеек. Там и условия отбора тоже на основании диапазона ячеек задаются.
Рекомендую ознакомиться: Функции баз данных
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Виртуальный диапазон из отдельных ячеек
 
БДСУММ с массивами не работает, только со ссылками на ячейки. Более того - диапазон должен быть неделимым, т.е. единым.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Конвертировать таблицу из плоской в таблицу по категориям, Необходимо получить "неправильную" , но удобную для чтения, таблицу из плоской нормализованной.
 
Цитата
Владимир Пешков написал:
С плюсиками и минусами стоящими перед "Магазин" и "Категория" не прокатит.
А Вы хоть попробовали? Там в параметрах сводной уже снят пункт для печати, который запрещает выводить на печать эти плюсики и минусы(правая кнопка мыши на любой ячейке внутри сводной -Параметры сводной таблицы -вкладка Печать).
Настоятельно рекомендую Вам ознакомиться более подробно с функционалом сводных таблиц.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Конвертировать таблицу из плоской в таблицу по категориям, Необходимо получить "неправильную" , но удобную для чтения, таблицу из плоской нормализованной.
 
Цитата
Владимир Пешков написал:
Одно под другим
ну так сводная же :)
Поиграйтесь с настройками отчета
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Копирование защищаемой ячейки
 
Цитата
KonstantinS написал:
можно запретить вставлять формулы ?
При заданных исходных данных - нет. Потому что нет возможности определить какие ячейки содержатся в буфере.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Копирование защищаемой ячейки
 
Цитата
KonstantinS написал:
но вставлять информацию не в данный лист
Тогда только макросами. При выделении незаблокированной ячейки сбрасывать буфер обмена:
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim rc As Range
    For Each rc In Target.Cells
        If Not rc.Locked Then
            If Application.CutCopyMode = xlCopy Or Application.CutCopyMode = xlCut Then
                Application.CutCopyMode = False
                MsgBox "В эти ячейки нельзя копировать другие ячейки", vbInformation, "www.excel-vba.ru"
                Exit Sub
            End If
        End If
    Next
End Sub

код размещается в модуле листа. Макросы должны быть разрешены.
Изменено: Дмитрий(The_Prist) Щербаков - 30.01.2026 12:37:13
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Копирование защищаемой ячейки
 
Цитата
KonstantinS написал:
Можно ли запретить вставлять в синие ячейки данные из правых
запретите выделение заблокированных ячеек и проблема исчезнет.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Защита листов книги с Элементами ActiveX, Нужно защитить листы, но чтобы ActiveX работали
 
Цитата
Ведмедица написал:
Стандартные способы защиты блокируют Элементы ActiveX
у меня не блокируют. Выбор в комбобоксе работает без проблем, флажки тоже. Так что согласен - нужен файл. Может у Вас проблема не в ActiveX, а в макросах, которые с ними взаимодействуют.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Ошибка буфера обмена
 
Для начала следует найти и отключить все сторонние приложения, которые так или иначе отслеживают буфер обмена. Например, это может быть Punto Switcher и ему подобные программы. В далекие времена Skype тоже вызывал разные ошибки буфера. Так что имеет смысл присмотреться и к других офисным программам - для чистоты эксперимента. One Note, например(хоть и не был в этом уличен, но может использовать буфер).
Цитата
asesja написал:
нужно приложить файл с примером
не думаю, что это от файла зависит. Скорее всего ошибка будет воспроизводиться на любом файле, т.к. буфер никак не связан с конкретными файлами.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Защита Листа Excel от удаления, VBA либо другим способом
 
Цитата
asesja написал:
при закрытии/открытии проверять нужные листы
я не это написал. При активации листа. Событие такое есть, выше приводил с ним пример. Вот в этот момент проверять наличие листов. Почему именно там. Потому что при удалении любого листа сразу активируется другой лист. Таким образом, сразу после удаления какого-либо нужного листа проверка это обнаружит и выдаст сообщения сразу же в этот момент, а не когда человек закрыл книгу, понаделав там дел или когда открыл - что еще хуже, т.к. вообще непонятно кто и когда накосячил.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Защита Листа Excel от удаления, VBA либо другим способом
 
Цитата
asesja написал:
Это будет умышленное удаление и понятно, что сделано специально
а другие варианты не умышленные, что ли? :) Раз даете такую волю пользователям с этими листами
Цитата
asesja написал:
ручное взаимодействие, создаются его копии с другим именем как в ручную, так и программно, используются динамические справочники с выпадающими списками и реализацией быстрого программного поиска с большим объемом данных
то тогда уж нечего им запрещать удалять листы, а просто проверять при активации любого листа наличие "неудаляемых". И если не нашли - значит лист удалили или переименовали и об этом надо сразу сообщать и пусть уже пользователь думает, что делать: закрывать без сохранения или что. Ну или Вы за него думайте, здесь уже Вам решать.
Цитата
asesja написал:
"Cancel = True" в этом событии не срабатывает,
конечно. Ведь здесь нет переменной события Cancel :)
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Защита Листа Excel от удаления, VBA либо другим способом
 
Да нет такого способа. Никак Вы не защитите лист от удаления. Даже если попытаться заблокировать все кнопки, отвечающие за удаление листа - выше приведенная одна строка кода все равно сделает свое дело. И неважно, из какой книги она будет вызвана.
Цитата
asesja написал:
в данном проекте мне это не очень удобно
думаете, что перехват события удаления листа будет проще? :)
Да, в новых версиях есть такое событие в книге: Workbook_SheetBeforeDelete. Но вот в чем беда - если открыть проект в Excel более старой версии - событие не будет опознано и не сработает. Следовательно, вариант тоже не рабочий.
Поэтому я все же настоятельно рекомендовал бы грамотно организовать запрет удаления именно через защиту книги.
Например, в том же модуле ЭтаКнига:
Код
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    Select Case Sh.Name
    Case "Лист2"
    Me.Protect "1"
    Case Else
    Me.Unprotect "1"
    End Select
End Sub

Но опять же - Activeworkbook.Sheets("Лист2").Delete - сработает без проблем, если активным в момент выполнения этой строки будет другой лист.
Изменено: Дмитрий(The_Prist) Щербаков - 28.01.2026 09:16:28
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Как в формулах в структурированных ссылках использовать названия столбцов получаемых из текстовых значений ячеек
 
Цитата
написал:
на больших массивах ИНДЕКС работает быстрее ВПР
не думаю. У них принцип работы одинаковый, а следовательно и поиск при равных исходных данных будет одинаково быстрый/медленный.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Защита Листа Excel от удаления, VBA либо другим способом
 
Я бы на Вашем месте все же воспользовался защитой книги. Потому что хоть к проекту и не будет доступа, никто не отменял простую строку:
Код
ActiveSheet.Delete
из любого проекта.
А скрытие и отображение листов можно отдельной формой реализовать, это не так-то сложно. А если лист всего один - так и вовсе можно это сделать одной кнопкой без всяких форм.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Выбор нужного листа в выпадающем списке и переход на него
 
Может надстройка подойдет: Список листов книги  
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Сбор данных из нескольких файлов
 
Цитата
написал:
Пока сам не могу разобраться в чем дело.
100% в этом:
Цитата
написал:
lLastRow = ThisWorkbook.Sheets(ЛистВставки).Cells(Rows.Count, ДиапазонВставки).End(xlUp).Row
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Извлечение цифр из строки, Извлечение цифр из строки
 
Как получить слово после последнего пробела
Код
=ПОДСТАВИТЬ(ПСТР(ПРАВСИМВ(" "&ПОДСТАВИТЬ(B2;"_";ПОВТОР("_";999));999*1);1;999);"_";"")
но это будет текст. Если необходимо в ячейку возвращать именно сумму числом - то пару символов надо добавить:
Код
=--ПОДСТАВИТЬ(ПСТР(ПРАВСИМВ(" "&ПОДСТАВИТЬ(B2;"_";ПОВТОР("_";999));999*1);1;999);"_";"")
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Макрофункция ВЫЧИСЛИТЬ() не обновляет значение автоматически
 
Добавьте в именованную формулу любую "летучую" функцию, которая не будет влиять на результат. Например, ТДАТА:
Код
=ВЫЧИСЛИТЬ(Лист1!$D$1)+(ТДАТА()*0)
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Создать DLL (C++) для Excel 2016
 
А запрос в чем, если не надо учить языкам? В том, как написать DLL на C++? Без даже минимального обучения нужному языку рассказывать нечего :)
Цитата
A-Soft написал:
Обычные DLL не принимает Excel
а обычные - это какие? Насколько знаю, правильно написанная DLL(хоть на паскале) нормально подключается к той программе, под которую написана. Даже на VB можно это сделать(через грабли, но можно).
Или хотите такую, которая подключается просто двойным кликом по файлу?

P.S. Заказ не занимаю, если что. Просто любопытствую.
Изменено: Дмитрий(The_Prist) Щербаков - 21.01.2026 14:24:18
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Отказ в редактировании макроса, Изменение структуры макроса
 
Цитата
paulryler написал:
открытие нового процесса Excel
я Вас удивлю, но даже если бы это был не первый процесс - разные процессы работают независимо. Или Вы не понимаете смысла слова "процесс" в контексте Excel. Допустим, Вы запустили Excel. Это первый процесс - "экземпляр1". Вы создали в нем новую книгу. Теперь в "экземпляр1" кол-во книг = 1. Далее Вы идете в меню программ и запускаете еще раз Excel - это будет второй процесс - "экземпляр2". И на момент запуска в нем нет ни одной книги. Единственная открытая книга пока что только в "экземпляр1".
Подытожим: не важно, сколько там у Вас процессов - проверять наличие видимых открытых книг необходимо в том, в котором выполняется код. Т.е. в конкретном  экземпляре Application. Я бы делал так - проверял бы наличие видимых книг и если их нет - создавал.
Код
Sub НижПодч_Описание()
    Dim wb As Workbook
    Dim lc&
    'проверяем наличие видимых окон книг в текщем экземпляре
    For Each wb In Application.Workbooks
        If wb.Windows(1).Visible Then
            lc = lc + 1
        End If
    Next
    
    If lc = 0 Then
        Set wb = Workbooks.Add(1)
    End If
    Application.MacroOptions _
            Macro:="НижПодч", _
            Description:="Если ячейка не пустая, ставит '_' и текст", _
            Category:="MIT-Excel", _
            ArgumentDescriptions:=Array( _
                "ячейка для проверки", _
                "текст или ссылка на ячейку, которая будет отображаться как текст после '_'")
    'можно и закрыть, но я бы оставил - запустили надстройку и создается новая книга
    'это удобно и более правильно - пустое окно обычно всех пугает :)
    'но если хочется пустое окно - то раскомментируйте
'    If lc = 0 Then
'        wb.Close 0
'    End If
End Sub

wb.Close 0 - спорный момент. Я бы не закрывал. Первая причина в комментах(многих пугает серое окно). А вторая более глобальная: может получиться так, что кроме надстройки и этой книги других открытых в приложении не окажется. И тогда при закрытии последней книги в некоторых версиях Excel это спровоцирует закрытие приложения полностью.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Отказ в редактировании макроса, Изменение структуры макроса
 
Цитата
paulryler написал:
А в первых сообщениях вообще ничего не писали про добавление в код тех строк,
про добавление строк нет, а вот про открыта ли на момент работы макроса хоть одна видимая книга - да. А это значит, что при остановке кода на этих строках Вы должны убедиться, что на заднем фоне Excel видна книга и лист с ячейками, а не серый фон :) Надстройка хоть и книга - но она является скрытой: т.е. листы и ячейки по умолчанию скрыты от пользователя и книга не отображается среди всех обычных книг.
Но Вы же написали
Цитата
paulryler написал:
Книга открыта и видима с включенной надстройкой
что и ввело всех в заблуждение, включая Вас самого.
Да и агрессии никакой нет было - Вам просто указали на то, что вопрос был задан конкретный и ответ на него было получен утвердительный. Хотя судя по коду - это не так. Вот и все. Теперь  будете знать что такое ВИДИМАЯ книга :)
Изменено: Дмитрий(The_Prist) Щербаков - 21.01.2026 13:46:37
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Отказ в редактировании макроса, Изменение структуры макроса
 
Остается только предложить выложить сюда свою надстройку. Будем смотреть. Гадать дальше нет смысла.

Офф
Изменено: Дмитрий(The_Prist) Щербаков - 21.01.2026 12:35:18
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Отказ в редактировании макроса, Изменение структуры макроса
 
Цитата
paulryler написал:
оно не дает это сделать
оно - это кто? Если запущено из надстройки - проблем быть не должно. Хоть одна книга на момент работы этого макроса открыта и видима?
И уточните текст ошибки - точно такая же как в первом посте или может быть иная? Почему спрашиваю - описание к аргументам через MacroOptions появилось только в 2010 Excel и в более ранних версиях будет выдавать ошибку.
Изменено: Дмитрий(The_Prist) Щербаков - 21.01.2026 11:51:13
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Запуск макроса при изменении ListBox
 
Цитата
OlegO написал:
запускает UserForm с искомым ListBox
У Вас там ComboBox, а не ListBox. Об этом речь.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Вычисление автозаполнения через формулу при наличии критерия
 
Сделал для версий Excel от 2007. Столбец В:
Код
=ЕСЛИОШИБКА(ИНДЕКС('ВВОД ДАННЫХ!'!B$2:C$715;НАИМЕНЬШИЙ(ЕСЛИ(('ВВОД ДАННЫХ!'!J$2:J$715="Да");СТРОКА(A$2:A$715)-1);СТРОКА(A1));1)&" "&ИНДЕКС('ВВОД ДАННЫХ!'!B$2:C$715;НАИМЕНЬШИЙ(ЕСЛИ(('ВВОД ДАННЫХ!'!J$2:J$715="Да");СТРОКА(A$2:A$715)-1);СТРОКА(A1));2);"")

Столбец С:
Код
=ЕСЛИОШИБКА(ИНДЕКС('ВВОД ДАННЫХ!'!B$2:J$715;НАИМЕНЬШИЙ(ЕСЛИ(('ВВОД ДАННЫХ!'!J$2:J$715="Да");СТРОКА(A$2:A$715)-1);СТРОКА(A1));4);"")

остальные столбцы по аналогии.

Если версия более новая и есть функция ФИЛЬТР - то все намного проще:
Код
=ФИЛЬТР('ВВОД ДАННЫХ!'!B2:B715;'ВВОД ДАННЫХ!'!J2:J715="Да")&" "&ФИЛЬТР('ВВОД ДАННЫХ!'!C2:C715;'ВВОД ДАННЫХ!'!J2:J715="Да")
Изменено: Дмитрий(The_Prist) Щербаков - 20.01.2026 13:11:40
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Запуск макроса при изменении ListBox
 
Я бы делал чуть иначе. Заполняем листбокс так:
Код
Private Sub UserForm_Initialize()
    Dim am, xm, ad, lr&
    am = Array("восс-е исходных значений ДИ", "восс-е контекст. меню листа", "визуал-я 1 строки прихода", "отображение скрытых имен")
    ad = Array("Func_RecNM", "Func_RecCM", "Func_RecViz", "Func_ShowImen")
    For Each xm In am
        Me.Service_macros.AddItem xm
        Me.Service_macros.List(lr, 1) = ad(lr)
        lr = lr + 1
    Next
End Sub
'и просто при изменении берем нужный макрос из второго столбца Листбокса
Private Sub Service_macros_Change()
    ad = Service_macros.List(Service_macros.ListIndex, 1)
    Application.Run "'" & ThisWorkbook.Name & "'!" & ad
End Sub
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Макросом записать в ячейку формулу, возвращающую написание формулы из другой ячейки и ее расчетное значение.
 
Цитата
dhead написал:
его и не нужно было бы определять: пользователь на своем компе вводит формулу в соответствии со своими региональными настройками
ну т.е. ничего Вы не поняли. Ок. Попробуем разжевать.
xlListSeparator - выдаст Вам точку-с-запятой. Но при этом RefersToLocal может его не принять и потребовать внутренний разделитель - т.е. запятую(как я показал в своем сообщении выше). И это при том, что вся формула будет написана на русской локализации, а разделитель аргументов в формулах в ячейках все та же точка-с-запятой.
Далее, даже если решились подменять разделители - представьте формулу вида:
"=СУММ(Лист;1!A1;Лист;1!A2)"
в чем проблема? выделил красным - имя листа содержит разделитель аргументов. Следовательно, простой Replace не сработает и надо будет парсить формулу. А это поверьте мне - дело весьма не благодарное.
Цитата
dhead написал:
Все точно так же будет работать с ячейками на временном листе
нет и еще раз нет. Во временный лист Вы переносите формулу именно так, как её требуется видеть в той локализации, в которой ведется работа. Не надо думать, какие там разделители требует RefersToLocal. А значит никакие разделители определять/подменять не надо. Надо просто объединить все в одну формул.
Просто попробуйте ту формулу, которую у Вас не принимает имя записать в лист через FormulaLocal. Не удивлюсь, что все запишется и будет вычислено корректно и без ошибок.
Цитата
dhead написал:
Полноценная книга со всей иерархией объектов ради одной ячейки
у Вас просто фантазии или опыта нет. Копии книги и листов лишь пара вариантов. Можно это делать и в отдельных пустых ячейках и даже(!) в уже заполненных. Просто надо понимать, в каких ячейках это можно делать, а в каких нет.
Дальше убеждать Вас в чем-то не вижу смысла - обсуждение заходит в тупик, Вам надо решение исключительно через диспетчер имен. И я почему-то уверен, что проблема именно в разделителе, хоть Вы и говорите, что пробовали его менять в формуле.
Изменено: Дмитрий(The_Prist) Щербаков - 20.01.2026 12:36:20
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Макросом записать в ячейку формулу, возвращающую написание формулы из другой ячейки и ее расчетное значение.
 
Цитата
dhead написал:
гадить в чужой лист временными ячейками с производственным мусором как-то некрасиво. Создавать\удалять или держать ради этого отдельный лист – тоже.
а имена создавать красиво? :) Ну не согласен с Вами. Если имена не справляются(а они могут не пропустить из VBA строку длиной более 255 символов) - то чем плохо использование отдельного скрытого листа для таких целей? Чем он хуже создания имени с кучей нюансов? А на листе можно все эти формулы просто соединить и получить готовый вариант. Вот не понимаю я таких манипуляций. Тем более работа идет через форму - при запуске формы создали книгу, скрыли её(wb.Windows(1).Visible = False) и работайте на её листе. Перед закрытием формы - просто закрываете без сохранения и никаких следов. Ну или в самой книге либо держать отдельный скрытый лист, либо создавать и удалять. Опять же - только на время работы формы.
Ладно бы вообще нельзя было использовать листы - но ведь можно, раз можно использовать имена. Так зачем себе жизнь усложнять?  :)
Цитата
dhead написал:
Все перепробовал, не помогает.
а разделитель пробовали менять? Вот так:
Код
With ThisWorkbook.Names.Add("testname2", RefersTo:="=СУММ(Лист1!$A$1,Лист1!$A$2)")
    .RefersToLocal = "=СУММ(Лист1!A1,Лист1!A2)"
End With

Я об этом в первом своем сообщении намек делал - видимо, он не достиг цели :) это опять к слову о том, что диспетчер имен хоть и воспринимает русские названия функций, но живет по своим законам...Вот и подумайте - сможете корректно определить именно разделители аргументов для каждой произвольной функции/формулы, взятой из ячейки? А точно уверены, что у всех пользователей именно тот разделитель, который Вы считаете разделителем? Ведь у кого-то это может быть и точка-с-запятой, а у кого-то - запятая.
Изменено: Дмитрий(The_Prist) Щербаков - 19.01.2026 15:43:38
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Макросом записать в ячейку формулу, возвращающую написание формулы из другой ячейки и ее расчетное значение.
 
Если честно - плохо понимаю вообще смысл этого действия. Здесь ошибок может быть куча: начиная от разделителей и заканчивая грамматикой. Все это может быть вперемешку и никакие FormulaLocal не разберутся, что так кто написал.
А если учесть, что применяются только встроенные функции(без всяких там UDF самописных) - то вообще не ясна цель изврата. В Excel более чем вменяемый Мастер функций, который позволяет набирать вложенные и иные функции точно так же, только со всеми проверками "из коробки".
Цитата
dhead написал:
Использовать для этого временную ячейку на листе кажется не очень правильным
и между тем это самый рабочий вариант. Раз работа через макросы - то проблем в этом не вижу. Хоть на временном листе, хоть на копии текущего это можно записывать. И будет куда стабильнее и более наглядно при отладке, чем через имена.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 526 След.
Наверх