Excel макрос удалить диапазон

 

требуется очистить ячейки, нашел только макрос «удалить»  

  rivate Sub CommandButton2_Click()  
Range(«B17:K500»).Delete  
End Sub  

    замена Delete -> Clean  не сработала :)))

 

KuklP

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

Попробуйте clear. Или clearcontents.

Я сам — дурнее всякого примера! …

 

Range(«B17:K500»).Select  
   Selection.ClearContents

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

Clear  
ClearContents  

  Чаще справку читайте.

 

Hugo

Пользователь

Сообщений: 23249
Регистрация: 22.12.2012

Зачем искать?  
Для этого есть макрорекордер — включаем, стираем (через Delete), выключаем, смотрим:  

     Range(«A1:A6»).Select  
   Selection.ClearContents  

      выкидываем ненужное:    
       Range(«A1:A6»).ClearContents  

  Если аналогично сделать через меню «очистить всё», то получим  
       Range(«A1:A6»).Clear

 

Формат не удаляет:  
Range(«B17:K500»).ClearContents  

  Формат удаляет:  
Range(«B17:K500»).Clear

 

формат должен оставаться.  

  всем пасибо!  

    тема клозет

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

Говорил же автору — больше нужно читать :)  

  closet — каморка  
клозет — устар. помещение для отправления естественных надобностей

 

Юрий М

Модератор

Сообщений: 60570
Регистрация: 14.09.2012

Контакты см. в профиле

#9

09.07.2012 09:52:32

{quote}{login=d-konstruktor}{date=09.07.2012 09:45}{thema=}{post}тема клозет{/post}{/quote}Клозет — помещение для отправления естественных надобностей.  
Вы хотите открыть новую тему? :-)

Программное удаление ячеек в VBA Excel со сдвигом влево или со сдвигом вверх методом Delete объекта Range. Константы XlDeleteShiftDirection.

Range.Delete – это метод, удаляющий объект Range (диапазон ячеек, одну ячейку) со сдвигом замещающих ячеек справа-налево или снизу-вверх для замены удаленных ячеек.

Синтаксис

Expression.Delete (Shift)

Expression – выражение (переменная), возвращающее объект Range.

Параметры

Параметр Описание
Shift Константа из коллекции XlDeleteShiftDirection, определяющая способ сдвига замещающих ячеек для замены удаленных ячеек.

Если параметр Shift опущен, Microsoft Excel самостоятельно выберет способ сдвига замещающих ячеек в зависимости от формы диапазона.

Константы XlDeleteShiftDirection:

Константа Значение Описание
xlShiftToLeft -4159 Замещающие ячейки сдвигаются справа-налево.
xlShiftUp -4162 Замещающие ячейки сдвигаются снизу-вверх.

Примеры

Удаление ячейки со сдвигом влево:

ActiveCell.Delete xlShiftToLeft

Range(«D4»).Delete xlShiftToLeft

Cells(6, 8).Delete xlShiftToLeft

Удаление диапазона со сдвигом вверх:

Selection.Delete xlShiftUp

Range(«E3:H9»).Delete xlShiftUp


Managing and removing named ranges in Excel can be a challenging task as you would have to do this one by one for each field. We’re going to show you how to delete named range Excel using VBA with one click.

How to delete named range Excel

Each named range is an object in the Names collection of a workbook. We can access these names using a For Each…Next loop and checking their references with the RefersToRange method. The RefersToRange method returns the reference as a Range object that we can use to find its parent worksheet.

The worksheet name a named range belongs to can be found with Name property under the Parent method. Then, using an If statement you can find the parent worksheet name.

    For Each nm In ActiveWorkbook.Names

        If nm.RefersToRange.Parent.Name = «Sheet1» Then nm.Delete

    Next nm

 

You can use codes in two ways:

  • Module
  • Immediate Window

In the Module method, you need to add the module into the workbook or the add-in file. Copy and paste the code into the module to run it. The main advantage of the module method is that it allows saving the code in the file, so that it can be used again later. Furthermore, the subroutines in modules can be used by icons in the menu ribbons or keyboard shortcuts. Remember to save your file in either XLSM or XLAM format to save your VBA code.

The Immediate Window method, on the other hand, is essentially a quick and dirty method where you can simply copy and paste the code into the Immediate Window and press the Enter key to run it. Unfortunately, any code you use in the Immediate Window will not be saved. Also note that icons and keyboard shortcuts will not be available.

Delete named ranges in a worksheet

Module method:

Sub DeleteNamedRangesInWorksheet()

    Dim nm As Name

    For Each nm In ActiveWorkbook.Names

        If nm.RefersToRange.Parent.Name = «Sheet1» Then nm.Delete

    Next nm

End Sub

 

Immediate Window method:

For Each nm In ActiveWorkbook.Names: If nm.RefersToRange.Parent.Name = "Sheet1" Then nm.Delete: Next nm

Содержание

  1. Excel макрос удалить диапазон
  2. VBA Excel. Range.Clear и другие методы очистки ячеек
  3. Методы очистки ячеек
  4. Примеры использования
  5. 6 комментариев для “VBA Excel. Range.Clear и другие методы очистки ячеек”
  6. Именованные диапазоны
  7. Excel макрос удалить диапазон

Excel макрос удалить диапазон

Раз по правилам нужно под каждый вопрос заводить тему, так и буду делать.

