Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/26: Рейтинг темы: голосов - 26, средняя оценка - 4.92
0 / 0 / 0
Регистрация: 03.02.2011
Сообщений: 5
1

Как обратиться к листу, но не указывая его имени?

03.02.2011, 16:46. Показов 4755. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Подскажите, как обратиться к листу, но не указывая его имени.
т.е.

Private Sub CommandButton1_Click()
Sheets('Шаблон').copy after:=Sheets(Sheets.Count)
newdate$ = Day(Date)

как в данном случае, обращается к листу с именем 'шаблон', а мне нужо, чтобы обращался сам к себе.

Ситуация такая, что при нажатии на кнопку шаблон создает свою копию.
Нужно чтобы некоторая функция работала во всех новых листах (копиях шаблона), но работала со своим листом, а не с исходным 'шаблоном'
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.02.2011, 16:46
Ответы с готовыми решениями:

Почему нельзя обратиться к массиву, не указывая индекс его элемента
Всем привет. вот часть кода. #define N 3 int main() { char *m = {"First","Second","The...

Обращение к листу по его кодовому имени
Народ помогите пожалуйста, не могу понять как обратиться к листу по его кодовому имени через...

Как обратиться к столбцу DataGridView по его имени
Каким образом можно заполнить столбец Column1 данными из comboBox5, обратившись к столбцу по имени?...

Как обратиться к контролу типа Textbox по имени и изменить его свойства
Подскажите пожалуйста как обратиться к контролу типа Textbox по имени и изменить его свойства....

9
4134 / 2238 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
03.02.2011, 17:13 2
1) Можно обратиться к листу используя его индекс
пример : iListIndex = ActiveSheet.Index
2) Можно также использовать имя, используемое в среде об'ектов VBA (не путайте с именем листа, отображаемое на ярлычке)
пример : Лист1.Select
0
0 / 0 / 0
Регистрация: 03.02.2011
Сообщений: 5
03.02.2011, 17:22  [ТС] 3
спасибо, что откликнулись.
Но я все равно не понимаю.

Конкретно тут, что нужно исправить?

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Worksheets('Шаблон').Range('b32:m32').copy _
Destination:=Worksheets('Общая').Range('E5')
End Sub
Вместо 'шаблона' что-то написать?

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

P.S. Я никогда не замалась макросами, но вот начальство решило, что я справлюсь, но что-то не получается и все методом тыка - чаще выдает ошибки или вообще подвисает.
Буду очень признательна в помощи.
0
0 / 0 / 0
Регистрация: 03.02.2011
Сообщений: 5
03.02.2011, 17:24  [ТС] 4
да. еще одно условие - сколько будет листов в конечном варианте - не известно ( не больше 31 )
0
14 / 14 / 2
Регистрация: 23.03.2010
Сообщений: 635
03.02.2011, 17:39 5
me.Range('b32:m32').copy ... не подойдёт?
0
4134 / 2238 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
03.02.2011, 17:49 6
Если я Вас правильно понял, и это событие листа

Private Sub Worksheet_Change(ByVal Target As Excel.Range)

располагается в созданных листах, то Вам лучше использовать вот это :

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Range('b32:m32').copy Destination:=Worksheets('Общая').Range('E5')
End Sub

тоже самое, что предложил vith
0
0 / 0 / 0
Регистрация: 03.02.2011
Сообщений: 5
06.02.2011, 10:23  [ТС] 7
Что-то я опять не понимаю,
на диапозон в столбце реагирует нормально, а на строку - выдает ошибку.

Или есть различия в использовании для строк и столбцов параметров?
0
4134 / 2238 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
06.02.2011, 21:15 8
Абстрактная мысль.

Если при изменении копируется только определённый диапазон ячеек, то может быть имеет смысл, поставить условие, при котором копирование этого диапазона будет происходить только в том случае, если изменения произошли именно в нём (диапазон Range('b32:m32')) ???
0
4134 / 2238 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
08.02.2011, 01:39 9
Попробуйте использовать вот этот вариант :

Private Sub Worksheet_Change(ByVal Target As Excel.Range)

If Target.Count = 1 Then
Range('b32:m32').Copy Destination:=Worksheets('Общая').Range('E5')
End If

End Sub
0
0 / 0 / 0
Регистрация: 03.02.2011
Сообщений: 5
08.02.2011, 10:19  [ТС] 10
Все равно не получается
0
08.02.2011, 10:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.02.2011, 10:19
Помогаю со студенческими работами здесь

Обратиться к имени префаба, не зная его
Здравствуйте, На разных префабах один скрипт. На сцене появляется один из этих префабов....

Обратиться к TextBox по его строковому имени
Приветствую Есть dim s as string = "textbox1.text" значение текстового поля на форме равно...

Обратиться к объекту в обработчике его события не по имени
Всем здравствуйте. BorlandC++Builder6. Возможно ли в обработчике события объекта использовать...

Обратиться к ресурсу по имени, подставив переменную в его часть
Подскажите кто знает, можно ли данную процедуру написать без перебора вариантов оператором Case....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru