Новости:

Форум на данный момент в стадии обновления. Если у Вас возникли проблемы со входом в свою учетную запись - просьба писать на email: info@excel-vba.ru

Главное меню

Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.

Просмотр сообщений

Темы - IgorStorm

#1
Всем привет. Сегодня несколько нестандартный вопрос, пытаюсь автоматизировать настройку сводных, застрял на проблеме - словами могу, кодом нет:
"Если хотя бы одно из значений поля сводной меньше 1 (и больше 0) тогда - формат полю  - процентный". Поля перебрать смогу, нужна подсказка как условие закодить.
#2
Всем привет. Давно не заходил. Все сам :) Тут возникла проблема, собственно вопрос в теме. Как обновить все сводные в книге знаю, но как не трогать при этом сводные из внешних источников (OLAP, MS SQL, Access)? Есть какие-то свойства отвечающие за это? Или может как-то можно на время отключить все соединения (запомнить, удалить и снова восстановить)?
#3
Всем привет. Как получить кол-во в выделении знаю. Но вот для одной задумки нужно узнать число строк в том выделении, которое остается после того, как пользователь перевел курсор с диапазона копирования (то что остается обведенным змейкой).Рекодер по нему очень мало информации дал. Только то что его можно снять строчкой  Application.CutCopyMode = False.
Намекните как это называется, дальше буду рыть сам.
#4
Всем привет. Добиваю уже свою ленту с формулами, возникла небольшая идейка - хочу создать ряд Боксов, в которые будут выводиться значения расчетов, которые происходят по событию Workbook_SheetSelectionChange (у меня там рассчитываются суммы с НДС и без НДС для текущего выделения - в боксы, чтобы удобно было копировать). Но вот проблема - editbox сам обновляться не хочет, несмотря на то, что переданная ему глобальная переменная меняется вместе с выделением, а принимает только первое переданное значение. Как победить?

Код который сейчас простой:

Public Sub EditBox(control As IRibbonControl, ByRef NDS)
   NDS = Summ1
End Sub
#5
Всем привет. Задумал тут в Ribbon создать выпадающий список своих UDF, по аналогии с родными Excel, только не знаю, как можно программно вызвать мастер функций с уже выбранной функцией (2 шаг). Гугл тоже что-то молчит, может не так спрашиваю?
#6
Всем привет, снова я  - оживляющий форум. Опять на первый взгляд простой вопрос к формулистам. Как при помощи формул можно приравнять с протягиванием значения из строки обычных ячеек строке объединенных? Файл примера вложил  - нужно чтобы первую ячейку желтой строки приравнял к ячейке содержащей значения, потом протянул формулу и соседние объединенные ячейки заполнились значениями. Сам пробовал со смещениями - бесполезно, выдает белидерду.
#7
Всем привет. Собственно вопрос в шапке темы. Хочу оставить макрос работать на эти выходные, чтобы он каждый день запускался в 7:30
Сейчас у меня стоит:

Application.OnTime TimeValue("07:30:00"), "my_Procedure"

подозреваю что нужно как-то так:


Application.OnTime TimeValue("07:30:00") + TimeSerial(24, 0, 0), "my_Procedure"

Но правильно ли подозреваю?
#8
Всем привет. Сегодня вопрос к формулистам, как можно на примере вложенного файла подставить коды из столбца 1 к надписям в столбце 8, максимально универсальным способом? Получается нужно получить НАЙТИ подстроку там (без первого символа) и там (без последних) и потом по ней ВПР-рить.  Словами могу, а формулой никак не соображу :)
#9
Всем привет. Сегодня дошла очередь поработать с refedit. Возвращает он строчки типа Лист1!$G$5:$G$15. Как из этой строчки получить G5:G15 ? Конвертацию я нашел, но она возвращает: [Книга1]Лист1!G5:G15. Как избавиться от книги и листа?
#10
Всем привет. По материалам интернета, накатал следующий макрос с некоторой модернизацией. Полезная штука, кстати. У нас на работе пользователи любят вводить формулы вида ЕСЛИОШИБКА (формула;""), чтобы в итоге получался красивый лист без ошибок, но это лишняя трата времени, на ввод обработчика, ошибки могут возникнуть, могут не возникнуть и не в каждом столбце, ну в общем понятно. Макрос обрабатывает ячейки в текущем выделении и если формула возвращает ошибку, он сам меняет ее с вида "формула" на вид ЕСЛИОШИБКА (формула;""). Но есть проблема, если пользователь от лени выделит не текущий диапазон, а несколько столбцов целиком или весь лист - макрос задумается надолго. Как в этом случае подменить Selection на UserRange? Подменять его полностью не хочется, вдруг пользователь хочет избавиться от ошибок только в конкретной области.