У меня многостраничный .xls-файл.
На первой странице («Данные») я ввожу данные заказа (пластиковые карты, по работе), включая тираж и то, по сколько карт будет в коробке.
Другая страница («Этикетки») формируется сама, собирая данные с первой.
Если тираж 1000 карт, а в коробке их будет по 250, то этикеток должно быть 4. Соответственно мне нужно удалить на странице с этикетками все строки, начиная с 6 (2,3,4,5 — этикетки, 1-заголовки для дальнейшего импорта в .txt и объединение с Индизайном).

Если бы мне всегда было нужно удалять с 6-й, я бы использовал такой код:
[vba]

Но мне надо, что бы вместо «6» бралась цифра, которая будет зависеть от тиража и высчитываться в, допустим, ячейке A2.
Взять эту цифру я могу:
[vba]

Но вот если я в верхнюю формулу вместо «6» вставлю «x», то это ошибка кода.
Подскажите, пожалуйста, что поменять в коде?

Раз по правилам нужно под каждый вопрос заводить тему, так и буду делать.

У меня многостраничный .xls-файл.
На первой странице («Данные») я ввожу данные заказа (пластиковые карты, по работе), включая тираж и то, по сколько карт будет в коробке.
Другая страница («Этикетки») формируется сама, собирая данные с первой.
Если тираж 1000 карт, а в коробке их будет по 250, то этикеток должно быть 4. Соответственно мне нужно удалить на странице с этикетками все строки, начиная с 6 (2,3,4,5 — этикетки, 1-заголовки для дальнейшего импорта в .txt и объединение с Индизайном).

Если бы мне всегда было нужно удалять с 6-й, я бы использовал такой код:
[vba]

Но мне надо, что бы вместо «6» бралась цифра, которая будет зависеть от тиража и высчитываться в, допустим, ячейке A2.
Взять эту цифру я могу:
[vba]

Но вот если я в верхнюю формулу вместо «6» вставлю «x», то это ошибка кода.
Подскажите, пожалуйста, что поменять в коде? Vadissimus

Сообщение Раз по правилам нужно под каждый вопрос заводить тему, так и буду делать.

У меня многостраничный .xls-файл.
На первой странице («Данные») я ввожу данные заказа (пластиковые карты, по работе), включая тираж и то, по сколько карт будет в коробке.
Другая страница («Этикетки») формируется сама, собирая данные с первой.
Если тираж 1000 карт, а в коробке их будет по 250, то этикеток должно быть 4. Соответственно мне нужно удалить на странице с этикетками все строки, начиная с 6 (2,3,4,5 — этикетки, 1-заголовки для дальнейшего импорта в .txt и объединение с Индизайном).

Если бы мне всегда было нужно удалять с 6-й, я бы использовал такой код:
[vba]

Но мне надо, что бы вместо «6» бралась цифра, которая будет зависеть от тиража и высчитываться в, допустим, ячейке A2.
Взять эту цифру я могу:
[vba]

Но вот если я в верхнюю формулу вместо «6» вставлю «x», то это ошибка кода.
Подскажите, пожалуйста, что поменять в коде? Автор — Vadissimus
Дата добавления — 06.03.2014 в 16:57

Источник

VBA Excel. Range.Clear и другие методы очистки ячеек

Метод Range.Clear для полной очистки диапазона ячеек из кода VBA Excel. Методы очистки отдельных свойств и их групп в ячейках. Примеры использования.

Методы очистки ячеек

Метод Очищаемые свойства Примечание
Range.Clear Почти все свойства Ширина и высота ячеек не изменяются
Range.ClearComments Комментарии Для Excel в составе Office 365
Range.ClearContents Формулы и значения Исходное форматирование сохраняется
Range.ClearFormats Свойства, задающие форматы В том числе отмена объединения ячеек
Range.ClearHyperlinks Гиперссылки Текст и форматирование сохраняются
Range.ClearNotes Примечания и заметки Примечания – для локальных программ Excel, заметки – для Excel в составе Office 365
Range.ClearOutline Структура данных Смотрите, что такое структурирование данных

Range – выражение, возвращающее диапазон ячеек.

Примеры использования

1. Удаление гиперссылки из ячейки A1
Cells(1, 1).ClearHyperlinks

2. Очистка диапазона A1:L50 от формул и значений
Range(«A1:L50»).ClearContents

3. Очистка всех свойств ячеек в столбцах A:K
Columns(«A:K»).Clear

4. Очистка форматирования ячеек в строках 1:20
Rows(«1:20»).ClearFormats

Методы очистки диапазонов ячеек в VBA Excel возвращают очищаемые свойства ячеек к значениям по умолчанию. К таким, как на вновь созданном стандартном рабочем листе. При любых методах очистки высота строк и ширина столбцов не изменяются.

Фразы для контекстного поиска: очистка ячеек, очистка ячейки, очистка формул, очистка от формул, удаление формул, очистка значений, удаление значений, очистка форматов, удаление форматирования, удаление форматов.

6 комментариев для “VBA Excel. Range.Clear и другие методы очистки ячеек”

