Добрый день. Не получается решить следующую проблему. Подскажите пожалуйста решение... Есть определенный файл, в который необходимо занести данные из разных файлов и потом преобразовать формулы в значения. Проблема в том, что при открытии различных файлов, он делает активными их и следовательно не видит листы, на которые я ссылаюсь в основном файле, т.е. он либо считает кол-во строк в другой книге, либо выдает ошибку
Код
Set wb = GetObject(sFolder & zFiles)
'открываем книгу "Бухгалтерский баланс"
Workbooks.Open sFolder & sFiles
' Workbooks("Информация для акционеров.xlsm").Sheets(1).Activate
With wb.Worksheets("1110")
'Для страницы 1110 в файле Информация для акционеров
.Range("A2").Formula = "=""Расшифровка статьи баланса""&"" """"""&""Нематериальные активы""&""""""""&"" ""&'Информация для справки'!R[-1]C[1]&"" на ""&TEXT('Информация для справки'!RC[1],""ДД.ММ.ГГГГ"")"
.Range("B5") = a
.Range("B6") = a
.Range("B7") = a
.Range("B8") = a
.Range("B9") = a
.Range("B10") = a
.Range("B11") = a
Sheets("1110").Select
'преобразовываем формулы в таблице на листе 1110 в значение
For i = Cells(Rows.count, 1).End(xlUp).Row To 1 Step -1
If Cells(i, 1) <> "Итого" Then Cells(i, 2).Value = Cells(i, 2).Value
Next
End With
И такая же ситуация с открытием другой книги
Код
Workbooks.Open sFolder & bFiles
' Workbooks("Информация для акционеров.xlsm").Select
With wb.Worksheets("1230")
'Для страницы 1230 в файле Информация для акционеров
Worksheets("1230").Range("A3").Formula = "=""Расшифровка статьи баланса""&"" """"""&""Дебиторская задолженность""&""""""""&"" ""&'Информация для справки'!R[-2]C[1]&"" на ""&TEXT('Информация для справки'!R[-1]C[1],""ДД.ММ.ГГГГ"")"
.Range("B6") = j
.Range("B7") = j
.Range("B8") = j
.Range("B9") = j
.Range("B10") = j
.Range("B11") = j
.Range("B12") = j
'преобразовываем формулы в таблице на листе 1230 в значение
Sheets("1230").Select
For i = Cells(Rows.count, 1).End(xlUp).Row To 1 Step -1
If Cells(i, 1) <> "Итого" Then Cells(i, 2).Value = Cells(i, 2).Value
Next
End With
Klavka1993 написал: При открытии других книг макросом, оставлять активной только одну
вот задача оставить активными 2 и больше книг не решается в Еxcele никак, потому что Excel по умолчанию устроен так, что активная книга ВСЕГДА активна и она ВСЕГДА только одна ВСЕГДА активной является одна книга и от вас не требуется никаких дополнительных усилий чтобы сохранить этот порядок, более того как бы вы не старались этот порядок вы не сломаете
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
Прошу прощения, может я не правильно описала суть проблемы, но мне то и нужно оставить активной только одну книгу А именно переменную wb Не смотря на то, что я использую конструкцию With и я предполагала, что это и есть отсылка на ту книгу, где происходит работа, код все-равно переключается на книгу, которую я потом открыла
Т.е. wb - это как раз основная книга А работать он продолжает (а именно преобразовывает формулы в значения) в книге sFolder & bFiles
Klavka1993: при открытии различных файлов, он делает активными их и следовательно не видит листы, на которые я ссылаюсь в основном файле
при открытии файла, он действительно становится активным, однако, если прописывать путь полностью, то "активность" никакой роли не играет. Так, в частности, у вас есть конструкция With wb.Worksheets("1110") … End With. Всё, что внутри неё будет работать с указанной книгой (переменная wb) и листом в ней вне зависимости от того, какая книга/лист активны.
Назначить переменную можно так:
Код
Sub t()
Dim wb As WorkBook
Set wb = ActiveWorkbook ' запомнить в переменную активную книгу
Set wb = Workbooks.Open ("C:\Program Files\Пример.xlsx") ' открыть книгу и запомнить её в переменную
End Sub
Название темы:Правильное обращение к нужной книге/листу при нескольких открытых файлах
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Название темы: Правильное обращение к нужной книге/листу при нескольких открытых файлах
Спасибо, что поправили тему. А по поводу объявления переменной, мне не нужно открывать книгу wb Она уже открыта и из нее я последовательно открываю остальные книги и забираю данные Я уже выдерживаю паузу и только потом активирую нужную мне книгу (думала что эксель не успевает делать последовательно шаги, но все безуспешно...) Первую часть с with он проходит хорошо А вот на второй сбивается и уходит в тот файл, который я открыла (sFiles)
Код
Workbooks.Open sFolder & sFiles
Sleep 10000
Workbooks("Информация для акционеров.xlsm").Sheets(1).Activate
With ThisWorkbook.Worksheets("1150")
.Range("A2").Formula = "=""Расшифровка статьи баланса""&"" """"""&""Дебиторская задолженность""&""""""""&"" ""&'Информация для справки'!R[-2]C[1]&"" на ""&TEXT('Информация для справки'!R[-1]C[1],""ДД.ММ.ГГГГ"")"
.Range("B5") = a
.Range("B6") = a
.Range("B7") = a
.Range("B8") = a
.Range("B9") = a
.Range("B10") = a
.Range("B11") = a
With ThisWorkbook.Worksheets("1110")
For i = Cells(Rows.count, 1).End(xlUp).Row To 1 Step -1
If Cells(i, 1) <> "Итого" Then Cells(i, 2).Value = Cells(i, 2).Value
Next
End With
End With
Klavka1993, вы не поняли… Создайте новую тему с примером того, что нужно делать, а не вот это вот всё И не нужно цитировать ВСЁ. Цитата - для акцента на чём-то
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Sub main()
Dim sht As Worksheet
Dim sFolder$, sFiles$
'....что то тут
'Ллист на который будут записываться данные
Set sht = ThisWorkbook.Worksheets("какой то лист")
Workbooks.Open sFolder & sFiles
With sht
.[b5].Value = [b5].Value
.[b6].Value = [b5].Value
.[b7].Value = [b5].Value
.[b8].Value = [b5].Value
.[b9].Value = [b5].Value
.[b10].Value = [b5].Value
' это чтобы наверняка
.UsedRange.Value = .UsedRange.Value
End With
ActiveWorkbook.Close False
End Sub
"Все гениальное просто, а все простое гениально!!!"
Всем большое спасибо! Да, у меня действительно очень мало знаний по макросам, поэтому многое не понимаю) И конечно много лишнего в самом коде, постепенно я чищу его)
Да, листов несколько, я их задала через переменные, по совету Nordheim, И так же использовала конструкцию ниже. Теперь работает так как надо )
Если так то да, но я сомневаюсь, что в данном случае код написан в модуле листа, поэтому и создал сообщение №14, да и присвоения переменной листа, в модуле которого пишется код, никакого смысла нет.