powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Не работает макрос
27 сообщений из 27, показаны все 2 страниц
Не работает макрос
    #35813128
Юрий08
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Народ, нужен ваш хелп!

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

Sub CollectInfo()

Dim iTempFileName As String 'имя поочерёдно открываемого файла
Dim WBmacros As Workbook 'Файл для вставки данных (файл с этим макросом)
Dim rgTarget As Range 'Ячека для вставки скопированных данных


Const DirLoc As String = "C:\Обработка филиалов СИА\"
iTempFileName = Dir(DirLoc & "*.xls")

Set OriWB = Workbooks.Open(Filename:=DirLoc & iTempFileName, ReadOnly:=True)

OriWB = Range("A1").CurrentRegion

Set WBmacros = ThisWorkbook.Worksheets("Все филиалы").Range("A1").CurrentRegion 'сводка по филиалам
Set rgTarget = WBmacros.Resize(1, 1).Offset(WBmacros.Rows.Counts)

OriWB.Copy rgTarget

End Sub
...
Рейтинг: 0 / 0
Не работает макрос
    #35813322
Korcar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
копируем 1-й лист из книг данные столбцов с A по H, адреса которых указаны в listbox. вставляются только значения без формул и форматирования. Вставка производится в новую книгу
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
  Dim bok As Workbook 'книга в которой собираем данные
  dim bres as Workbook 
  dim i as integer 'перебор адресов книг


  Set bok = Workbooks.Add

  for i= 0  to listbox.items.count- 1 
    Set bres = Workbooks.Open(listbox.items(i))

      bres.ActiveSheet.Range("A:H").Copy
      bok.Worksheets(i+ 1 ).Range("A1").PasteSpecial Paste:=xlPasteValues

  next i

Код особо не проверял, так что мож и не работать. Это в качестве образца
...
Рейтинг: 0 / 0
Не работает макрос
    #35813332
Korcar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а .. забыл .. нада еще вставку листов сделать в цилке, а то они могу кончится. и еще книги нада закрывать при окончании каждой итерции
...
Рейтинг: 0 / 0
Не работает макрос
    #35813471
Юрий08
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Переберать все книги мне пока не требуется. Скопировать-бы данные из той одной, которая открывается.
Вставка листов не нужна. У меня все данные копируются на один единственный лист в файл с этим макросом.

Может кто знает, что надо исправить в моем макросе, чтобы он заработал?
...
Рейтинг: 0 / 0
Не работает макрос
    #35813491
Korcar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
OriWB = Range("A1").CurrentRegion
этим Вы что хотели сказать?
...
Рейтинг: 0 / 0
Не работает макрос
    #35813560
Korcar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если нада ошибки, то:
Код: plaintext
Set rgTarget = WBmacros.Resize( 1 ,  1 ).Offset(WBmacros.Rows.Counts)
resize - это метод и у него нет свойств

нет функции Paste. после копирования вставить нада не забыть)

Желательно объявить переменную OriWB
...
Рейтинг: 0 / 0
Не работает макрос
    #35813601
Korcar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот так работает. Кнопка, нажатие которой обрабатывается, находится на листе, в который данные скопируются
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Private Sub CommandButton1_Click()
Dim iTempFileName As String 'имя поочерёдно открываемого файла
  Dim WBmacros As Workbook 'Файл для вставки данных (файл с этим макросом)
  Dim rgTarget As Range 'Ячека для вставки скопированных данных
  Dim OriWB As Workbook


Const DirLoc As String = "C:\Обработка филиалов СИА\"
iTempFileName = Dir(DirLoc & "*.xls")

Set OriWB = Workbooks.Open(Filename:=DirLoc & iTempFileName, ReadOnly:=True)

    OriWB.Worksheets("Лист 1").Range("A1:P73").Select
    Selection.Copy
    ActiveSheet.Range("A1").Select
    ActiveSheet.Paste
End Sub
копируемый диапазон, думаю, сам определить сможешь
...
Рейтинг: 0 / 0
Не работает макрос
    #35815234
Юрий08
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Korcar, спасибо!

OriWB = Range("A1").CurrentRegion
Этим хотел выделить весь диапазон в открывшемся файле)

Диапазон определю сам))

Единственное, макрос подвисает на этой записи:
OriWB.Worksheets("Лист 1").Range("A1:P73").Select

Пробавал указать название листа открываемого файла, но ничего не вышло, все равно "ран тайм эрор".
...
Рейтинг: 0 / 0
Не работает макрос
    #35815370
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Юрий08,
Во-первых,
Set OriWB = Range("A1").CurrentRegion
так как вы работаете с объектной переменной
Но OriWB это workbook, а вы передаете ему Range. Проверьте это.

OriWB.Worksheets("Лист 1")
Проверьте, что у вас корректно сформировался объект OriWB и в коллекции worksheets есть Лист 1.
Также попробуйте OriWB.Worksheets(1)
...
Рейтинг: 0 / 0
Не работает макрос
    #35818715
Korcar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Юрий08
Единственное, макрос подвисает на этой записи:
OriWB.Worksheets("Лист 1").Range("A1:P73").Select

Пробавал указать название листа открываемого файла, но ничего не вышло, все равно "ран тайм эрор".

эм ... не знаю в чем дело, еще раз проверил код, все работает, единственный момент "Лист 1" без пробела пишется (это если использовать название листа, создаваемое экселем по умолчанию)