Здравствуйте!
Есть такая проблема:
1. В отдельном модуле написана процедура, которая при запуске и вводе в inputbox данных генерирует таблицу с данными. Вот перед каждой генерацией сделал так, чтобы содержимое листа , кроме первой строки (шапки), очищалось: Thisbooks.Worksheets(«Лист3»).Range(«A2»,Cells(lastRow, lastColumn).clear

2. На первом листе у меня как бы меню управления. Там кнопка, к которой привязана эта процедура. При запуске выполнение процедуры доходит до строки с очисткой и уходит в ошибку 1004 run time error: Application-defined or object-defined error.

При этом, если эту же процедуру запускать с кнопки, или через F5, но с открытого Лист3 — все отлично выполняется!

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

Источник

Именованные диапазоны

Для чего вообще нужны именованные диапазоны? Обращение к именованному диапазону гораздо удобнее, чем прописывание адреса в формулах и VBA:

  • Предположим, что в формуле мы ссылаемся на диапазон A1:C10 (возможно даже не один раз). Для примера возьмем простую функцию СУММ(суммирует значения указанных ячеек):
    =СУММ( A1:C10 ; F1:K10 )
    Затем нам стало необходимо суммировать другие данные(скажем вместо диапазона A1:C10 в диапазоне D2:F11 ). В случае с обычным указанием диапазона нам придется искать все свои формулы и менять там адрес диапазона на новый. Но если назначить своему диапазону A1:C10 имя(к примеру ДиапазонСумм ), то в формуле ничего менять не придется — достаточно будет просто изменить ссылку на ячейки в самом имени один раз. Я привел пример с одной формулой — а что, если таких формул 10? 30?
    Примерно такая же ситуация и с использованием в кодах: указав имя диапазона один раз не придется каждый раз при изменении и перемещении этого диапазона прописывать его заново в коде.
  • Именованный диапазон не просто так называется именованным. Если взять пример выше — то отображение в формуле названия ДиапазонСумм куда нагляднее, чем A1:C10 . В сложных формулах куда проще будет ориентироваться по именам, чем по адресам. Почему удобнее: если сменить стиль отображения ссылок (подробнее про стиль), то диапазон A1:C10 будет выглядеть как-то вроде этого: R1C1:R10C3 . А если назначить имя — то оно как было ДиапазонСумм , так им и останется.
  • При вводе формулы/функции в ячейку, можно не искать нужный диапазон, а начать вводить лишь первые буквы его имени и Excel предложит его ко вводу:

    Данный метод доступен лишь в версиях Excel 2007 и выше

Как обратиться к именованному диапазону
Обращение к именованному диапазону из VBA

MsgBox Range(«ДиапазонСумм»).Address MsgBox [ДиапазонСумм].Address

Обращение к именованному диапазону в формулах/функциях

Если при указании диапазона в формуле выделить именованный диапазон, то его имя автоматически подставится в формулу вместо фактического адреса ячеек:

Ограничения, накладываемые на создание имен

  • В качестве имени диапазона не могут быть использованы словосочетания, содержащие пробел. Вместо него лучше использовать нижнее подчеркивание _ или точку: Name_1, Name.1
  • Первым символом имени должна быть буква, знак подчеркивания (_) или обратная косая черта (). Остальные символы имени могут быть буквами, цифрами, точками и знаками подчеркивания
  • Нельзя в качестве имени использовать зарезервированные в Excel константы — R, C и RC(как прописные, так и строчные). Связано с тем, что данные буквы используются самим Excel для адресации ячеек при использовании стиля ссылок R1C1 (читать подробнее про стили ссылок)
  • Нельзя давать именам названия, совпадающие с адресацией ячеек: B$100, D2(для стиля ссылок А1) или R1C1, R7(для стиля R1C1). И хотя при включенном стиле ссылок R1C1 допускается дать имени название вроде A1 или D130 — это не рекомендуется делать, т.к. если впоследствии стиль отображения ссылок для книги будет изменен — то Excel не примет такие имена и предложит их изменить. И придется изменять названия всех подобных имен. Если очень хочется — можно просто добавить нижнее подчеркивание к имени: _A1
  • Длина имени не может превышать 255 символов

Создание именованного диапазона
Способ первый
обычно при создании простого именованного диапазона я использую именно его. Выделяем ячейку или группу ячеек, имя которым хотим присвоить -щелкаем левой кнопкой мыши в окне адреса и вписываем имя, которое хотим присвоить. Жмем Enter:

Способ второй
Выделяем ячейку или группу ячеек. Жмем правую кнопку мыши для вызова контекстного меню ячеек. Выбираем пункт:

  • Excel 2007: Имя диапазона (Range Name)
  • Excel 2010: Присвоить имя (Define Name)


либо:
Жмем Ctrl + F3
либо:

  • 2007-2016 Excel : вкладка Формулы (Formulas)Диспетчер имен (Name Manager)Создать (New) (либо на той же вкладке сразу — Присвоить имя (Define Name) )
  • 2003 Excel : ВставкаИмяПрисвоить

Появляется окно создания имени

Имя (Name) — указывается имя диапазона. Необходимо учитывать ограничения для имен, которые я описывал в начале статьи.
Область (Scope) — указывается область действия создаваемого диапазона — Книга , либо Лист1 :

  • Лист1 (Sheet1) — созданный именованный диапазон будет доступен только из указанного листа. Это позволяет указать разные диапазоны для разных листов, но указав одно и тоже имя диапазона
  • Книга (Workbook) — созданный диапазон можно будет использовать из любого листа данной книги

Примечание (Comment) — здесь можно записать пометку о созданном диапазоне, например для каких целей планируется его использовать. Позже эту информацию можно будет увидеть из диспетчера имен ( Ctrl + F3 )
Диапазон (Refers to) — при данном способе создания в этом поле автоматически проставляется адрес выделенного ранее диапазона. Его можно при необходимости тут же изменить.

Изменение диапазона
Чтобы изменить имя Именованного диапазона, либо ссылку на него необходимо всего лишь вызывать диспетчер имен( Ctrl + F3 ), выбрать нужное имя и нажать кнопку Изменить (Edit. ) .
Изменить можно имя диапазона (Name) , ссылку (RefersTo) и Примечание (Comment) . Область действия (Scope) изменить нельзя, для этого придется удалить текущее имя и создать новое, с новой областью действия.

Удаление диапазона
Чтобы удалить Именованный диапазон необходимо вызывать диспетчер имен( Ctrl + F3 ), выбрать нужное имя и нажать кнопку Удалить (Delete. ) .

Так же можно создавать списки с автоматическим определением его размера. Например, если значения в списке периодически пополняются или удаляются и чтобы каждый раз не переопределять границы таких диапазонов. Такие диапазоны называют динамическими.

Статья помогла? Поделись ссылкой с друзьями!

Источник

Excel макрос удалить диапазон

Модератор форума: китин, _Boroda_

Мир MS Excel » Вопросы и решения » Вопросы по VBA » Очистить диапазон и сразу вставить данные (Макросы/Sub)

Очистить диапазон и сразу вставить данные

lopuxi Дата: Среда, 10.02.2016, 12:20 | Сообщение № 1

У меня какая задача. Есть отдельная табличка, которую я копирую, заношу ее в буфер обмена.
Далее я иду в другую книгу, и через кнопку «Вставить» вставляю данную табличку.

Используя для этого вот такой код

200?’200px’:»+(this.scrollHeight+5)+’px’);»>
NumCol = 1
While Cells(1, NumCol).Value <> «»
NumCol = NumCol + 1
Wend
NumRow = 1
While Cells(NumRow, 1).Value <> «»
NumRow = NumRow + 1
Wend

