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

Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 346 След.
Оператор "Is" в VBA возвращает "False" для одинаковых диапазонов
 
Цитата
ocet p написал:
   a1 = Range("A1")
   Set a11 = Range("A1")
   On Error Resume Next
   isObj = a1 Is a11 ' => Run-Time error '424': => "Object required"
Если честно не понял что за сравнение здесь при помощи Is и зачем вообще приведен столь некорректный пример? Возможно недопонял сути сообщения, но... Is предназначен для сравнения ДВУХ объектов, а не двух переменных любого содержания и приводить пример такого неверного сравнения не вижу смысла.
Код
a1 = Range("A1")
это присвоение переменной значения по умолчанию для объекта Range. Т.к. нет ключевого Set. Т.е. по сути там либо текст, либо число(в зависимости от того, что в .Value). Но никак не объект.
Код
Set a11 = Range("A1")
это ссылка на сам объект. Т.е. Вы сравниваете объект и число. Конечно, будет ошибка.
А правильное сравнение я уже приводил и чуть его расширю(уравняем шансы сравнения переменных, так сказать):
Код
Sub IsNotIs()
    Dim rc As Range, rc2 As Range
    Set rc = Range("A1") 'везде один и тот же диапазон
    Set rc2 = Range("A1")
    Debug.Print ObjPtr(rc)
    Debug.Print ObjPtr(Range("A1"))
    Debug.Print ObjPtr(rc2)
    Debug.Print rc Is Range("A1") 'не равны
    Debug.Print rc Is rc2 'не равны
End Sub
Как видно, переменные rc и rc2 созданы через Set к одному объекту. Но сравнение Is считает их разными, потому что каждый раз создается НОВАЯ ссылка на объект Range, т.к. он по сути каждый раз создается "на лету". Нет в Excel статичной ссылки на каждый возможный вариант диапазонов, поэтому и создается такая ссылка в памяти постоянно разная при создании переменных для Range. При этом для всех ячеек листа(Cells) тоже самое правило.
Изменено: Дмитрий(The_Prist) Щербаков - 13 Дек 2019 17:44:20
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Оператор "Is" в VBA возвращает "False" для одинаковых диапазонов
 
Цитата
ocet p написал:
Сколько раз вы и другие (люди) писали Range("A1") без ".Value" при написании кода
всегда стараюсь указывать. И вот почему:
Код
Sub ValueOrNotValue()
    Range("A1:B2").Formula = "1"
    Range("A1:A2") = Range("A1:A2")
End Sub
посмотрите на значение ячеек A1:A2 до Range("A1:A2") = Range("A1:A2") и после :)
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Оператор "Is" в VBA возвращает "False" для одинаковых диапазонов
 
Цитата
БМВ написал:
кажется про листы это лишнее
ну как бы...И да и нет :) Тут тема уже иная, согласен. Просто вспомнилось и надо было бы сразу пояснить до кучи, что имею ввиду под листами. Это по сути будет вдогонку текущей теме на всякий случай.
Не все знают, что не все листы одинаковые: есть листы рабочие(Worksheet), есть листы диаграмм(Chart), есть листы макросов и диалогов.
Так вот, если пытаться сравнить с листа макросов, например, то получим-таки False:
Код
Sub IsNotIs2()
    Debug.Print ObjPtr(ActiveCell.Worksheet)
    Debug.Print ObjPtr(ActiveSheet)
    Debug.Print ActiveCell.Worksheet Is ActiveSheet
End Sub
потому что ActiveCell.Worksheet не всегда одно и тоже, что ActiveSheet
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Оператор "Is" в VBA возвращает "False" для одинаковых диапазонов
 
При обращении к листам и диапазонам создаются всегда разные адреса в памяти:
Код
Sub IsNotIs()
    Dim rc As Range, rc2 As Range
    Set rc = Range("A1")
    Set rc2 = Range("A1")
    Debug.Print ObjPtr(rc)
    Debug.Print ObjPtr(Range("A1"))
    Debug.Print ObjPtr(rc2)
    Debug.Print rc Is Range("A1")
