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

Страницы: 1 2 3 4 5 След.
VBA .Copy - копирование не видимых ячеек(автофильтром), Как подружить .Copy и автофильтр?
 
RAN, Ох, совсем забыл про это. Спасибо.
Не перестаю удивляться возможностям excel и VBA.
VBA .Copy - копирование не видимых ячеек(автофильтром), Как подружить .Copy и автофильтр?
 
Доброго дня, подскажите пожалуйста. Вопрос скорее к пониманию механики работы.
Хотелось бы скопировать и ставить на свое место массив А2:С5, при применении автофильтра.
Если функцией "скрыть" строку или столбец, копирование массива и вставка его на своем место происходит корректно.
Если же к строкам будет применен автофильтр начинается цирк:
- например скрыта строка №2 - копироваться будут только видимая часть массива, причем вставка пройдет именно на нужную первую строку массива, тем самым все "съедет"
-  например скрыта строка №3 - также копироваться будет только видимая часть массива, причем разбитая соответственно. При вставке появляется ошибка, что нге соответствую массивы копирования - вставки.
- например будут скрыты все строки, кроме №5 - также копироваться будет только видимая часть массива. А при вставке произойдет "автозаполнение" на все скрытые ячейки.

Что касается вставки во всех примерах - все почти логично и понятно. Копируемый массив меньше вставки - значит вставка сместиться влево-вверх. Копируемый массив раздроблен  - ошибка. Хотя почему бы не вставить по выше описанной логике?!. Копируемый массив цельно-кратно меньше массива вставки - автозаполнение.

А вот про копирование не понятно - почему удается скопировать массив из "скрытых" ячеек, и НЕ удается скопировать массив из "скрытых автофильтром"?

тест:
Код
Sub test()
Range("A2:C5").Copy
Range("A2:C5").PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
End Sub


 
Не перестаю удивляться возможностям excel и VBA.
VBA. Ошибка type mismatch при чтении словаря (Dictionary.Item)
 
Ігор Гончаренко, Спасибо, действительно так.  
Не перестаю удивляться возможностям excel и VBA.
VBA. Ошибка type mismatch при чтении словаря (Dictionary.Item)
 
Jack Famous, Спасибо, попробую конечно попозже, однако кажется, что дело в
Код
Set dicHead = CreateObject("Scripting.Dictionary")
Из предыдущей процедуры. Кажется она затирает dicHead.Item(1), когда последний раз добавляет dicHead.Item(4).
Правл ли? Если да, как быть?  - без set ругается, что словарь не объявлен. Или объявлять его в основной процедуре test?
Не перестаю удивляться возможностям excel и VBA.
VBA. Ошибка type mismatch при чтении словаря (Dictionary.Item)
 
Вновь прошу совета экспертов. Не понимаю, почему ругается на Тип, при чтении словаря. По разному попробовал и через число и через текст. В интернете один похожий случай нашел с этой ошибкой, но там все решилось изменением регистра ключа с "ФРУКТЫ" на "Фрукты". У меня в качестве ключа используется число. Подскажите пожалуйста.

Ошибка type mismatch возникает на этой(18) строке:
Код
If dicHead.Item(i)(0) = HeadMes Then
Если отобразить переменные:
Код
If dicHead.Item(1)(0) = "Ошибка2" Then
Код
Option Explicit
Dim A()
Public dic As Dictionary, dicHead As Dictionary
Public HeadCount As Long
Sub HeadMesAdd(HeadMes As String, AreMes As String, NoMes As String)
Set dicHead = CreateObject("Scripting.Dictionary")
'dicHead.CompareMode = 1
Set dic = CreateObject("Scripting.Dictionary")
'dic.CompareMode = 1
dicHead.Add HeadCount + 1, Array(HeadMes, AreMes, NoMes, 0) '1-общий заголовок, 2 - если будут сообщения, 2 - если не будет сообщений, 3 - колличество сообщений
dic.Add HeadCount + 1 & "_0", Array(HeadMes, AreMes, NoMes, "", "", "", "", "", "", "")
HeadCount = HeadCount + 1
End Sub