‘If MsgBox(«Очистить лист?», vbOKCancel + vbExclamation, «Очистить?») = vbOK Then: Range(Cells(2, 2), Cells(NumRow, NumCol + 3)).ClearContents
If ActiveSheet.Name = «Affinity» Then ‘ условие проверяет имя активного листа. Если оно = Affinity
Range(Cells(1, 1), Cells(NumRow, NumCol)).ClearContents ‘ чистим лист
Cells(1, 1).Select ‘ выделяем первую ячейку

On Error Resume Next
Selection.PasteSpecial Paste:=xlValues ‘ вставляем как значение
If Err Then Err.Clear: ActiveSheet.PasteSpecial Paste:=xlValues
If Err Then Err.Clear: ActiveSheet.PasteSpecial Format:=»Текст», Link:=False, DisplayAsIcon:=False
If Err Then MsgBox «Нечего вставлять или Ошибка: » & Err.Number & vbCrLf & Err.Description
End If

И все бы нечего, но при чистке диапазона, стирается все что было в буфере обмена. И вставить ничего не получается.
А диапазон старой таблицы перед вставкой новой, нужно удалить.

У меня какая задача. Есть отдельная табличка, которую я копирую, заношу ее в буфер обмена.
Далее я иду в другую книгу, и через кнопку «Вставить» вставляю данную табличку.

Используя для этого вот такой код

200?’200px’:»+(this.scrollHeight+5)+’px’);»>
NumCol = 1
While Cells(1, NumCol).Value <> «»
NumCol = NumCol + 1
Wend
NumRow = 1
While Cells(NumRow, 1).Value <> «»
NumRow = NumRow + 1
Wend

‘If MsgBox(«Очистить лист?», vbOKCancel + vbExclamation, «Очистить?») = vbOK Then: Range(Cells(2, 2), Cells(NumRow, NumCol + 3)).ClearContents
If ActiveSheet.Name = «Affinity» Then ‘ условие проверяет имя активного листа. Если оно = Affinity
Range(Cells(1, 1), Cells(NumRow, NumCol)).ClearContents ‘ чистим лист
Cells(1, 1).Select ‘ выделяем первую ячейку

On Error Resume Next
Selection.PasteSpecial Paste:=xlValues ‘ вставляем как значение
If Err Then Err.Clear: ActiveSheet.PasteSpecial Paste:=xlValues
If Err Then Err.Clear: ActiveSheet.PasteSpecial Format:=»Текст», Link:=False, DisplayAsIcon:=False
If Err Then MsgBox «Нечего вставлять или Ошибка: » & Err.Number & vbCrLf & Err.Description
End If

И все бы нечего, но при чистке диапазона, стирается все что было в буфере обмена. И вставить ничего не получается.
А диапазон старой таблицы перед вставкой новой, нужно удалить.

Сообщение Добрый день.

У меня какая задача. Есть отдельная табличка, которую я копирую, заношу ее в буфер обмена.
Далее я иду в другую книгу, и через кнопку «Вставить» вставляю данную табличку.

Используя для этого вот такой код

200?’200px’:»+(this.scrollHeight+5)+’px’);»>
NumCol = 1
While Cells(1, NumCol).Value <> «»
NumCol = NumCol + 1
Wend
NumRow = 1
While Cells(NumRow, 1).Value <> «»
NumRow = NumRow + 1
Wend

