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

Страницы: 1 2 3 4 5 6 7 След.
Вставить в формулу переменную
 
БМВ,Спасибо за замечание, исправил, но все равно не помогло.
Вставить в формулу переменную
 
Не понял, объясните пожалуйста. Что со стилем?
Вставить в формулу переменную
 
Mershik,прикладываю пример
В изначальном варианте макрос вставляет формулу ВПР со ссылко на книгу "Файл" в папке "Проверки и отчеты"
Там же в начале есть операция, которая присваивает переменной CFile путь к файлу, указанному пользователем. Как теперь вместо ссылки на конкретный файл вставить в формулу эту переменную?
Изменено: IvanMantrov - 10 сен 2020 13:59:23
Вставить в формулу переменную
 
Всем доброго дня!

Есть переменная CFile, содержащая путь к файлу и его имя. Нужно вставить ее в формулу ВПР в качестве координатов таблицы.
Пробовал так:
Код
[I2].FormulaR1C1 = "=VLOOKUP(R[-1]C[4],'" & CFile & "]Лист1'!C1:C9,9,0)"
не получается
Запуск макроса, хранящегося в другой книге (без импорта в текущую)
 
Путь прописывать научился:

Код
Application.Run "C:\Users\IMantrov\Documents\Библиотека.xlsm!Test"

но есть новая проблема. Ошибка: Не удается выполнить макрос. Возможно этот макрос отсутствует в книге или все макросы отключены.
Запуск макроса, хранящегося в другой книге (без импорта в текущую)
 
sokol92, так ведь речи об изменении самого кода нет. Есть макрос, который постоянно обновляется. Чтобы каждый раз не рассылать пользователям новую версию, в которых они начинают путаться, проще менять код в одном файле, который будет храниться в сетевой папке, а файлы у пользователей просто будут выполнять этот код. Без изменения самого кода и без его импорта. Ради этого вся затея.
Изменено: IvanMantrov - 4 июл 2020 16:28:13
Запуск макроса, хранящегося в другой книге (без импорта в текущую)
 
DANIKOLA, А в чем разница. Все равно речь об импорте. В книгу ничего не должно импортироваться, речь просто о выполнении кода, который хранится в каком-то внешнем источнике (в другой книге или в файле bas, не важно).
Запуск макроса, хранящегося в другой книге (без импорта в текущую)
 
DANIKOLA, но ведь получается импорт идет в текущую книгу. Если закрыть ее без сохранения, то и все данные, которые макрос обработал и внес в нее, пропадут.
Запуск макроса, хранящегося в другой книге (без импорта в текущую)
 
Всем привет!
Есть книга Библиотека.xlsm, в ней модуль TestModule, а в нем макрос Test()
Помогите пожалуйста прописать путь к нему чтобы можно было запустить из другой книги (скажем книги А)
Получится ли запустить, если в книге А создать макрос с кодом:
Код
Application.Run "C:\Users\IMantrov\Desktop\......" 'полностью не получается прописать путь к макросу
И параллельно возник вопрос, есть ли смысл хранить код в книге? Или лучше просто экспортировать модуль на рабочий стол например в файле .bas. Если да, то как должен выглядеть путь к нему?
Условие: если ячейка определенного цвета (градиент)
 
Всем привет! Пытаюсь макросом посчитать количество ячеек в каждой строке определенного цвета. В исходнике используется градиентная заливка.
Код получился такой:
Код
With Лист1
        lr = .Cells(.Rows.Count, 1).End(xlUp).Row
        lc = .Cells(5, .Columns.Count).End(xlToLeft).Column
        For r = 6 To lr
            i = 0
            For c = 8 To lc
                If 'здесь должно содержаться условие, что ячейка определенного цвета
                    i = i + 1
                End If
            Next
            .Cells(r, lc + 1) = i 'В конце каждой строки ставится количество ячеек с обусловленным цветом
        Next
    End With

Не зная как обозначить цвет, я попробовал макрорекодером записать процедуру фильтрации по этому цвету. Вот что вышло:
Код
ActiveSheet.ListObjects("Графики").Range.AutoFilter Field:=14, Criteria1:= _
        RGB(0, 0, 0), Operator:=xlFilterCellColor
    With ActiveSheet.ListObjects("Графики").AutoFilter.Filters(14).Criteria1
        .Pattern = xlPatternRectangularGradient
        .Gradient.RectangleLeft = 0.5
        .Gradient.RectangleRight = 0.5
        .Gradient.RectangleTop = 0.5
        .Gradient.RectangleBottom = 0.5
        .Gradient.ColorStops.Clear
    End With
    With ActiveSheet.ListObjects("Графики").AutoFilter.Filters(14).Criteria1. _
        Gradient.ColorStops.Add(0)
        .Color = 16777215
        .TintAndShade = 0
    End With
    With ActiveSheet.ListObjects("Графики").AutoFilter.Filters(14).Criteria1. _
        Gradient.ColorStops.Add(1)
        .Color = 7434613
        .TintAndShade = 0
    End With