End Sub

а это значит, что IS будет считать их разными, т.к. сравнивает по тому же принципу, что и ObjPtr. Поэтому в выше приведенном коде они не будет равны. Поэтому сравнивать объекты некоторых коллекций Excel лучше по именам и полным адресам:
Код
Sub IsAddr()
    Dim rc As Range
    Set rc = Range("A1")
    Debug.Print ObjPtr(rc)
    Debug.Print ObjPtr(Range("A1"))
    Debug.Print rc.Address(external:=True) = Range("A1").Address(external:=True)
End Sub
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
следующее значение ВПР при повторе
 
Цитата
Kazanildarik написал:
Стресовая ситуация на работе сложилась, времени не дает руководство совсем на раздумья
а на поиск по форуму дает? Например, можно поискать по фразе: ВПР с поиском всех значений
Удивительно, но тема далеко не нова...
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Координатное выделение. Макрос по событию листа
 
Цитата
OblivionR написал:
при выделении одной ячейки
Тогда проясним логику кода. Потому что убирая эту строку происходит следующее:
1. выделили любую ячейку, вызвав тем самым событие листа Worksheet_SelectionChange. Допустим, это будет ячейка А1.
2. после этого мы не определяем сколько выделено ячеек. Поэтому у нас формируется новый диапазон:
Код
Intersect(WorkRange, Union(Target.EntireColumn, Target.EntireRow))
это пересечение строки и столбца выделенной ячейки и диапазона "A1:g10", т.е. диапазон "$C$1:$C$10,$A$5:$G$5".
А теперь внимание - что мы делаем с этим диапазоном? Правильно, применяя метод Select выделяем. Что в итоге опять же провоцирует вызов события Worksheet_SelectionChange, но теперь уже в качестве целевых ячеек(Target) будет весь диапазон "$C$1:$C$10,$A$5:$G$5". А уж при использовании Intersect он превращается в диапазон "A1:g10", т.к. с ним пересекаются все его ячейки. Вот и ошибка.
А запрет выполнения процедуры при выделении более одной ячейки второй вызов Worksheet_SelectionChange предотвращает.
И в свете озвученного выше правильнее было бы записать код таким образом:
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim WorkRange As Range
    'отключаем отслеживание событий
    Application.EnableEvents = False
    Set WorkRange = Range("A1:g10")
    Intersect(WorkRange, Union(Target.EntireColumn, Target.EntireRow)).Select
    'возвращаем отслеживание событий
    'обязательно, иначе в следующий раз выделение не сработает
    Application.EnableEvents = True
End Sub
Изменено: Дмитрий(The_Prist) Щербаков - 11 Дек 2019 19:52:43
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Координатное выделение. Макрос по событию листа
 
ну если нужно именно коорд.выделение, то вполне хватит такого кода:
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim WorkRange As Range, rr As Range
    Set WorkRange = Range("A1:g10")
    Set rr = Intersect(WorkRange, Union(Target.Cells(1, 1).EntireColumn, Target.Cells(1, 1).EntireRow))
    If Not rr Is Nothing Then rr.Select
End Sub
хотя все равно не очень понятно как быть, если выделена ячейка вне заданного диапазона.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Координатное выделение. Макрос по событию листа
 
какую цель преследует этот кусок кода?
Цитата
OblivionR написал:
Intersect(WorkRange, Union(Target.EntireColumn, Target.EntireRow)).Select
что он должен по Вашему делать при выделении ячеек внутри "A1:g10" и вне этого диапазона?

P.S. Даже удивительно, как тема с таким названием прожила так долго и даже удостоилась ответа от модератора без замечания... :D  
Изменено: Дмитрий(The_Prist) Щербаков - 11 Дек 2019 08:25:57
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Как превратить уровневую таблицу 1С в обычную плоскую.
 