‘If MsgBox(«Очистить лист?», vbOKCancel + vbExclamation, «Очистить?») = vbOK Then: Range(Cells(2, 2), Cells(NumRow, NumCol + 3)).ClearContents
If ActiveSheet.Name = «Affinity» Then ‘ условие проверяет имя активного листа. Если оно = Affinity
Range(Cells(1, 1), Cells(NumRow, NumCol)).ClearContents ‘ чистим лист
Cells(1, 1).Select ‘ выделяем первую ячейку

On Error Resume Next
Selection.PasteSpecial Paste:=xlValues ‘ вставляем как значение
If Err Then Err.Clear: ActiveSheet.PasteSpecial Paste:=xlValues
If Err Then Err.Clear: ActiveSheet.PasteSpecial Format:=»Текст», Link:=False, DisplayAsIcon:=False
If Err Then MsgBox «Нечего вставлять или Ошибка: » & Err.Number & vbCrLf & Err.Description
End If

И все бы нечего, но при чистке диапазона, стирается все что было в буфере обмена. И вставить ничего не получается.
А диапазон старой таблицы перед вставкой новой, нужно удалить.

Спасибо. Автор — lopuxi
Дата добавления — 10.02.2016 в 12:20

mower07 Дата: Среда, 10.02.2016, 12:31 | Сообщение № 2
lopuxi Дата: Среда, 10.02.2016, 12:37 | Сообщение № 3

если даже на отдельную кнопку сделаю очистить, то из буфера обмена, все равно удаляется информация. Хотелось бы максимально упростить процесс замены таблицы.
Так то код у меня предварительно все чистить.
Вопрос, можно ли не трогать буфер обмена при чистке листа.

если даже на отдельную кнопку сделаю очистить, то из буфера обмена, все равно удаляется информация. Хотелось бы максимально упростить процесс замены таблицы.
Так то код у меня предварительно все чистить.
Вопрос, можно ли не трогать буфер обмена при чистке листа. lopuxi

если даже на отдельную кнопку сделаю очистить, то из буфера обмена, все равно удаляется информация. Хотелось бы максимально упростить процесс замены таблицы.
Так то код у меня предварительно все чистить.
Вопрос, можно ли не трогать буфер обмена при чистке листа. Автор — lopuxi
Дата добавления — 10.02.2016 в 12:37

_Boroda_ Дата: Среда, 10.02.2016, 12:45 | Сообщение № 4

200?’200px’:»+(this.scrollHeight+5)+’px’);»> Sub tt()
Application.ScreenUpdating = 0
NumCol = 1
While Cells(1, NumCol).Value <> «»
NumCol = NumCol + 1
Wend
NumRow = 1
While Cells(NumRow, 1).Value <> «»
NumRow = NumRow + 1
Wend

‘If MsgBox(«Очистить лист?», vbOKCancel + vbExclamation, «Очистить?») = vbOK Then: Range(Cells(2, 2), Cells(NumRow, NumCol + 3)).ClearContents
If ActiveSheet.Name = «Affinity» Then ‘ условие проверяет имя активного листа. Если оно = Affinity
On Error Resume Next
Cells(1, NumCol + 1).PasteSpecial Paste:=xlValues ‘ вставляем как значение
If Err Then Err.Clear: ActiveSheet.PasteSpecial Paste:=xlValues
If Err Then Err.Clear: ActiveSheet.PasteSpecial Format:=»Текст», Link:=False, DisplayAsIcon:=False
If Err Then MsgBox «Нечего вставлять или Ошибка: » & Err.Number & vbCrLf & Err.Description

Range(«A1»).Resize(, NumCol).EntireColumn.Delete ‘ чистим лист
End If
End Sub

200?’200px’:»+(this.scrollHeight+5)+’px’);»> Sub tt()
Application.ScreenUpdating = 0
NumCol = 1
While Cells(1, NumCol).Value <> «»
NumCol = NumCol + 1
Wend
NumRow = 1
While Cells(NumRow, 1).Value <> «»
NumRow = NumRow + 1
Wend

‘If MsgBox(«Очистить лист?», vbOKCancel + vbExclamation, «Очистить?») = vbOK Then: Range(Cells(2, 2), Cells(NumRow, NumCol + 3)).ClearContents
If ActiveSheet.Name = «Affinity» Then ‘ условие проверяет имя активного листа. Если оно = Affinity
On Error Resume Next
Cells(1, NumCol + 1).PasteSpecial Paste:=xlValues ‘ вставляем как значение
If Err Then Err.Clear: ActiveSheet.PasteSpecial Paste:=xlValues
If Err Then Err.Clear: ActiveSheet.PasteSpecial Format:=»Текст», Link:=False, DisplayAsIcon:=False
If Err Then MsgBox «Нечего вставлять или Ошибка: » & Err.Number & vbCrLf & Err.Description

Range(«A1»).Resize(, NumCol).EntireColumn.Delete ‘ чистим лист
End If
End Sub

Скажи мне, кудесник, любимец ба’гов.
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

Ответить

200?’200px’:»+(this.scrollHeight+5)+’px’);»> Sub tt()
Application.ScreenUpdating = 0
NumCol = 1
While Cells(1, NumCol).Value <> «»
NumCol = NumCol + 1
Wend
NumRow = 1
While Cells(NumRow, 1).Value <> «»
NumRow = NumRow + 1
Wend

