Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Новые листы в Excel / 11 сообщений из 11, страница 1 из 1
30.06.2010, 14:55
    #36715594
Элvic
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Новые листы в Excel
Друзья, добрый день.

Подскажите, пжлст. Прописал макрос - при нажатии на кнопку данные с этого листа переносятся на другой, который вновь добавляется, при этом другой лист переименовывается из "лист1" в "график №1". Данный макрос работает для одного листа, проблема появляется, когда я пытаюсь еще раз запустить макрос. Он у меня прописан только для листа №1, когда повторно нажимаешь кнопку, добавляется лист №2 и VBA начинает ругаться. Какие изменения сделать или что нужно добавить, чтобы VBA не ругался.

p.s.: я в этом деле новичок, поэтому если возможно, опишите доступным языком.

Спасибо.
...
Рейтинг: 0 / 0
30.06.2010, 15:13
    #36715644
-O_o-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Новые листы в Excel
Элvic,
пример файла. А там тебе помогут, я тоже не особо отец
...
Рейтинг: 0 / 0
30.06.2010, 15:16
    #36715658
LETME
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Новые листы в Excel
Как вариант переименовывать не Sheets("Лист1").Name... а Sheets(2).Name...
...
Рейтинг: 0 / 0
30.06.2010, 15:24
    #36715686
Элvic
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Новые листы в Excel
LETMEКак вариант переименовывать не Sheets("Лист1").Name... а Sheets(2).Name...

Ну тогда каждый раз придется переименовывать.. Просто файл делается не для меня, а для сторонних пользователей, которым и скопировать трудно, не то что ковыряться в ВБА.
...
Рейтинг: 0 / 0
30.06.2010, 15:28
    #36715697
Элvic
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Новые листы в Excel
Вот так выглядит сам макро


Sub макрос1()

' Вывод графика на лист График №1

Range("A1:I85").Select
Selection.Copy
Sheets("График платежей").Select
Sheets.Add
Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ActiveSheet.Paste
Application.CutCopyMode = False
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Sheets("лист1").Select
Sheets("лист1").Name = "График №1"

End Sub
...
Рейтинг: 0 / 0
30.06.2010, 15:58
    #36715828
LETME
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Новые листы в Excel
...чесно говоря непонятно что нужно)
Штоп не ругался вначале вставить On Error Resume Next

ЗЫ: еще непонятно - зачем второе Selection.Copy
...
Рейтинг: 0 / 0
30.06.2010, 17:13
    #36716110
Элvic
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Новые листы в Excel
LETME...чесно говоря непонятно что нужно)
Штоп не ругался вначале вставить On Error Resume Next

ЗЫ: еще непонятно - зачем второе Selection.Copy

Я не гуру в ВБА, поэтому все делал путем записи макроса. Второе selection. copy нужно было для того, чтобы скопировать и вставить на лист только значения, так как до этого скопировались и формулы.


А в начале чего поставить On Error Resume Next?

Как видно, это макрос работает только для листа1. То есть, если я нажимаю кнопку запуска макроса, то создается новый лист ("Лист1") в книге и туда копируются нужные данные. Так вот, если я повторно нажимаю кнопку запуска макроса, то создается новый лист ("лист2") и здесь ВБА начинает ругаться, а именно:

Run-time error '9':
subscript out of range


И мне нужно, чтобы не вылетало это сообщение, при повторном запуске макроса.
...
Рейтинг: 0 / 0
30.06.2010, 20:30
    #36716454
vlth
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Новые листы в Excel
Элvic,

1. Смотрите: Вы создаёте в книге новый лист.
Excel, поскольку среди имён листов, названий типа "ЛистНомерТакой-то" нет, автоматически
присваивает ему имя "Лист1". (Был бы в книге последним "Лист3", новому листу было бы присвоено имя "Лист4").
Пока Вы не закроете и не откроете книгу вновь, при добавлении очередного листа, несмотря на переименование
предыдущего, ему будет присваиваться имя с номером, на единицу бОльшим предыдущего (до переименования).

Иначе говоря, Вы хотите выделить Лист1, а его в книге нет. Отсюда и ошибка.

2. Объясните подробно, что должен делать макрос: из опубликованного кода можно строить только предположения.
...
Рейтинг: 0 / 0
01.07.2010, 15:31
    #36718061
Элvic
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Новые листы в Excel
vlth,

Макрос должен выполнять следующее:

1. Есть исходный лист, на котором находятся ячеки с формулами.
2. На исходном листе находится настраиваемая кнопка, к которой подвязан макрос
3. При нажатии на эту кнопку должны происходить следующие дейстивия:

* все данные на исходном листе копируются;
* создается новый лист;
* скопированные данные вставляются на новый лист (при этом используется специальная вставка - ширина столбцов);
* копирутся данные на новом листе
* на том же новом листе скопированные данные вставляются в виде значений
* созданный новый лист переименовывается "График платежей1"

Все это работает, если я один раз запускаю макрос. При повторном запуске должно произойти то же самое только создается новый лист №2. Остальные действия те же. И вот этом случае вылетает сообщение об ошибке.
...
Рейтинг: 0 / 0
01.07.2010, 20:16
    #36718726
vlth
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Новые листы в Excel
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Sub макрос1()
Dim NewWS As Worksheet, ws As Worksheet, aWS() As Integer
Dim i As Integer, j As Integer
Range("A1:I85").Copy
Set NewWS = Sheets.Add
NewWS.Cells( 1 ,  1 ).PasteSpecial Paste:=xlPasteColumnWidths
NewWS.Cells( 1 ,  1 ).PasteSpecial Paste:=xlValues
Application.CutCopyMode = False
For Each ws In ThisWorkbook.Worksheets
    If ws.Name Like "График №#*" Then
        ReDim Preserve aWS(i)
        j =  0 
        Do
            j = j +  1 
        Loop While IsNumeric(Right(ws.Name, j))
        aWS(i) = Right(ws.Name, j -  1 )
        i = i +  1 
    End If
Next
If i >  0  Then i = WorksheetFunction.Max(aWS)
NewWS.Name = "График №" & CStr(i +  1 )
NewWS.Cells( 1 ,  1 ).Select
End Sub
...
Рейтинг: 0 / 0
02.07.2010, 12:06
    #36719604
Элvic
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Новые листы в Excel
vlth,

Спасибо огромное. Чуть исправил под себя и все работает.

Тема закрыта.
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Новые листы в Excel / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]