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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 26.02.2008, 10:31   #1
Flangini
Форумчанин
 
Аватар для Flangini
 
Регистрация: 11.02.2008
Сообщений: 119
Сообщение Работа с листами

Доброго времени суток Вам!!!
Подскажите, пожалуйста, как средствами VBA скорировать только те ячейки из диапазона R3:T65536, которые оботразились на экране после выборке при помощи "автофильтра" и поместить их на соседний лист???

Последний раз редактировалось Flangini; 26.02.2008 в 10:45. Причина: Убрал лишнее слово
Flangini вне форума
Старый 26.02.2008, 11:18   #2
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Можно обрабатывать ячейки, принадлежащие пересечению диапазонов. В данном случае это Ваш диапазон и все видимые ячейки. Например:
Код:
Intersect(Range("R3:T65536"), Cells.SpecialCells(xlCellTypeVisible)).Copy Sheets(2).Range("A1")
Скопирует видимые ячейки Вашего диапазона на второй по счету лист, начиная с ячейки "А1".
Чем шире угол зрения, тем он тупее.
SAS888 вне форума
Старый 26.02.2008, 12:03   #3
Flangini
Форумчанин
 
Аватар для Flangini
 
Регистрация: 11.02.2008
Сообщений: 119
По умолчанию

Подскажите, что-то не выходит. Вот такой вот макрос:
Sub обработка()
Dim x As Object
Dim CpD, CvC1, CvC2, CvC3, b As Single
On Error Resume Next
Set x = ActiveWorkbook.Sheets("SheetName")
Set NewSheet = Worksheets.Add
NewSheet.Name = "Work"
Intersect(Range("R3:T65536"), Cells.SpecialCells(xlCellTypeVisibl e)).Copy Sheets(2).Range("R3")
Set x = Worksheets("Work")
x.Activate
CpD = WorksheetFunction.Sum(Range("A1:C65 536"))
CvC1 = WorksheetFunction.Sum(Range("A1:A65 536"))
CvC2 = WorksheetFunction.Sum(Range("B1:B65 536"))
CvC3 = WorksheetFunction.Sum(Range("C1:C65 536"))
MsgBox "CpD = " & CpD, vbInformation, "1"
MsgBox "CvC1 = " & CvC1, vbInformation, "2"
CvC1 = (CvC1 * 100) / CpD
CvC2 = (CvC2 * 100) / CpD
CvC3 = (CvC3 * 100) / CpD
MsgBox "CvC1 = " & CvC1, vbInformation, "%"
MsgBox "CvC2 = " & CvC2, vbInformation, "%"
MsgBox "CvC3 = " & CvC3, vbInformation, "%"
End Sub

Почему-то только вырезает все ячейки из диапазона R3:T65536 и всё, а на лист "Work" ничего не копирует
Flangini вне форума
Старый 26.02.2008, 12:39   #4
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Вы "намудрили" с рабочими листами. Не запутайтесь. В данном случае нужно так:
Код:
Intersect(x.Range("R3:T65536"), x.Cells.SpecialCells(xlCellTypeVisible)).Copy Sheets("Work").Range("R3")
Чем шире угол зрения, тем он тупее.
SAS888 вне форума
Старый 26.02.2008, 13:08   #5
Flangini
Форумчанин
 
Аватар для Flangini
 
Регистрация: 11.02.2008
Сообщений: 119
По умолчанию

А что именно я намудрил?
Просто после добавления Вашей строчки, ничего не происходит.
Flangini вне форума
Старый 26.02.2008, 13:40   #6
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Конечно, может это только часть Вашего макроса, но зачем Вы устанавливаете объект
Цитата:
Set x = ActiveWorkbook.Sheets("SheetName")
, затем ничего с ним не делая, переназначение
Цитата:
Set x = Worksheets("Work")
и опять ничего с ним не делаете?
Если предложенная мной строка кода
Код:
Intersect(x.Range("R3:T65536"), x.Cells.SpecialCells(xlCellTypeVisible)).Copy Sheets("Work").Range("R3")
находится именно в том месте, где Вы ее вставили, то макрос скопирует видимые ячейки из диапазона "R3:T65536" листа "SheetName" (в данном случае - x), в диапазон "R3..." листа "Work".
Чем шире угол зрения, тем он тупее.
SAS888 вне форума
Старый 26.02.2008, 13:41   #7
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Конечно, может это только часть Вашего макроса, но зачем Вы устанавливаете объект
Цитата:
Set x = ActiveWorkbook.Sheets("SheetName")
, затем ничего с ним не делая, переназначение
Цитата:
Set x = Worksheets("Work")
и опять ничего с ним не делаете?
Если предложенная мной строка кода
Код:
Intersect(x.Range("R3:T65536"), x.Cells.SpecialCells(xlCellTypeVisible)).Copy Sheets("Work").Range("R3")
находится именно в том месте, где Вы ее вставили, то макрос скопирует видимые ячейки из диапазона "R3:T65536" листа "SheetName" (в данном случае - x), в диапазон "R3..." листа "Work".
Чем шире угол зрения, тем он тупее.
SAS888 вне форума
Старый 26.02.2008, 16:45   #8
Flangini
Форумчанин
 
Аватар для Flangini
 
Регистрация: 11.02.2008
Сообщений: 119
По умолчанию

Всё я понял!!!
Всё работает, замечательно, спасибо огромное!!!
Flangini вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Excel глюкает из-за большого количества формул и связей между листами? Diva Microsoft Office Excel 1 07.08.2008 11:52
Пропала строка с листами :( SlimBr0ther Microsoft Office Excel 3 24.06.2008 17:52