‘If MsgBox(«Очистить лист?», vbOKCancel + vbExclamation, «Очистить?») = vbOK Then: Range(Cells(2, 2), Cells(NumRow, NumCol + 3)).ClearContents
If ActiveSheet.Name = «Affinity» Then ‘ условие проверяет имя активного листа. Если оно = Affinity
On Error Resume Next
Cells(1, NumCol + 1).PasteSpecial Paste:=xlValues ‘ вставляем как значение
If Err Then Err.Clear: ActiveSheet.PasteSpecial Paste:=xlValues
If Err Then Err.Clear: ActiveSheet.PasteSpecial Format:=»Текст», Link:=False, DisplayAsIcon:=False
If Err Then MsgBox «Нечего вставлять или Ошибка: » & Err.Number & vbCrLf & Err.Description

Range(«A1»).Resize(, NumCol).EntireColumn.Delete ‘ чистим лист
End If
End Sub

lopuxi Дата: Среда, 10.02.2016, 12:57 | Сообщение № 5

Идея хорошая, только у тебя он колонки удаляет, вместе со вставленной таблицей. Ну по крайней мере я у себя вставил твой код и он у меня все почикал)

И мне бы не колонки удалить надо а строки, под диапазоном, после вставки.
Excel вставленный объект выделяет, а значит знает его диапазон и последнюю строку.

Как бы мне получить эту последнюю строку что бы после нее все удалить? Есть идеи?

Идея хорошая, только у тебя он колонки удаляет, вместе со вставленной таблицей. Ну по крайней мере я у себя вставил твой код и он у меня все почикал)

И мне бы не колонки удалить надо а строки, под диапазоном, после вставки.
Excel вставленный объект выделяет, а значит знает его диапазон и последнюю строку.

Как бы мне получить эту последнюю строку что бы после нее все удалить? Есть идеи? lopuxi

О_о . и так можно было?

Идея хорошая, только у тебя он колонки удаляет, вместе со вставленной таблицей. Ну по крайней мере я у себя вставил твой код и он у меня все почикал)

И мне бы не колонки удалить надо а строки, под диапазоном, после вставки.
Excel вставленный объект выделяет, а значит знает его диапазон и последнюю строку.

Как бы мне получить эту последнюю строку что бы после нее все удалить? Есть идеи? Автор — lopuxi
Дата добавления — 10.02.2016 в 12:57

_Boroda_ Дата: Среда, 10.02.2016, 13:30 | Сообщение № 6

Ответить

lopuxi Дата: Среда, 10.02.2016, 13:55 | Сообщение № 7

Я сначала не понял вашу логику, что происходит удаление старой таблицы слева, а новая вставляется справа. И почему то он у меня не вставил таблицу справа.

Я не думал что потребуется файл, вроде казалось все легко.
Сейчас прикладываю файл.
В нем есть таблица, она может быть разной длинны.
Ее приходится заменять в книге, которая из данной таблицы черпает нужные себе данные. Всю книгу я прикладывать не стал, она по размеру сюда просто не входит.
По этому приложил конкретный лист, с кодом, таблицей и кнопкой. На соседний лист поместил копию таблицы.

Что делает пользователь, он из отдельной книги, берет эту таблицу Ctrl+C и вставляет. И тут часто возникает проблемы, что диапазон заранее не был почищен и вставляют поверх старой. Ну я и подумал сделать кнопку — чистка/вставка, сразу и то и другое делает.

Я сначала не понял вашу логику, что происходит удаление старой таблицы слева, а новая вставляется справа. И почему то он у меня не вставил таблицу справа.

Я не думал что потребуется файл, вроде казалось все легко.
Сейчас прикладываю файл.
В нем есть таблица, она может быть разной длинны.
Ее приходится заменять в книге, которая из данной таблицы черпает нужные себе данные. Всю книгу я прикладывать не стал, она по размеру сюда просто не входит.
По этому приложил конкретный лист, с кодом, таблицей и кнопкой. На соседний лист поместил копию таблицы.

Что делает пользователь, он из отдельной книги, берет эту таблицу Ctrl+C и вставляет. И тут часто возникает проблемы, что диапазон заранее не был почищен и вставляют поверх старой. Ну я и подумал сделать кнопку — чистка/вставка, сразу и то и другое делает. lopuxi

Я сначала не понял вашу логику, что происходит удаление старой таблицы слева, а новая вставляется справа. И почему то он у меня не вставил таблицу справа.

Я не думал что потребуется файл, вроде казалось все легко.
Сейчас прикладываю файл.
В нем есть таблица, она может быть разной длинны.
Ее приходится заменять в книге, которая из данной таблицы черпает нужные себе данные. Всю книгу я прикладывать не стал, она по размеру сюда просто не входит.
По этому приложил конкретный лист, с кодом, таблицей и кнопкой. На соседний лист поместил копию таблицы.

Что делает пользователь, он из отдельной книги, берет эту таблицу Ctrl+C и вставляет. И тут часто возникает проблемы, что диапазон заранее не был почищен и вставляют поверх старой. Ну я и подумал сделать кнопку — чистка/вставка, сразу и то и другое делает. Автор — lopuxi
Дата добавления — 10.02.2016 в 13:55

lopuxi Дата: Среда, 10.02.2016, 14:25 | Сообщение № 8

_Boroda_,
Спасибо большое. Насамом деле Вы навели меня на хорошую мысль показали как ее можно реализоваться.