Sub MesAdd(HeadMes As String, HM1 As String, HM2 As String, HM3 As String, HM4 As String, HM5 As String, HM6 As String, HM7 As String, HM8 As String, HM9 As String, HM10 As String)
Dim i As Long
For i = 1 To dicHead.Count
      If dicHead.Item(i)(0) = HeadMes Then
      dicHead.Item(i)(3) = dicHead.Item(i)(3) + 1
      dic.Add i & "_" & dicHead.Item(i)(4), Array(HM1, HM2, HM3, HM4, HM5, HM6, HM7, HM8, HM9, HM10)
      Exit For
      End If
Next i
End Sub

Вся процедура начинает работу с макроса test в соседнем модуле
Не перестаю удивляться возможностям excel и VBA.
Проверить отсутствие заполнения элемента массива
 
Jack Famous, Ігор Гончаренко, Здравствуйте, и в очередной раз большое спасибо.
Код
IsEmpty(A(i, j)) 

Работает отлично!

Цитата
написал:
а вообще правильный ответ это вопрос: а как у вас обьявлен массив А?
Массив динамический, не типизированный:

Код
Dim A()

Хотел что бы отдельный макрос красиво оформлял в таблицу список сообщений для пользователя о своей работе.
Сначала столкнулся с проблемой, что справочник нельзя сортировать по ключам, что бы разделить сообщения по своим видам.
Решил данные справочника перезаписывать в двумерный массив и сразу вставлять таблицей (так должно быть быстрее, чем по строкам и по ячейкам)
Не перестаю удивляться возможностям excel и VBA.
Проверить отсутствие заполнения элемента массива
 
Доброго утра. С отсылкой к архивной теме, подскажите пожалуйста - как можно проверить отсутствие заполнения элемента массива?
Например имея двумерный массив A(i, j), и частично специально заполненный "" (ничем) и другими данными в т.ч..
Код
If A(i, j) = Empty Then msgbox "Элемент пуст" 'не подходит т.к. "" считается за Empty
If Not Not A(i, j) Then msgbox "Элемент пуст" 'Ругается на разность типов данных

Или по умолчанию, при создании массива, все его элементы = "" ?

Изменено: Shama - 02.12.2022 09:05:33
Не перестаю удивляться возможностям excel и VBA.
Изменение в коллекции объектов внутри цикла For Each, Можно ли перескочить или зациклить некоторые объекты из коллекции при выполнении цикла For Each?
 
Jack Famous, БМВ, Спасибо за комментарии.

Цитата
написал:
Что нужно - непонятно… Объясните практический смысл
Да просто хотелось понять "механику" For Each, т.е. может ли он сделать "шаг назад" или нет, можно ли повлиять на "с" по ходу работы цикла или нет.  
Да и действительно от него это и не требуется. В рабочем примере успешно применил метку, а другие практические примеры не придумал.

Цитата
написал:
If Range(c.Address).Row = 10 Then c = Range(c.Address).Offset(-1, 0) вроде это If c.Row = 10 Then c = с.Offset(-1, 0)
Дурное влияние примеров из интернета и привычка расписывать ) Спасибо.

Для себя отметил, что если возник такой вопрос - значит что то намудрил с условиями внутри цикла).
Изменено: Shama - 17.01.2022 12:28:50
Не перестаю удивляться возможностям excel и VBA.
Изменение в коллекции объектов внутри цикла For Each, Можно ли перескочить или зациклить некоторые объекты из коллекции при выполнении цикла For Each?
 
Доброго утра. Циклы For i to... или Do... можно легко зациклить или перенестись к концу цикла изменив переменную i или условие внутри него, это понятно.
А можно ли аналогично поступить с циклом по объектам For Each?
Для примера, хотелось бы зациклить ниже приведенный пример на последней 10 строке. Пример конечно же не работает(он для визуализации))). Можно ли это как то сделать или это просто не предусмотрено и нарушает саму суть этого цикла?

P.s. GoTo пришел на ум. А как нибудь еще? т.е. именно изменить переменную с ?

Код
Sub test()
Dim c As Range
For Each c In Range("A1:A10")
      If Range(c.Address).Row = 10 Then c = Range(c.Address).Offset(-1, 0)
