Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Использование формулы, которая обращается к вновь созданному листу
 
Добрый день уважаемые форумчане!
В таблице Excel в первом рабочем листе, который выполняет роль заглавной страницы существует макрос (за который огромное спасибо проекту planetaexcel.ru и отдельно - пользователю БМВ)
При нажатии на командную кнопку (CommandButton1) создается новый рабочий лист, название которого берется из колонки B заглавной страницы
Существует ли возможность применять функцию, в частности COUNTA(), чтобы считать кол-во записей во вновь созданном рабочем листе из диапазона G19:G57?
 
Вставить тем же макросом формулу, новое имя ему известно. Формула макросом на лист - несколько операторов:  Formula, FormulaLocal,  FormulaR1C1, ormulaR1C1Local...
Экспериментируйте

Создавать кнопки в каждой строке - затратно. Вместо них ожно использовать события листа (выделение ячейки, двойной клик)
 
существует.
тот же макрос, который создает лист, может посчитать что там в диапазоне G19:G57
(хотя сама по себе логика немного настораживает: " а что там может быть во вновь созданном листе"? (у меня в Excel вновь созданные листы пустые) а если он копируется с какого-то, то что в диапазоне G19:G57 можно посчитать листе источнике, не дожидаясь его копирования в новый лист)  
Изменено: Ігор Гончаренко - 24 Фев 2020 15:30:54
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Нет, Игорь. Как я понял, данные добавляются потом и нужна формула, которая будет считать то, что появится после работы макроса.
 
Ігор Гончаренко, Vikttur, все так и есть. Необходимо сосчитать кол-во записей в G19:G57, поскольку там после срабатывания макроса будут добавляться данные
Просто не знаю синтаксис vba настолько хорошо, чтобы добавить оператор Formula самостоятельно.
Код
Private Sub NewOrder(ByRef Caller As Range)
Set sh = ActiveSheet
Set Order = Caller.Offset(, -3)
If Order <> "" Then
    If Evaluate("isref('" & Order & "'!A1)") = False Then
        Application.ScreenUpdating = False
        Order.Offset(, 4) = 1
=>
        Sheets("образец").Copy After:=Sheets(Sheets.Count)
        With ActiveSheet
            .Name = Order
            .Range("a1") = Order
        End With
    End If
End If
sh.Activate
Application.ScreenUpdating = True
End Sub

Интуитивно я понимаю, что в оригинале кода (выше), там где символ "=>" можно добавить что-то, чтобы для текущей страницы в P3 появилась формула, COUNT, которая брала бы данные из созданного рабочего листа.
Изменено: sunnyb - 24 Фев 2020 16:14:41
 
Я же подсказку дал не для того, чтобы Вы ждали решения. Посмотреть справку, попытаться самостоятельно.
Оператору подставляется формула в текстовом виде, поэтому подойдет обычное сцепление текстов:
Код
"=COUNTA('" & Order & "'!G19:G57)"

Апострофы - на всякий случай (нужны, если имя листа состоит из нескольких слов).
 
vikttur,  Вить, не все так просто.
До создания листа формула в лучшем случае выдает ошибку, а после создания требуется ввести её повторно.
По вопросам из тем форума, личку не читаю.
 
Может быть есть возможность применить что-то наподобие VLOOKUP, для поиска рабочего листа соответствующего названию заказа из столбика "B"?
 
Поможет летучий INDIRECT (ДВССЫЛ), но это в крайнем случае.
Изменено: БМВ - 24 Фев 2020 23:11:45
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:
До создания листа формула в лучшем случае выдает ошибку
да, но ведь ▼
Цитата
sunnyb написал:
Существует ли возможность применять функцию, в частности COUNTA(), чтобы считать кол-во записей во вновь созданном рабочем листе
Цитата
sunnyb написал:
Необходимо сосчитать кол-во записей в G19:G57, поскольку там после срабатывания макроса будут добавляться данные
...и куда результат записать?
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
 
Цитата
БМВ написал: после создания требуется ввести её повторно.
Кто требует? На плаху!
А серьезно - повторный ввод не требуется... Откуда дровишки?
 
Цитата
vikttur написал:
Кто требует? На плаху!
(Модераторы шутят...  :( )
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
 
Цитата
sunnyb написал:
ТЕМА: Использование формулы, которая обращается к еще не созданному рабочему листу
нет ли тут противоречия? ▲▼
Цитата
sunnyb написал:
Существует ли возможность применять функцию, в частности COUNTA(), чтобы считать кол-во записей во вновь созданном рабочем листе
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
 
Изменил название
 
Цитата
vikttur написал:
Кто требует? На плаху!А серьезно - повторный ввод не требуется... Откуда дровишки?
Если листа нет, то нет и ссылки.
Код
Sub TEST()
    Application.DisplayAlerts = False
    Sheets(1).Range("a1").Formula = "='TTTT'!A1"
    Application.DisplayAlerts = True
    With Sheets.Add(After:=Sheets(1))
        .Name = "TTTT"
    End With
    Sheets(1).Activate
End Sub
По вопросам из тем форума, личку не читаю.
 
Но лист уже есть. Сначала создали, потом записали формулу. Тебя ввело в заблуждение предложенное ранее название темы.
 
Цитата
vikttur написал:
Тебя ввело в заблуждение предложенное ранее название темы
Да уж.
По вопросам из тем форума, личку не читаю.
 
Прошу прощения за некоректно написанную тему топика.
Цитата
Михаил Лебедев написал:
...и куда результат записать?
Рабочий лист "Список заказов" - основной.
После запуска макроса, создается новый рабочий лист, название которого - это данные ячейки B3 в "Списке заказов".
Результат формулы COUNTA(G19:G57) из области нового, созданного рабочего листа пишется в P3 рабочего листа "Список заказов".
 
Большое спасибо!! Михаил Лебедев, vikttur
Все работает, просто идеально
Код
Private Sub NewOrder(ByRef Caller As Range)
Set sh = ActiveSheet
Set Order = Caller.Offset(, -3)
If Order <> "" Then
    If Evaluate("isref('" & Order & "'!A1)") = False Then
        Application.ScreenUpdating = False
        Order.Offset(, 4) = 1
        Sheets("образец").Copy After:=Sheets(Sheets.Count)
        With ActiveSheet
            .Name = Order
            .Range("a1") = Order
        End With
    End If
End If
sh.Activate
Order.Offset(, 14).Formula = "=COUNTA('" & Order & "'!G19:G57)"
Application.ScreenUpdating = True
End Sub
Изменено: sunnyb - 25 Фев 2020 22:52:51
Страницы: 1
Читают тему (гостей: 1)
Наверх