Я сделал то что хотел.
Код выполняет то что мне нужно.
[vba]

200?’200px’:»+(this.scrollHeight+5)+’px’);»>
Option Explicit

Dim NumCol As Long, NumRow As Long, r As Long

Sub Очистить_лист()
‘Application.ScreenUpdating = 0
NumCol = 1
While Cells(1, NumCol).Value <> «»
NumCol = NumCol + 1
Wend
NumRow = 1
While Cells(NumRow, 1).Value <> «»
NumRow = NumRow + 1
Wend

‘If MsgBox(«Очистить лист?», vbOKCancel + vbExclamation, «Очистить?») = vbOK Then: Range(Cells(2, 2), Cells(NumRow, NumCol + 3)).ClearContents
If ActiveSheet.Name = «Affinity» Then ‘ условие проверяет имя активного листа. Если оно = Affinity
Cells(1, 1).Select ‘ выделяем первую ячейку

On Error Resume Next
Selection.PasteSpecial Paste:=xlValues ‘ вставляем как значение
If Err Then Err.Clear: ActiveSheet.PasteSpecial Paste:=xlValues
If Err Then Err.Clear: ActiveSheet.PasteSpecial Format:=»Текст», Link:=False, DisplayAsIcon:=False
If Err Then MsgBox «Нечего вставлять или Ошибка: » & Err.Number & vbCrLf & Err.Description

r = Selection.Rows.Count — 1
Range(Cells(r + 2, 1), Cells(NumRow, NumCol)).ClearContents ‘ чистим лист
End If
End Sub

всем спасибо большое за помощь и участие

_Boroda_,
Спасибо большое. Насамом деле Вы навели меня на хорошую мысль показали как ее можно реализоваться.

Я сделал то что хотел.
Код выполняет то что мне нужно.
[vba]

200?’200px’:»+(this.scrollHeight+5)+’px’);»>
Option Explicit

Dim NumCol As Long, NumRow As Long, r As Long

Sub Очистить_лист()
‘Application.ScreenUpdating = 0
NumCol = 1
While Cells(1, NumCol).Value <> «»
NumCol = NumCol + 1
Wend
NumRow = 1
While Cells(NumRow, 1).Value <> «»
NumRow = NumRow + 1
Wend

‘If MsgBox(«Очистить лист?», vbOKCancel + vbExclamation, «Очистить?») = vbOK Then: Range(Cells(2, 2), Cells(NumRow, NumCol + 3)).ClearContents
If ActiveSheet.Name = «Affinity» Then ‘ условие проверяет имя активного листа. Если оно = Affinity
Cells(1, 1).Select ‘ выделяем первую ячейку

On Error Resume Next
Selection.PasteSpecial Paste:=xlValues ‘ вставляем как значение
If Err Then Err.Clear: ActiveSheet.PasteSpecial Paste:=xlValues
If Err Then Err.Clear: ActiveSheet.PasteSpecial Format:=»Текст», Link:=False, DisplayAsIcon:=False
If Err Then MsgBox «Нечего вставлять или Ошибка: » & Err.Number & vbCrLf & Err.Description

r = Selection.Rows.Count — 1
Range(Cells(r + 2, 1), Cells(NumRow, NumCol)).ClearContents ‘ чистим лист
End If
End Sub

всем спасибо большое за помощь и участие lopuxi

Сообщение _Boroda_,
Спасибо большое. Насамом деле Вы навели меня на хорошую мысль показали как ее можно реализоваться.

Я сделал то что хотел.
Код выполняет то что мне нужно.
[vba]

200?’200px’:»+(this.scrollHeight+5)+’px’);»>
Option Explicit

Dim NumCol As Long, NumRow As Long, r As Long

Sub Очистить_лист()
‘Application.ScreenUpdating = 0
NumCol = 1
While Cells(1, NumCol).Value <> «»
NumCol = NumCol + 1
Wend
NumRow = 1
While Cells(NumRow, 1).Value <> «»
NumRow = NumRow + 1
Wend

‘If MsgBox(«Очистить лист?», vbOKCancel + vbExclamation, «Очистить?») = vbOK Then: Range(Cells(2, 2), Cells(NumRow, NumCol + 3)).ClearContents
If ActiveSheet.Name = «Affinity» Then ‘ условие проверяет имя активного листа. Если оно = Affinity
Cells(1, 1).Select ‘ выделяем первую ячейку

On Error Resume Next
Selection.PasteSpecial Paste:=xlValues ‘ вставляем как значение
If Err Then Err.Clear: ActiveSheet.PasteSpecial Paste:=xlValues
If Err Then Err.Clear: ActiveSheet.PasteSpecial Format:=»Текст», Link:=False, DisplayAsIcon:=False
If Err Then MsgBox «Нечего вставлять или Ошибка: » & Err.Number & vbCrLf & Err.Description

r = Selection.Rows.Count — 1
Range(Cells(r + 2, 1), Cells(NumRow, NumCol)).ClearContents ‘ чистим лист
End If
End Sub

всем спасибо большое за помощь и участие Автор — lopuxi
Дата добавления — 10.02.2016 в 14:25

Источник

Adblock
detector

Удаление именованных диапазонов.

gling

Дата: Пятница, 07.03.2014, 20:28 |
Сообщение № 1

Группа: Друзья

Ранг: Старожил

Сообщений: 2449


Репутация:

652

±

Замечаний:
0% ±