Next c
End Sub
Изменено: Shama - 17.01.2022 09:06:02
Не перестаю удивляться возможностям excel и VBA.
Получаю разное значение при одинаковых условиях в функциях Int и Fix
 
Цитата
БМВ написал:
кстати прикольно чтоFix(cdbl(1.1234 * 10000)) = 11234  а   Fix(1.1234 * 10000) = 11233
А вот интересно, что примеры, аналогичные, ниже дают одинаковый результат. Получается преобразование cdbl() не работает? (Конечно, уже определились что лучше будет через VBA.)
Fix(66.1402 * 10000)
Fix(CDbl(66.1402 * 10000))
Изменено: Shama - 09.09.2021 11:55:39
Не перестаю удивляться возможностям excel и VBA.
Получаю разное значение при одинаковых условиях в функциях Int и Fix
 
Дмитрий(The_Prist) Щербаков, Ігор Гончаренко, Благодарю, доходчиво объяснили.
Цитата
Ігор Гончаренко написал:
сколько раз объяснялось это особенности хранения в памяти компьютера десятичных чисел
Честно не знал. Но не уверен, что не наступлю на те же "грабли" в будущем.

Цитата
Ігор Гончаренко написал:
Shama  написал:Получаю разное значение при одинаковых условиях в функциях Int и Fix
Соглашусь, звучит двояко. Однако подробно описал проблему в теме.
Не перестаю удивляться возможностям excel и VBA.
Получаю разное значение при одинаковых условиях в функциях Int и Fix
 
Дмитрий(The_Prist) Щербаков, Логика понятна, хоть и не привычна. Привык что функция работает с уже рассчитанным значением.
Но почему тогда эти примеры не портятся до расчета функции?
Fix(0.1 * 2 + 1.9)
Fix(0.25 * 4)
Fix(0.25 + 0.25 + 0.25 + 0.25)
Не перестаю удивляться возможностям excel и VBA.
Получаю разное значение при одинаковых условиях в функциях Int и Fix
 
Дмитрий(The_Prist) Щербаков, Спасибо, работает. Учту на будущее такой метод, вероятно еще пригодится.
RAN, Действительно, даже не думал, что изменения типа на Variant повлияет на результат.
БМВ, предполагал, что Cdbl работает аналогично второму варианту, но здорово уменьшает код, спасибо.
Спасибо за ответы, но кажется вопросов стало только больше)
Изменено: Shama - 09.09.2021 09:35:57
Не перестаю удивляться возможностям excel и VBA.
Получаю разное значение при одинаковых условиях в функциях Int и Fix
 
Доброго дня. Подскажите пожалуйста, почему получается разные результаты, если в первом примере число функции Fix задано расчетом, а во втором рассчитанной переменной? Аналогично ведет себя int.
Fix((1.1234 * 10000)) = 11233, почему?
Грубо говоря это проверка числа на округление до 4 знака после запятой.  
Код
Sub test1()
Dim x As Double
x = 1.1234
If (x * 10000) - Fix((x * 10000)) <> 0 Then MsgBox "Ошибка"
End Sub

Sub test2()
Dim x As Double, y As Double
x = 1.1234
y = x * 10000
If y - Fix(y) <> 0 Then MsgBox "Ошибка"
End Sub

Изменено: Shama - 09.09.2021 08:48:17
Не перестаю удивляться возможностям excel и VBA.
Как закрепить гиперссылку (чтобы при сдвиге ячеек информация не менялась)
 
(Если все такие тема осталось прежней) Столкнулся с описанной проблемой, но решил ее через диспетчер имен.
Нужно было создавать гиперссылки на места в этом же документе. Его название и структура постоянно меняется и гиперссылки(прямые на ячейки/строки/толбцы) постоянно съезжали. В диспетчере имен можно создать имя для нужного диапазона, который будет автоматически корректироваться при изменении структуры таблиц, а гиперссылка будет ссылаться на этот диапазон через присвоенное имя.

Например при добавлении столбца А на листе данные - у второй гиперссылки изменится диапазон, а у первой нет.  
Не перестаю удивляться возможностям excel и VBA.
копирование всех pdf файлов из подпапок в папку
 