Цитата
Haemoglobin написал:
Что входит в "техническую информацию" - можно только догадываться
Поверьте - ничего страшного там не собирается. Просто тем, кто использует надстройку будут присылаться письма по предложениям от системы ФД и возможно, будут поступать аналогичные звонки.
Цитата
Haemoglobin написал:
вы рискуете этой надстройкой разгласить конфиденциальную информацию
Никакие конф.данные не собираются и не отсылаются. Максимум - email и телефон и те Вы указываете на сайте, когда регистрируетесь, если я правильно помню. Только вот не уверен, что эти данные нужны для всего функционала надстройки(давно это было). Какой-то функционал вообще работает только для активных подписчиков(типа шаблоны документов).
Знаю, т.к. разрабатывал надстройку я специально для ФД, видео записывал тоже я :)
Изменено: Дмитрий(The_Prist) Щербаков - 11 Дек 2019 08:21:27
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Уведомление об открытии файла Excel
 
Цитата
Jenya1980 написал:
кто открыл файл
а что считать открытием? В Outlook, например, есть функция предпросмотра и многие через неё файлы просматривают. В предпросмотре макрос не сработает.
Да и сам формат файла неизвестен. Это Excel или еще какой-то файл?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Сумма 12 последовательных ячеек в диапазоне из 36 ячеек, если сумма этих 12 ячеек превышает конкретное значение
 
Цитата
Bigun написал:
если сумма этих 12 значений превысит 1 000 000
Цитата
Bigun написал:
ячейку из этих 12, в которой сумма превысила 1 млн
не совсем понятно из примера по какому признаку подсвечивается эта самая ячейка. Да и остальные тоже. В примере подсвечены правильные ячейки? Почему тогда в 3-ей строке отмечено 12 ячеек, хотя 1 млн. был уже на 11-ой?
7-я строка и того лучше - зачем тогда нужны еще 11 ячеек, если 1 млн в первой же? И что и как делать, если 1 млн будет не в первой же ячейке, а во второй, третьей?
И что делать, если такие диапазоны(по 12 ячеек выше 1 млн) в одной строке встречаются более одного раза?
Изменено: Дмитрий(The_Prist) Щербаков - 10 Дек 2019 18:19:55
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Некорректное окрашивание диапазона ячеек без жесткой привязки ссылок
 
кстати, еще один момент: "0" не одно и тоже, что 0. В первом случае это текст, во втором число. У Вас просто есть формулы, которые возвращают именно "0" и они не будут восприниматься УФ как корректное сравнение с числом 0.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Некорректное окрашивание диапазона ячеек без жесткой привязки ссылок
 
В общем если приведете данные в порядок и везде будет по 7 строк, то можно использовать такую формулу(выделив предварительно для создания правила всю таблицу, начиная с D3):
Код
=СМЕЩ(D3;5-ОСТАТ(СТРОКА(C7);7);ОСТАТ(СТОЛБЕЦ(C1);2)-1)=0

Если вдруг строк будет только 6 везде, то формула будет такой:
Код
=СМЕЩ(D3;4-ОСТАТ(СТРОКА(C6);6);ОСТАТ(СТОЛБЕЦ(C1);2)-1)=0
Изменено: Дмитрий(The_Prist) Щербаков - 9 Дек 2019 18:44:58
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Некорректное окрашивание диапазона ячеек без жесткой привязки ссылок
 
А такой бардак в данных реально имеет место быть? Я про то, что где-то 7 строк данных, где-то 6...
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Некорректное окрашивание диапазона ячеек без жесткой привязки ссылок
 