2010

Здравствуйте уважаемые Форумчане! Девушек поздравляю с наступающим праздником.
Хочу заполнить пустоту в понятии Ecxel. При копировании листа в другую книгу, именованные диапазоны тоже копируются. При разрыве связей, связи почему то, не разрываются. Вышел из положения копированием и вставкой значений в лист. Связи в формулах отсутствуют, но они остаются в именованных диапазонах. Возможно ли эти все именованные диапазоны, разом удалить. Своими попытками я определил, что необходимо для удаления, в макросе прописать имя диапазона. Вопрос 1- можно ли не обозначая имя диапазона (т.к. их несколько и все неизвестны) удалить все имена из книги или с листа.
Вопрос 2- Влияют ли именованные диапазоны на скорость обработки или объем файла.
Думаю что файл в этом случае не нужен.
Спасибо за любую информацию и помощь.
Извиняюсь. Наверно это тема скорей всего должна быть в вопросах по VBA. Просьба к Модераторам перенести.


ЯД-41001506838083

Сообщение отредактировал glingПятница, 07.03.2014, 21:21

 

Ответить

ikki

Дата: Пятница, 07.03.2014, 22:08 |
Сообщение № 2

Группа: Друзья

Ранг: Старожил

Сообщений: 1906


Репутация:

504

±

Замечаний:
0% ±


Excel 2003, 2010

1. [vba]

Код

For Each n In ThisWorkbook.Names: n.Delete: Next

[/vba]
2. да


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki

 

Ответить

gling

Дата: Пятница, 07.03.2014, 22:26 |
Сообщение № 3

Группа: Друзья

Ранг: Старожил

Сообщений: 2449


Репутация:

652

±

Замечаний:
0% ±


2010

ikki Спасибо за ответ сейчас попробую Ваше решение.


ЯД-41001506838083

Сообщение отредактировал glingПятница, 07.03.2014, 22:26

 

Ответить

ikki

Дата: Пятница, 07.03.2014, 22:38 |
Сообщение № 4

Группа: Друзья

Ранг: Старожил

Сообщений: 1906


Репутация:

504

±

Замечаний:
0% ±


Excel 2003, 2010

для удаления имён уровня листа чуть иначе, хотя принцип тот же
[vba]

Код

for each s in thisworkbook.sheets
     for each n in s.names: n.delete: next
next

[/vba]


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki

 

Ответить

gling

Дата: Пятница, 07.03.2014, 23:47 |
Сообщение № 5

Группа: Друзья

Ранг: Старожил

Сообщений: 2449


Репутация:

652

±

Замечаний:
0% ±


2010

ikki Посмотрите пожалуйста, что не так. Я в макросах не спец. Ругается на n.Delete:. При открытых обоих книгах из Отчета хочу убрать связь (точнее именные диапазоны) в книге Февраль, Макросом1.

К сообщению приложен файл:

1934008.rar
(69.0 Kb)


ЯД-41001506838083

 

Ответить

Serge_007

Дата: Суббота, 08.03.2014, 01:03 |
Сообщение № 6

Группа: Админы

Ранг: Местный житель

Сообщений: 15888


Репутация:

2623

±

Замечаний:
±


Excel 2016

Возможно ли эти все именованные диапазоны, разом удалить?

Без макросов:
1. Ctrl+F3
2. Shift+End
3. Delete
4. Enter

[p.s.]В версиях Excel ниже 2007 этот способ работать не будет[/p.s.]


ЮMoney:41001419691823 | WMR:126292472390

 

Ответить

gling

Дата: Суббота, 08.03.2014, 02:28 |
Сообщение № 7

Группа: Друзья

Ранг: Старожил

Сообщений: 2449


Репутация:

652

±

Замечаний:
0% ±


2010

Serge_007 Спасибо. Как руками это сделать я знаю. Хотел эту процедуру завязать в цикл. Готовится отчет, копия его сохраняется в другой книге, далее этот отчет распечатывается, готовится следующий отчет. Особо эти диапазоны не напрягают. Не получится не страшно. Думал может всё же есть способ стереть их с листа.


ЯД-41001506838083

 

Ответить

Michael_S

Дата: Суббота, 08.03.2014, 03:58 |
Сообщение № 8

Группа: Друзья

Ранг: Старожил

Сообщений: 2012


Репутация:

373

±

Замечаний:
0% ±


Excel2016

[vba]

Код

Sub Макрос1()
Dim n As Variant
     Windows(«Февраль.xlsx»).Activate
For Each n In ActiveWorkbook.Names:
On Error Resume Next
n.Delete:
Next
     Windows(«Отчет.xlsm»).Activate
End Sub

[/vba]

 

Ответить

gling

Дата: Суббота, 08.03.2014, 08:39 |
Сообщение № 9

Группа: Друзья

Ранг: Старожил

Сообщений: 2449


Репутация:

652

±

Замечаний:
0% ±


2010

Michael_S Спасибо! Всё сработало как надо.
Всем спасибо принявшим участие.


ЯД-41001506838083

Сообщение отредактировал glingСуббота, 08.03.2014, 08:41

 

Ответить

Понравилась статья? Поделить с друзьями:
  • Excel макрос удаление ячеек по условию
  • Excel макрос удаление строк при условии если
  • Excel макрос удаление пустых строк в столбце
  • Excel макрос удаление объектов
  • Excel макрос удаление значения ячейки