Собрал себе вот такой файлик, там 2 макроса - первый получает список файлов, папок и под папок в выбранной папке, второй копирует файлы в указанную папку.
Настройки между задаются в ручном режиме в екселе после получения списка файлов. Например каждый файл можно дополнительно разместить в свою подпапку или переименовать. Второй макрос копирует все по списку. поэтому предварительно лишние строки списка нужно удалить.

Попробуйте, может понравится. В вашем случае нужно выбрать ту самую "одну папку", получить список файлов, оставить только ПДФ, и указать куда их скопировать.  
Изменено: Shama - 03.06.2021 06:32:13
Не перестаю удивляться возможностям excel и VBA.
Обновить расчет данных при изменении значения ячейки
 
Николай Ващенко, рад был помочь. Просто поэксперементировал с разными вариантами и один "выстрелил".
Цитата
Николай Ващенко написал:
Просто заводится стандартный элемент, потом в ручную вводятся параметры... (они в примере не прописаны, облегчил его).  Хочется что бы считало и оформление сразу было
Это понятно. Мой вопрос, и то что мне до сих пор не понятно - почему же выстрелил?) почему появлялась ошибка "ИМЯ!" в формуле ДВССЫЛ, когда ее прописывает макрос.

ЗЫ. Ответ на свой(глупый))) вопрос нашел. Что бы ексель понял и подсчитал формулу из макроса нужно:
1. прописывать ее на английском языке,например
Код
Range("A3") = "=INDIRECT(""A1"")"

2. или прописывать ее на другом языке, но при этом указать свойство .FormulaLocal, "на языке пользователя", например
Код
Range("A3").FormulaLocal = "=ДВССЫЛ(""A1"")"
Третьего, я так понимаю, не дано. В примере ниже ексель не поймет что такое "ДВССЫЛ" в своих базовых формулах(на английском языке). Поэтому отображаться она будет правильно, но за формулу распознана не будет:
Код
Range("A3") = "=ДВССЫЛ(""A1"")"
Изменено: Shama - 28.05.2021 11:17:00
Не перестаю удивляться возможностям excel и VBA.
Обновить расчет данных при изменении значения ячейки
 
Доброго утра. Замените "ДВССЫЛ" на "INDIRECT" и заработает.
Но можно мне тоже объяснить, в чем конкретно кроется разница между тем, когда формула вводится в ручную и когда ее вводит макрос?
Конкретно в данном примере, я так понял, формулы типа умножения и сложения обновляются сразу же без проблем, а ДВССЫЛ отпределяется как текст что ли?! и возвращает ошибку ИМЯ!
Изменено: Shama - 28.05.2021 07:06:11
Не перестаю удивляться возможностям excel и VBA.
Расчёт показателя при двух изменяемых переменных
 
На вопрос "Расчёт показателя при двух изменяемых переменных" ответы даны.
Цитата
Никита Салиев написал:  при разных входных данных по разным офисам формула считала сколько в текущий момент не хвать положительных оценок (в количестве), что показатель был на уровне 80%
Если есть проблемы с реализацией в екселе на исходных данных, то поделитесь ими. Измените конфиденциальные данные на простые другие(но рекомендую оставить общее сходство - кол.во столбцов, округление и формат чисел и т.д.). Покажите как есть и как должно быть, приложив файл пример. С него и надо было начать.  
Не перестаю удивляться возможностям excel и VBA.
Расчёт показателя при двух изменяемых переменных
 
Цитата
Теперь вопрос, какая формула позволит высчитать дополнительное количество «положительных» оценок, чтобы итоговый результат стал 80%?  
получилось вроде так Х = 4*Z + 9*Y
Где Х это кол-во положительных оценок, которое надо найти.
Z - это кол-во нейтральных оценок, которое должно быть известно
Y -  это кол-во отрицательных оценок, которое должно быть известно

ЗЫ. Формулы выше подсчитает "всего хороших оценок". "Доп.кол-во" будет результатом разницы Х и тек.кол-вом "хороших" оценок, при не изменном кол-ве "плохих" и "нейтральных", разумеется.  