ну, как бы подробности ошибки то напишите, а то эроры разные бывают
...
Рейтинг: 0 / 0
Не работает макрос
    #35820326
Юрий08
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Понял в чем была ошибка.

А если название листов всегда разное! Как тогда быть?
...
Рейтинг: 0 / 0
Не работает макрос
    #35820386
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Юрий08,

что за ошибка ?
...
Рейтинг: 0 / 0
Не работает макрос
    #35820478
Юрий08
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Разобрался с разными названиями листов открыемых книг. Пусть криво, зато работает))
Объясните, плиз, как сделать, чтобы выделялся весь диапазод (CurrentRegion), а не ("A1:P73")


Sub CollectInfo()

Dim iTempFileName As String 'имя поочерёдно открываемого файла
Dim OriWB As Workbook 'оригинальный файл
Dim rgFil As Range 'копируемый диапазон в открывшемся файле

Const DirLoc As String = "C:\Обработка филиалов СИА\"
iTempFileName = Dir(DirLoc & "*.xls")

Set OriWB = Workbooks.Open(Filename:=DirLoc & iTempFileName, ReadOnly:=True)

Dim shtX As Worksheet 'переменная для листа
For Each shtX In OriWB.Worksheets

OriWB.Worksheets("Лист 1").Range("A1:P73").Select

Next shtX

End Sub
...
Рейтинг: 0 / 0
Не работает макрос
    #35820523
Юрий08
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
big-duke, это был мой ответ на твой вопрос)

Проблема была в том, что имя листа открываемой книги каждый раз разное. А в макросе он должен был называться "Лист 1".
...
Рейтинг: 0 / 0
Не работает макрос
    #35820527
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так есть же worksheets(1).
...
Рейтинг: 0 / 0
Не работает макрос
    #35820534
Юрий08
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
То же мне, объяснил)))))

Что это такое, с чем его едят и куда этот worksheets(1) запихнуть?))
...
Рейтинг: 0 / 0
Не работает макрос
    #35820537
Юрий08
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Куда его следует запихнуть - понял)))

А как теперь выделить весь диапазон?
...
Рейтинг: 0 / 0
Не работает макрос
    #35820791
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Юрий08,

понятия не имею как его выделить. Что такое диапазон CurrentRegion ? Имя ?
range("currentregion").Select
...
Рейтинг: 0 / 0
Не работает макрос
    #35821145
Korcar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для определения и выделения диапазона данных:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
  Dim cl As Integer   'номер последнего столбца с данными
  Dim rw As Integer  'номер последней строки с данными
  cl = ActiveSheet.Cells.SpecialCells(xlLastCell).Column   'читаем номер последнего столбца с данными на текущем листе
  rw = ActiveSheet.Cells.SpecialCells(xlLastCell).Row  'читаем номер последней строки с данными на текущем листе
  With ActiveSheet
    .Range(.Cells( 1 ,  1 ), .Cells(rw, cl)).Select   'выделяем диапазон с ячейки A1 по последнюю диапазона данных
  End With
в твоем случае надо ActiveSheet заменить на лист, с которого ты данные копируешь.

P.S. а можно номера строки и столбца не читать, а запомнить последнюю ячейку в переменной типа object
...
Рейтинг: 0 / 0
Не работает макрос
    #35821392
Юрий08
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
big-duke

CurrentRegion - это аналог комбинации Ctrl+A (выделение неприрывного диапазона)

Set rgCountry = shtX.Range("A1").CurrentRegion - эта команда должна выделять весь диапазон (во всяком случае мне так объясняли

Set rgCountry = rgCountry.Offset(1).Resize(rgCountry.Rows.Count -1) 'а это выделение всего диапазона без заголовка.

Понятно, что в моем случае переменные другие, но смысл такой. Но что-то нифига у меня не получается так сделать
...
Рейтинг: 0 / 0
Не работает макрос
    #35821405
Юрий08
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
big-duke

Не "Ctrl+A"!!!

Ctrl+* -это и есть CurrentRegion
...
Рейтинг: 0 / 0
Не работает макрос
    #35821420
Юрий08
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всё, наконец понял, как выделить весь диапазон!!!
Вот как это будет выглядеть в моем случае.

OriWB.Worksheets(1).Range("A1").CurrentRegion.Select ' выделяется непрерывный диапазон ячеек

Всем большое спасибо за помощь и идеи по работе макроса. Буду еще обращаться:))
...
Рейтинг: 0 / 0
Не работает макрос
    #35821574
Korcar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
верите, нет, но Ctrl+* - никакой реакции.... и никаких действий Excel не производит)
...
Рейтинг: 0 / 0
Не работает макрос
    #35821650
Юрий08
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Korcar

Не может быть!

"*" на цифровой клавиатуре жмешь?
100% Ctrl*

На эту комбинацию никакой макрос, или что другое не вешал?
...
Рейтинг: 0 / 0
Не работает макрос
    #35821666
Korcar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а, да, выделяет, только как-то очень странно: если между заполненными ячейками больше 2 и более пустых ячеек, то он их не выделяет)
...
Рейтинг: 0 / 0
Не работает макрос
    #35821887
Юрий08
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для выделения непрерывного диапазона данных эта команда идеальна)
...
Рейтинг: 0 / 0
Не работает макрос
    #35822135
Юрий08
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для выделения непрерывного диапазона данных эта команда идеальна)
...
Рейтинг: 0 / 0
27 сообщений из 27, показаны все 2 страниц
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Не работает макрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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