Помогите пожалуйста на основе этого составить условие с заливкой ячейки
Фильтрация с несколькими критериями по первым символам
 
Придумал по-другому. Цикл и дополнительный столбец для фильтрации.

Код
lr = Cells(Rows.Count, 1).End(xlUp).Row
For s = 4 To lr
    If Cells(s, 4).Value Like "Перв*" Then Cells(s, 5) = "A"
    If Cells(s, 4).Value Like "Втор*" Then Cells(s, 5) = "A"
Next
[A:E].AutoFilter Field:=5, Criteria1:="A"
Изменено: IvanMantrov - 1 ноя 2019 16:10:22
Фильтрация с несколькими критериями по первым символам
 
Всем привет!
При использовании сразу польшого числа критериев фильтрации приходится прописывать их полностью, например:

Код
[A3:H3].AutoFilter Field:=4, Criteria1:=Array("Первый критерий", "Второй критерий", "Третий критерий", "Четвертый критерий"), Operator:=xlFilterValues

Но в реале они не на столько короткие как в примере. Есть ли способ вместо них использовать хотя бы первое слово или его часть?
Например вместо "Первый критерий", вносить что-то вроде "Перв*" Вариант со звездочкой вместо неопределенного количества символов в случае с фильтрацией не катит.
Копировать несколько листов в новые книги с присвоением имен
 
Всем привет! Пытаюсь перебрать несколько листов, скопировать их в новые книги и присвоить книгам имена этих листов.
Перебор работает на других задачах, с этим все хорошо. Проблема только с созданием книги и присвоением имени.
Код
Dim WsAr, i&    
WsAr = Array("СФ", "ЮФ", "МФ")
    For i = LBound(WsAr) To UBound(WsAr)
        With Worksheets(WsAr(i))
            iPath = ActiveWorkbook.Path
            newbookname = .Name
           'Сюда нужно вставить операцию по созданию новой книги с присвоением ей имени переменной newbookname
           'и сохранять ее в iPath (папка с исходной книгой)
        End With
    Next
Изменено: IvanMantrov - 1 авг 2019 16:54:00
Перебор файлов в папках
 
Спасибо!!! Оба варианта классные!
Перебор файлов в папках
 