Я же выше написал как - правильно формулу задать. Если диапазон для окрашивания начинается с 3-ей строки столбца D - то эта ячейка и должна быть частью формулы, а не любая ячейка из этого диапазона. Т.е. верхняя левая ячейка должна входить в условие.
Хотя пардон, не сразу въехал в это
Цитата
roeline написал:
Мне нужно увидеть значение в ячейке D8 и в зависимости от того, какое значение там будет, окрасить весь диапазон D3:E9 в определённый цвет
Тогда тут мало вариантов - D8 в любом случае должна иметь жесткую привязку, ибо формулы УФ вычисляются для каждой ячейки диапазона по своим правилам.
Изменено: Дмитрий(The_Prist) Щербаков - 9 Дек 2019 17:11:24
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
UDF в умных таблицах не пересчитываются автоматически, cо строкой Application.Volatile в коде пользовательской функции возникают ошибки
 
Искать ошибку в коде без файла бессмысленно. Надо понимать и видеть где она работает и куда надо скопировать, чтобы перестала работать. Вдруг копируется туда, где просто нет какой-либо таблицы или листа, вот и ошибка?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Некорректное окрашивание диапазона ячеек без жесткой привязки ссылок
 
Диапазон применения: =$D$3:$E$9
А формула для него у Вас: =$D$8=0
Т.е. просматривается все со смещением в 5 строк. Создайте нормальную формулу по всем правилам и тогда копирование ячеек даст корректный результат закрашивания. В Вашем случае надо записать формулу так: =D3=0
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
UDF в умных таблицах не пересчитываются автоматически, cо строкой Application.Volatile в коде пользовательской функции возникают ошибки
 
Цитата
lodman_geo написал:
можно пример
нет. Пример от Вас как раз нужен. Потому что это учитывается логикой самой функции. Мы же её не видим, следовательно и посоветовать можем только что-то обобщенное.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
UDF в умных таблицах не пересчитываются автоматически, cо строкой Application.Volatile в коде пользовательской функции возникают ошибки
 
Цитата
lodman_geo написал:
можно ли обойтись без Application.Volatile
если хотите, чтобы функции пересчитывались - нет. Хотя нет, можно. Использовать доп.параметр.  Здесь приводил подробный пример: Что такое функция пользователя(UDF)? Ищите в заголовке Обновление расчетов функции пользователя UDF(автопересчет)
Но ошибка явно не в этой строке, а в самих функциях. Вероятно, они просто не учитывают использование их в умной таблице или по некоему другому сценарию.  
Изменено: Дмитрий(The_Prist) Щербаков - 9 Дек 2019 11:50:54
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Ошибка "can't find project or library" при работе на Офис 16
 
Убедитесь в отсутствии контролов типа ActiveX. На рабочем ПК(где файл работает) сделайте следующее: в редакторе VBE -Debug -Compile VBA Project(вместо VBA Project может быть имя проекта, если оно было задано). Сохраните файл. Попробуйте запустить на другом ПК.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Отключить преобразование содержимого ячейки в дату при редактировании
 
Цитата
cuprum написал:
не помешает ли этот апостроф при дальнейших операциях с данными
смотря что именно понимать под "помешает". Ведущий апостроф дает понять Excel, что в ячейке текст. Если это не проблема - то в остальном апостроф не мешает, т.к. фактически не воспринимается как часть текста ячейки.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Неверная работа макроса отправки почты
 
Цитата
Антон91 написал:
но ничего не происходит, письмо не создается
в черновиках не пробовали смотреть? Может на момент запуска кода Outlook был не запущен и тогда письмо отображается и Outlook закрывается, никакой отправки нет. Попробуйте убрать эти строки:
Код
Set objOutlookApp = Nothing: Set objMail = Nothing
это не даст закрыться приложению Outlook и Вы увидите свое созданное письмо.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Возведение степени в степень, Степень в степени
 
Цитата
Николай Залюбовский написал:
это задание на зачет в университете.
и означает оно то, что решение надо давать в том виде, в котором оно проходилось и описано в методичке, а не в котором его дадут на форуме :)
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
удаление листов в эксель
 