Сам код:

Sub ErrorEmpry2()
    Dim cl As Range
    On Error Resume Next
    For Each cl In Selection.Cells
        If cl.Errors.Item(xlEvaluateToError).Value = True Then
            clfrm = Replace(Right(cl.Formula, Len(cl.Formula) - 1), ",", ";")
            cl.FormulaLocal = "=ЕСЛИОШИБКА (" & clfrm & ";0)"
        End If
    Next
End Sub
#11
Всем привет. С началом нового периода на работе столкнулся с новыми препятствиями в своей автоматизации. Макрос который работал раньше, теперь не работает. Выскакивает след. ошибка (скрин вложил). Я так подозреваю какое-то переполнение. Раньше у меня под фильтром сводной OLAP было 22000 строк, в этом месяце более 25 т. Превышен лимит?
Странно то, что когда макрос запускаешь из среды VBA, нажатием Run - сводная обновляется без проблем. А вызов в стандартном режиме выдает эту ошибку.
#12
Всем привет. Сегодня решая проблему глобальной автоматизации столкнулся с одной проблемой. Есть у нас несколько файлов в общем доступе в которых работают чуть ли не все отделы компании, хочу их максимально автоматизировать, но без макросов не обойтись. Проблема в том, у подавляющего большинства сотрудников они отключены и открыв эти файпы/нажав в них на кнопки они не получат ожидаемого результата. Объяснять как их включать каждому проблема  - люди есть разные. Можно как-то это привязать к кнопке на листе - чтобы пользователь нажав на нее разрешил выполнение макросов. Через VBA конечно не получится, как-то глубже надо копать....
#13
Всем добрый вечер. Сегодня задумался уже наконец, над ускорением работы макросов, взаимодействующих в ячейками листа. Знаю, что вместо перебора массива в цикле можно использовать однократную загрузку в программный массив через метод Resize, но не знаю как. :) Ниже представлен код - загоняет коды товарных позиций под фильтр сводной. Писал не знаю кто, я его дописывал - слегка оптимизировал - заставив смотреть только в непустой диапазон, но чувствую что еще можно оптимизировать, заменив цикл однократной загрузкой. Прошу помочь парой строк кода)). И еще такой вопрос по ходу: почему когда я пытаюсь присвоить конечное значение переменной arr 2 в виде LastRow, excel ругается, а когда вставляю обычные цифры - все нормально?

Sub Обновление_итоговой_сводной()
LastRow = Cells(Rows.Count, 1).End(xlUp).Row
Dim arr2(1 To 20000) As Variant
    On Error Resume Next
    name1 = Selection.Cells(1, 10).PivotTable.Name
    sheet_name1 = Sheets("Выгрузка").Name
    sheet_name2 = Sheets("Список товаров").Name
  arr1 = Sheets(sheet_name2).Range("A2:A" & LastRow)
    Sheets("Выгрузка").PivotTables("СводнаяТаблица2").PivotFields( _
        "[Товары].[КорКод].[КорКод]").VisibleItemsList = Array("")
    j = 1
    For x = LBound(arr1) To UBound(arr1)
        text1 = arr1(x, 1)
        If text1 <> "" Then
            arr2(j) = "[Товары].[КорКод].&[" & text1 & "]"
        j = j + 1
        Else
        GoTo line1
        End If
    Next x
  Sheets("Выгрузка").PivotTables("СводнаяТаблица2").PivotFields( _
           "[Товары].[КорКод].[КорКод]").VisibleItemsList = Array( _
          arr2)
  Sheets("Выгрузка").PivotTables("СводнаяТаблица2").PivotCache.Refresh