Всем привет! Раньше для работы сразу с несколькими файлами (копирование, редактирование и т.д.) в одной папке использовал такой код:
Код
Dim abook As Workbook
    Set abook = ActiveWorkbook
    Dim daway As String, item As String
    Dim somebook As Excel.Workbook
    With Application.FileDialog(msoFileDialogFolderPicker)
        .ButtonName = "OK"
        .Title = "Выбери папку с файлами, которые надо перебрать"
        If .Show = 0 Then
            Exit Sub
        End If
        daway = .SelectedItems(1)
    End With
    item = Dir(PathName:=daway + "\*.xls*")
    Do Until item = ""
        Set somebook = Workbooks.Open(daway + "\" + item)
        'Действия с книгой
        somebook.Close
        item = Dir
    Loop
    Set somebook = Nothing

Теперь условия изменились. В целевой папке содержатся не файлы, а много папок, в каждой из которых несколько файлов, которые надо обработать. Т.е. надо перебирать папки, а потом уже файлы внутри. Вложенный цикл должен получиться. Что-то вроде for each %переменная, обозначающая папку% in daway
Помогите пожалуйста его организовать.
Доступ к части кода определенному кругу пользователей
 
Sanja,ОГОНЬ! Спасибо, работает. Не все понятно н.с. кода, но разберусь
Доступ к части кода определенному кругу пользователей
 
Цитата
IvanMantrov написал:
If slov.exists("323") Then
Т.е. тут идет проверка одного элемента? "323". А как вместо него имя компьютера подставить. Неважно какое, просто чтобы он сравнил его со списком
Доступ к части кода определенному кругу пользователей
 
skais675,Спасибо, попробую!
Доступ к части кода определенному кругу пользователей
 
Всем привет!
При написании макросов иногда выделяю отдельно операции, которые будут выполняться только на моем компьютере, например так:
Код
    Dim objNetwork As Object
    Set objNetwork = CreateObject("WScript.Network")
    ComputerName = objNetwork.ComputerName
    Set objNetwork = Nothing
    If ComputerName Like "IMANTROV-NB" Then
        'Операции для меня    
    else        
        'Операции для других пользователей
    End If

А что если нужно дать доступ нескольким пользователям. Как сформировать небольшой список из имен (4-5 шт.) и сравнивать имя пользователя с этим списком?
Изменено: IvanMantrov - 28 июн 2019 10:31:07
Произвольное количество символов в ячейке
 
Wild.Godlike,В моем случае эти символы там будут в любом случае, но спасибо, это важное уточнение!
Произвольное количество символов в ячейке
 
А ведь верно, правсимв и левсимв можно соеденить через "И":

=ЕСЛИ(И(ЛЕВСИМВ(A1;2)<>"ВИ";ПРАВСИМВ(A1;2)<>"ВИ");1;2)
Изменено: IvanMantrov - 25 июн 2019 08:36:41
Произвольное количество символов в ячейке
 
artyrH,ой, точно! ошибся! НЕ в начале и НЕ в конце
Произвольное количество символов в ячейке
 
Цитата
Wild.Godlike написал:
Ищет ВИ в ячейке,
Не совсем! Тут надо именно находить ячейки, в которых "ВИ" стоит не в начале и не в середине, а между какими-то другими числами или буквами
Произвольное количество символов в ячейке
 
Nordheim, можно, но если значение начинается с чего-то или чем-то заканчивается. А если так: *АБВ*? Т.е. критерий в середине?
Произвольное количество символов в ячейке
 
Доброго всем дня!
Как в функции ЕСЛИ задать в качестве критерия значения наподобие *АБВ, где звездочка - это любое количество любых символов.
В макросах и поиске это делается именно так, но в формулу вставить не выходит:

=ЕСЛИ(A1="*ВИ";1;0)

Цикл при переборе пропускает часть элементов
 
Ігор Гончаренко,Спасибо!
Цикл при переборе пропускает часть элементов
 
БМВ,Спасибо! Дело в смещении столбцов после удаления, да?
Цикл при переборе пропускает часть элементов
 
Доброго всем дня!
Цикл по идее должен удалять колонки, с определенными заголовками. Но по факту всегда остается несколько, хотя они удовлетворяют условиям. Полностью все удаляется только при повторном запуске макроса. Конкретно в файле примера должны удаляться вообще все колонки, но этого не происходит
Код
For cl = 1 To .UsedRange.Columns.Count
      If .Cells(1, cl).Value Like "Скидка*" Then .Cells(1, cl).EntireColumn.Delete
      If .Cells(1, cl).Value Like "*999*" Then .Cells(1, cl).EntireColumn.Delete
Next
Копирование данных из книг с определенным названием
 
Ігор Гончаренко,Спасибо!!! Похоже я все усложнил. Действительно, все гораздо проще можно сделать!
Копирование данных из книг с определенным названием
 
Добрый день!
Пытаюсь перебрать файлы в папке и копировать данные только из тех, чье имя содержит "20", например.
Код
Dim abook As Workbook
    Set abook = ActiveWorkbook
    Dim fileway As String, Objct As String
    Dim xlfile As Excel.Workbook
    With Application.FileDialog(msoFileDialogFolderPicker)
        .ButtonName = "OK"
        .Title = "Выбери папку"
        If .Show = 0 Then
            Exit Sub
        End If
        fileway = .SelectedItems(1)
    End With
    Objct = Dir(PathName:=fileway + "\*.xlsx")
    Do Until Objct = ""
        Set xlfile = Workbooks(fileway + "\" + Objct)
        nm = xlfile.Name
        If nm Like "*20*.xlsx*" Then
            lrg = abook.Sheets("Svod").Cells(Rows.Count, 1).End(xlUp).Row
            Sheets("List1").Select
            [A1].Copy abook.Sheets("Svod").Cells(lrg + 1, 1)
        End If
        xlfile.Close
        Objct = Dir
    Loop
    Set xlfile = Nothing

Вот тут:
Код
Set xlfile = Workbooks(fileway + "\" + Objct)
возникает ошибка Subscript out of range
Можно конечно сделать так:
Код
Set xlfile = Workbooks.Open(fileway + "\" + Objct)
все работает, но макрос открывает по очереди все книги, а это долго.
Подскажите, пожалуйста какой метод использовать вместо Open
Страницы: 1 2 3 4 5 6 7 След.
Наверх