Но не совсем понятно, как математика нач.школьного уровня относится к этому форуму)
Не перестаю удивляться возможностям excel и VBA.
Показать/скрыть объект, при отображении/скрытии строк /столбцов
 
Цитата
Апострофф написал:
который Вы почему то упустили?
Ну по незнанию разумеется)
Цитата
Апострофф написал:
Во вторых - события скрытия-показа столбцов Excel не рассматривает вообще.
Это конечно жаль. Спасибо за ответ.  
Не перестаю удивляться возможностям excel и VBA.
Показать/скрыть объект, при отображении/скрытии строк /столбцов
 
Доброго дня. Думаю ответ простой, но до меня что то дойти никак не может.
Хочу, что бы объект "стрелка вверх" был виден, если будут скрыты столбцы E:F и соответственно наоборот.
Подскажите пожалуйста, как правильно это записать?
Код
Private Sub Worksheet_Change()
 If Columns("E:F").EntireColumn.Hidden = True Then
      Shapes("Стрелка вверх 1").Visible = True
 Else
      Shapes("Стрелка вверх 1").Visible = False
 End If
End Sub
Не перестаю удивляться возможностям excel и VBA.
Перевод ячеек (текстов) с китайского на русский и английский
 
Цитата
Тимофеев написал: убрать бы кавычки
Точно, поспешил)

Цитата
Тимофеев написал: zh-TW - на какие еще можно поменять аргументы?
По ссылке выше указано как узнать "код языка" в  translate.google.

У меня перестало работать. Браузер жалуется на "подозрительные запросы из скрипта"(  
Не перестаю удивляться возможностям excel и VBA.
Перевод ячеек (текстов) с китайского на русский и английский
 
Зы. Это Вам спасибо, +1 интересный пример в моей копилке.
Изучал это. и далее по ссылкам https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=read&FID=8&TID=24313
Изменено: Shama - 30.04.2021 10:01:22
Не перестаю удивляться возможностям excel и VBA.
УФ даты и времени в зависимости от NOW()
 
Предлагаю так
Не перестаю удивляться возможностям excel и VBA.
Формировать отчет с помощью консолидации
 
Мне в свое время, на подобный вопрос, посоветовали использовать PQ.
Не перестаю удивляться возможностям excel и VBA.
Посчитать количество ячеек при разных условиях
 
не одной формулой конечно, но предложу вариант.

доп.- ну и по логике таблицы в долгой(требовательной к памяти) СЧЁТЕСЛИМН нет необходимости. Если массив справа, нужной глубины, заполнен - значит это в + к расчету. Возможно так только в примере, а в оригинале нужно иначе.  
Изменено: Shama - 09.03.2021 22:43:10
Не перестаю удивляться возможностям excel и VBA.
Выбрать ячейку и получить индекс цвета из другой открытой книги с помощью VBA
 
sagertso, Да не за что.
Если нужна ячейка для выбора пользователю, куда занести результат - пример во вложении.
Цитата
sagertso написал:
Повторюсь, имя книги, листов и адреса ячеек меняются. Т.е. пользователь самостоятельно должен указать книгу, лист и ячейку, из которой нужно получить индекс цвета.
Это все определяет Application.InputBox.
Не перестаю удивляться возможностям excel и VBA.
Выбрать ячейку и получить индекс цвета из другой открытой книги с помощью VBA
 
Пожалуйста, пусть выбирает.

Доп. - про значение в А1 ток щас увидел. Извиняюсь, не выспался  :sceptic: .
Изменено: Shama - 09.03.2021 11:59:49
Не перестаю удивляться возможностям excel и VBA.
Выбрать ячейку и получить индекс цвета из другой открытой книги с помощью VBA
 
sagertso, ориентировался на тему - Выбрать ячейку и получить индекс цвета из другой открытой книги с помощью VBA.
Сейчас поправлюсь.

p.s. по мне так, чем меньше пользователь зайдействован в работе, тем лучше)
Не перестаю удивляться возможностям excel и VBA.
Страницы: 1 2 3 4 5 След.
Наверх