Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.10.2012, 10:33   #1
samolkz
Новичок
Джуниор
 
Регистрация: 21.10.2012
Сообщений: 8
По умолчанию Проблема с названием листов

Здравствуйте!
Не могу решить одну проблему.
Необходимо написать макрос по выполнению определенных операции для стандартизированных листов. Проблема в том что названия листов будут постоянно меняться и соответственно названия листов в коде макроса тоже должны меняться, но этого я как раз таки сделать не могу. Макрос у меня написан строго на определенное название листа, скажем листа 1.
samolkz вне форума Ответить с цитированием
Старый 21.10.2012, 10:42   #2
samolkz
Новичок
Джуниор
 
Регистрация: 21.10.2012
Сообщений: 8
По умолчанию

В идеале хотелось чтобы было так:
Имеется стандартизированные листы, скажем Лист1, Лист2, Лист3 и т.д.
Макрос работает с данными листа "Лист1". Создает новый лист. Называет его "Лист1Упрощенный". Выгружает результаты работы с данными листа "Лист1" в лист "Лист1Упрощенный" и т.д. для каждого листа.
Саму операцию с данными листа я написал, но вот чтобы эта операция работала на все листы...не могу сделать...
Проблема в том что, количество начальных листов переменное и название листов переменное.
Помогите!)
samolkz вне форума Ответить с цитированием
Старый 21.10.2012, 10:43   #3
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Сначала определитесь - как макрос будет определять нужный лист?
Можно обращаться к листу по номеру: sheets(2).activate
Можно плясать от текущего листа, например активировать следующий лист после текущего:
Код:
sheets(activesheet.index+1).activate
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 21.10.2012, 10:47   #4
samolkz
Новичок
Джуниор
 
Регистрация: 21.10.2012
Сообщений: 8
По умолчанию

Первый лист в рабочей книге будет нужным. Но название у этого листа в каждой книге будет разное
samolkz вне форума Ответить с цитированием
Старый 21.10.2012, 10:52   #5
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Не видел поста #2. Сразу нельзя было описать задачу?
Код:
Sub bb()
Dim i&
For i = Sheets.Count To 1 Step -1
    Sheets.Add(after:=Sheets(i)).Name = Sheets(i).Name & "Упрощенный"
    'теперь sheets(i+1) или activesheet - добавленный лист
    'sheets(i) - с которого выгружать
    'макрос здесь
Next
End Sub
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 21.10.2012, 10:59   #6
samolkz
Новичок
Джуниор
 
Регистрация: 21.10.2012
Сообщений: 8
По умолчанию

Казанский, ваш совет с обращением через sheets(1).activate, sheets(2).activate и т.д работает.
Теперь другой вопрос:
если у меня в рабочих книгах может быть то 15 листов, то 12, то 25 скажем. Как мне быть? Писать макрос на 25 листов? и для книги с 12 листами этот макрос будет ли работать?
samolkz вне форума Ответить с цитированием
Старый 21.10.2012, 11:04   #7
samolkz
Новичок
Джуниор
 
Регистрация: 21.10.2012
Сообщений: 8
По умолчанию

Все вопросы отпали с вашим 5 постом!
Большой Рахмет!)
samolkz вне форума Ответить с цитированием
Старый 21.10.2012, 11:47   #8
samolkz
Новичок
Джуниор
 
Регистрация: 21.10.2012
Сообщений: 8
По умолчанию

Теперь появился другой вопрос
что надо прописать чтобы с активного листа sheets(i+1) шла ссылка на ячейки листа с которого надо выгружать, т.е. листа sheets(i)
Код:
Range("M2").Select
    ActiveCell.FormulaR1C1 = _
        "=IF(RC[-1]=FALSE,ABS(Лист1!R[1]C[-11]-Лист1!RC[-11]),FALSE)"
    Range("N1").Select
    ActiveCell.FormulaR1C1 = _
        "=IF(RC[-2]=FALSE,ABS(Лист1!R[2]C[-12]-Лист1!R[1]C[-12]),FALSE)"
    Range("N1").Select
    Selection.AutoFill Destination:=Range("N1:N2"), Type:=xlFillDefault
    Range("L2").Select
samolkz вне форума Ответить с цитированием
Старый 21.10.2012, 11:48   #9
samolkz
Новичок
Джуниор
 
Регистрация: 21.10.2012
Сообщений: 8
По умолчанию

точнее что надо прописать вместо лист1! и т.д.
samolkz вне форума Ответить с цитированием
Старый 21.10.2012, 12:10   #10
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Код:
ListName = sheets(i).name
...
"=IF(RC[-1],false,ABS(" & listname & "!R[1]C[-11]-" & listname & "!RC[-11]))"
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сложение данных строк с одинаковым названием k.ibragimov Microsoft Office Excel 16 11.01.2017 16:25
Проверка на сущестование файла с названием из русских символов evgenrpo Win Api 6 10.06.2009 09:34
Проблема с названием компонентов в delphi BuT@JL Помощь студентам 16 27.03.2009 17:09
Проверить наличие листа с данным названием Sega Microsoft Office Excel 2 05.08.2008 17:18
Выгрузка в файл с динамическим названием. Квэнди БД в Delphi 0 24.06.2007 15:39