End Sub
#14
Всем добрый день. Сегодня бьюсь над унификацией работы своих макросов, но так как сегодня суббота, то немного лень :) В связи с этим появился такой вопрос. Есть несколько файлов очень похожих друг на друга, но в то же время есть и отличия. Там на одном листе две сводных вместо трех, там не хватает листа, там наоборот дополнительный. Писать для каждого такого файла обработку и потом завязывать их в цепочку не слишком универсально - могут появится новые, похожие файлы. Использовать циклы перебора по листам и ячейкам можно, но не очень удобно, да и не дружу особо с этим.
Вот появилась идея - написать универсальный код - для самого сложного файла (наиболее полный), ну и один цикл по книгам. Вставить этот обработчик ошибок и если где-то будет не хватать сводной или листа в файле, макрос просто будет пропускать эти строки кода. Могут ли здесь появиться какие-то подводные камни? Такие решения в принципе стоит применять?
#15
Добрый вечер всем. Сегодня озадачился проблемой хранения некоторых значений настроек, которые заносятся с TextBox-ы пользовательских окон после выгрузки Excel. Пример - пути файлов, e-mail  b темы рассылки, время запуска макросов. После выгрузки приложения все эти заполненные значения из переменных ясное дело исчезают. Как их сохранить между запусками? Пробовал записывать на лист файла надстройки - можно, но не очень удобно. Создать где-то текстовый файл и там хранить? То же как-то....
Профи, посоветуйте удобное решение для этих случаев.
#16
Добрый вечер всем. Столкнулся в своей автоматизации с такой проблемой. На одном листе есть формулы, ссылающиеся на диапазон на другом листе. Этот диапазон должен обновляться макросом. что собственно и сделал - очищаю его,  затем туда загружаются новые данные. Но все формулы начинают возвращать !ССЫЛКА после такого обновления, несмотря на то что данные есть и в том же порядке. Вся книга считается вручную. Т.е. похоже на это пересчет не влияет. Как обойти? Можно конечно построчно со сравнением добавлять, а не полностью обновлять, но код тогда будет подлиннее и посложнее.
#17
Всем добрый вечер! Помогите решить простую задачку, а то что-то мозги под конец дня не варят. Есть книга с листами в которой заносятся листы с номерами накладных и по шаблону проводится проверка. Макрос на вставку шаблонных схем проверок написал, но что-то не могу додуматься как делать листам уникальные префиксы в конце, если по одной накладной будет несколько проверок, то будет и соответственно несколько листов и я добавляю в конце _1, _2. Например 1-034567_1, 1034567_2.

Сам додумался только до амперсанда & "_1". Но итоге получится 1-034567_1, 1-034567_1_1.

А как сделать 1-034567_1, 1-034567_2 ?

Новый лист вставляется перед предыдущим.
#18
Всем добрый вечер. Собственно макрос простой, но в тоже время очень полезный, и почему в Excel нет такой стандартной функции? У всех БД уж есть давно...Или я чего-то не знаю про Excel?

Private Sub Worksheet_SelectionChange(ByVal Target _
  As Excel.Range)
    Cells.Interior.ColorIndex = xlNone
    With ActiveCell
        .EntireRow.Interior.ColorIndex = 35
        .EntireColumn.Interior.ColorIndex = 35
    End With
End Sub


Макрос подсвечивает цветом перекрестие столбца и строки активной ячейки. Очень удобного при работе с большими числовыми массивами. Меньше ошибок, меньше напрягаешь зрение. Одна проблема - он чистит за собой все цветовые схемы на листе, а обрабатываемых файлах они присутствуют в 80% случаев.
Чем заменить? Попробовал Select - om, ой что было, бедный Excel... УФ может так выделять перекрестием без условий? Жирный шрифт....не подходит, не очень наглядно без цвета, да и есть на листе ячейки с жирным шрифтом и очистка их форматов не желательна. Подскажите решение, если оно есть.
#19
Вечер добрый всем. Сегодня столкнулся со следующей проблемой. Протягиваю формулы через VBA  в отформатированной "полосатой" таблице. Но вот беда - вместе с формулой тянутся и полоски и вся моя красивая таблица превращается в монохром. Странно то, что когда протягиваю без VBA этого не происходит. Видимо к коде есть лишняя/не хватает сроки. Хотя вроде как помню свойство получал рекодером, но там было выделение (selection).

Тяну стандартно:

Worksheets(7).Range("I10").AutoFill Destination:=Worksheets(7).Range("I10:I" & LastRow), Type:=xlFillDefault
#20
Вечер добрый. Сегодня пытаюсь решить след. проблему: как выгрузить Excel после завершения работы макросов и закрытия всех книг? Последнюю книгу я закрываю, но сам Excel остается висеть в виде пустого окна. Его вообще можно выгрузить из макроса? Помню в OpenOffice программировал, так он закрывался полностью.
Яндекс.Метрика Рейтинг@Mail.ru