Витя, здесь я бы не согласился, т.к. задача просто разбивается на две подзадачи и по сути даже на одну: правильное удаление листов. Сохранение в PDF было изначально. Т.е. сохранить в PDF только листы, отвечающие критериям, а остальные удалить. А вот зачем две темы было создавать с одной и той же задачей - вот здесь я уже не понимаю.
Код из второй темы готов выложить здесь после того, как автор определиться и здесь уже напишет что вообще все-таки надо в итоге: удалять листы с НД или удалять ячейки или еще чего там надо делать.
Изменено: Дмитрий(The_Prist) Щербаков - 6 Дек 2019 12:18:43
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Скрытие строк и столбцов по значению ячеек
 
Цитата
Ejeur написал:
чтобы открытие группировки не влияло на скрытые столбцы?
никак, если только не отказаться от группировки. Потому что группировка это тоже скрытие/отображение столбцов, объединенных в группу.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
В каком порядке отсортировано "Мое избраннное"?
 
По дате добавления в избранное
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Извлечь уникальные
 
Цитата
Jack Famous написал:
спорно, т.к. они стали дубликатами уже при вставке
не соглашусь. По идее данные должны возвращаться в том же виде, в котором были взяты. Если иное не озвучено как спец.функция инструмента. Здесь же происходит такое именно внутренними механизмами Excel-я и именно при вставке(как и было замечено), но все мы знаем, что виноват будет разработчик, т.к. должен был это учесть :) И я думаю Николай обязательно учтет в следующих обновлениях.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Формирование сводной таблицы по значениям из разных листов
 
Цитата
Max2307 написал:
Есть предложения по существу - буду рад услышать
по существу. Вы приложили пример данных и того, что хотите видеть в итоге. Но пример итогового результата не корректен и мы просто не понимаем: так должно быть или это ошибка составления? Если ошибка - то как должно быть правильно? Если Вам лень это объяснять - другим тем более лень додумывать чего-то для Вас и тратить свое время на решение задачи, которое в свете неверно представленного итога тоже окажется бесполезным. Конкретно в данном случае: Иванова в исходных данных в этой строке нет, а в итоге есть. И неясно - его надо туда как-то подставлять или его там и быть не должно?
Вот для чего тут "пререкаются". Не проще ли было просто выложить корректный пример и уже не его основе ждать решения? Это в конце концов больше Вам надо, а не форуму.
Может Вам не классическую сводную надо, а просто собрать данные из всех листов одну таблицу? С большей частью справится этот код: Как собрать данные с нескольких листов или книг?
В качестве диапазона указываете - A6, имена листов: 00*. Так данные будут собраны только с тех листов, имена которых начинаются на два нуля.
В итоге останется только добавить шапку и итоговые формулы. Что можно сделать и макросом, дописав чут-чуть код.

P.S. Забыл совсем. В коде для более правильного результата надо будет заменить эту строку:
Код
lLastrow = .Cells(1, 1).SpecialCells(xlLastCell).Row
на такую:
Код
lLastrow = .Cells(.Rows.Count, 1).End(xlUp).Row
Изменено: Дмитрий(The_Prist) Щербаков - 5 Дек 2019 08:55:35
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Связь таблицы со сводной
 
При такой постановке вопроса без макросов умная таблица сама ничего не протянет. Надо писать код, который будет вставлять нужные формулы на основе сводной.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Конвертирование .xlsx в .txt с сохранением табличной структуры
 
Использовать моноширный шрифт и добивать пробелами строки с малым кол-вом символов.
Здесь в самом конце есть готовая функция для создания такой таблицы: Вставить в письмо Outlook таблицу Excel с форматированием
Останется закинуть в текстовый файл.
Или, если надо сохранить весь лист, а не отдельную таблицу, то: Сохранить как -Форматированный текст (разделитель - пробел) (*.prn).
В дальнейшем созданный файл можно либо открывать через Блокнот либо сразу после сохранения изменить расширение с prn на txt. Файл так же будет открываться как ни в чем не бывало Блокнотом.
Изменено: Дмитрий(The_Prist) Щербаков - 4 Дек 2019 17:24:48
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 346 След.
Наверх