Russia Пользователь Сообщений: 138 |
Добрый вечер! // P.S.Заранее спасибо за любой совет, решение. |
Johny Пользователь Сообщений: 2737 |
Я дико извиняюсь, но можно ли узнать, что вообще этот код делает? There is no knowledge that is not power |
ikki Пользователь Сообщений: 9709 |
а вот эта строка у вас нормально срабатывает? lastrow = sh.Cells(8, 5).End(xlDown).Row фрилансер Excel, VBA — контакты в профиле |
Johny Пользователь Сообщений: 2737 |
lastrow = sh.Cells(8, 5).End(xlDown).Row Что за переменная «sh»? There is no knowledge that is not power |
Russia Пользователь Сообщений: 138 |
{quote}{login=Johny}{date=05.05.2011 05:06}{thema=Re: VBA Как переключать окна/книги?}{post}Я дико извиняюсь, но можно ли узнать, что вообще этот код делает? Set wb = ThisWorkbook For Each sh In wb.Worksheets |
ikki Пользователь Сообщений: 9709 |
имхо, здесь имеем довольно дикую смесь результатов работы макрорекодера и каких-то (не очень понятных) попыток их доработки. возможно, проще озвучить саму задачу? фрилансер Excel, VBA — контакты в профиле |
Russia Пользователь Сообщений: 138 |
{quote}{login=The_Prist}{date=05.05.2011 05:25}{thema=}{post}Вот эта строка: будет работать только с активным листом. Так что если нужно закрепление областей, то активировать лист все равно придется. Блин. Хорошо. Как сделать активным этот лист? А потом другой лист из другой книги (ThisWorkbook)? |
Johny Пользователь Сообщений: 2737 |
ikki, Согласен полностью. There is no knowledge that is not power |
Johny Пользователь Сообщений: 2737 |
{quote}{login=russia}{date=05.05.2011 05:32}{thema=Re: }{post} There is no knowledge that is not power |
Russia Пользователь Сообщений: 138 |
{quote}{login=ikki}{date=05.05.2011 05:29}{thema=}{post}имхо, здесь имеем довольно дикую смесь результатов работы макрорекодера и каких-то (не очень понятных) попыток их доработки. возможно, проще озвучить саму задачу?{/post}{/quote} Задача. Мне необходимо создать Новую книгу для помещения туда результатов, переключиться на неё и заполнить в ней Шапку(действие1). Далее переключиться в книгу «This» и выполнить действие2. Результаты действия 2 занести в новую книгу. |
Russia Пользователь Сообщений: 138 |
{quote}{login=Johny}{date=05.05.2011 05:39}{thema=Re: Re: }{post}{quote}{login=russia}{date=05.05.2011 05:32}{thema=Re: }{post} |
Hugo Пользователь Сообщений: 23249 |
Так именно в этой строке ссылки на лист нет. |
Russia Пользователь Сообщений: 138 |
{quote}{login=Hugo}{date=05.05.2011 06:11}{thema=}{post}Так именно в этой строке ссылки на лист нет. |
Hugo Пользователь Сообщений: 23249 |
Ну значит недопробовали:) |
Russia Пользователь Сообщений: 138 |
{quote}{login=Hugo}{date=05.05.2011 06:21}{thema=}{post}Ну значит недопробовали:) |
Hugo Пользователь Сообщений: 23249 |
Да, там я не вникал. |
Johny Пользователь Сообщений: 2737 |
{quote}{login=russia}{date=05.05.2011 06:51}{thema=Re: } There is no knowledge that is not power |
Johny Пользователь Сообщений: 2737 |
Range(Cells(RowFind_l, 4), Cells(lastrow, 4)).Select ‘ —> Здесь почему то стопорится из-за того что не переключается There is no knowledge that is not power |
{quote}{login=Hugo}{date=05.05.2011 07:28}{thema=}{post}Да, там я не вникал. Хотел чтобы этот цикл по листам книги прошелся, поэтому написал это: Проверил — лист один только берет. |
|
Russia Пользователь Сообщений: 138 |
{quote}{login=}{date=05.05.2011 09:01}{thema=Re: }{post}{quote} |
Russia Пользователь Сообщений: 138 |
хотел написать |
Hugo Пользователь Сообщений: 23249 |
Это уже ближе. |
Russia Пользователь Сообщений: 138 |
{quote}{login=Hugo}{date=05.05.2011 09:08}{thema=}{post}Это уже ближе. |
Юрий М Модератор Сообщений: 60570 Контакты см. в профиле |
#24 05.05.2011 21:40:05 Возвращаясь к переключению между книгами: |
Microsoft Excel позволяет открывать несколько книг одновременно, но переключаться между всеми открытыми книгами непросто. Поэтому вы можете перечислить все открытые книги в списке, чтобы легко переключаться между этими книгами в Excel. В этой статье мы покажем вам, как составить список всех открытых книг для удобной навигации в Excel.
Просто перечислите все открытые книги с VBA
Составьте список всех открытых книг и легко переключитесь на книгу с помощью VBA
Составьте список всех открытых книг и легко переходите к рабочей книге с помощью замечательного инструмента
Просто перечислите все открытые книги с VBA
В этом разделе вы узнаете, как использовать код VBA для вывода списка всех открытых книг в Excel.
1. Нажмите другой + F11 , чтобы открыть Microsoft Visual Basic для приложений окно. в Microsoft Visual Basic для приложений окна, нажмите Вставить > Модули.
2. Затем скопируйте и вставьте приведенный ниже код VBA в редактор кода.
VBA: список всех открытых имен книг в Excel
Sub ListWorkbooks()
Dim Rng As Range
Dim WorkRng As Range
On Error Resume Next
xTitleId = "KutoolsforExcel"
Set WorkRng = Application.Selection
Set WorkRng = Application.InputBox("Out put to (single cell)", xTitleId, WorkRng.Address, Type: = 8)
Set WorkRng = WorkRng.Range("A1")
xNum1 = Application.Workbooks.Count
For i = 1 To xNum1
xNum2 = Application.Workbooks(i).Sheets.Count
WorkRng.Offset(i - 1, 0).Value = Application.Workbooks(i).Name
For j = 1 To xNum2
WorkRng.Offset(i - 1, j).Value = Application.Workbooks(i).Sheets(j).Name
Next
Next
End Sub
3. Запустите код VBA, нажав кнопку F5 ключ. в KutoolsforExcel диалоговом окне укажите ячейку для размещения списка книг, а затем щелкните значок OK кнопка. Смотрите скриншот:
Затем перечисляются все открытые книги с соответствующими листами.
Трудно обрабатывать код VBA? Вы можете добиться этого через третий метод с кликами.
Составьте список всех открытых книг и легко переключитесь на книгу с помощью VBA
Если вы хотите перечислить все книги, чтобы легко переключаться между ними, попробуйте использовать VBA следующим образом:
1. нажмите другой + F11 для открытия Microsoft Visual Basic для приложений окно. в Microsoft Visual Basic для приложений окна, нажмите Вставить > Модули.
2. Скопируйте и вставьте следующий код VBA в открытое окно модуля.
Код VBA: перечислить все открытые книги и перейти к книге
Sub SelectWB()
Dim xWBName As String
Dim xWb As Workbook
Dim xSelect As String
For Each xWb In Application.Workbooks
xWBName = xWBName & xWb.Name & vbCrLf
Next
xTitleId = "KutoolsforExcel"
xSelect = Application.InputBox("Enter one of the workbooks below:" & vbCrLf & xWBName, xTitleId, "", Type: = 2)
Application.Workbooks(xSelect).Activate
End Sub
3. нажмите F5 ключ для запуска кода. Потом KutoolsforExcel появится диалоговое окно со списком всех открытых книг. Если вы хотите перейти к указанной книге, введите имя этой книги в поле и нажмите кнопку OK кнопка. Смотрите скриншот:
Составьте список всех открытых книг и легко переходите к рабочей книге с помощью замечательного инструмента
Для Панель навигации of Kutools for Excel, все открытые книги будут автоматически перечислены на панели, чтобы вы могли легко перемещаться между всеми открытыми книгами. Вам просто нужно щелкнуть одну из открытых книг, и она сразу же перейдет к этой книге.
Если вы хотите получить бесплатную пробную версию (30-день) этой утилиты, пожалуйста, нажмите, чтобы загрузить это, а затем перейдите к применению операции в соответствии с указанными выше шагами.
Лучшие инструменты для работы в офисе
Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%
- Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
- Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон…
- Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны…
- Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
- Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
- Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии…
- Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
- Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF…
- Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.
Вкладка Office: интерфейс с вкладками в Office и упрощение работы
- Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
- Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
- Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!
Формулировка задачи:
Открыты 2 книги. Одна — источник данных (название всегда разное). Другая — приемник. Название всегда «Книга1». Как переключиться с источника на приемник, понятно. А вот как обратно, если неизвестно название книги? Открыты только эти две.
Код к задаче: «Переключение между книгами»
textual
Dim wb As Workbook For Each wb In Workbooks If Not wb Is ActiveWorkbook Then 'не текущая книга If wb.Windows(1).Visible Then 'не PERSONAL.XLS и др. скрытые wb.Activate GoTo 1 End If End If Next MsgBox "Другая книга не найдена", vbExclamation 1 'продолжение программы
Полезно ли:
6 голосов , оценка 4.000 из 5
Модератор:Naeel Maqsudov
-
vint
- Сообщения:37
- Зарегистрирован:19 мар 2009, 16:53
Не знаю, может вопрос глупый но я в затупе!
Есть база, при открытии книги запускается форма (их там много).
В эти формы по мере необходимости надо заносить (копировать) из различных excel документов данные . Но при активной UserForm нет никакой возможности не то что бы запустить но и даже активировать раннее открытый другой excel файл.
есть ли выход
-
EducatedFool
- Сообщения:196
- Зарегистрирован:06 апр 2008, 14:03
- Откуда:Россия, Урал
-
Контактная информация:
08 май 2009, 14:31
У формы есть свойство ShowModal
Значение этого свойства по умолчанию — TRUE
Установите это свойство в FALSE, и проблема исчезнет.
Макросы для Excel, Word, CorelDRAW. Быстро, профессионально, недорого. http://ExcelVBA.ru/
Благодарности принимаются на кошелёк WebMoney: R318574877619 и Яндекс.Деньги: 41001335672216
-
vint
- Сообщения:37
- Зарегистрирован:19 мар 2009, 16:53
08 май 2009, 14:56
Точно !!!
Спасибо большое!- не знал!!
Теперь другая проблема, появился доступ к листам самой базы- а это не хорошо.Я специально поставил на всех формах запрет закрытия по крестику и пароль который убирается со всех листов книги при открытии книги(чтобы не мешал работе макросов) и одновременном запуске главной формы а при закрытии (закрыть можно только с главной) происходит установка пароля на все листы и автозакрытие книги. Таким образом я не давал возможность юзеру попасть на листы этой базы, даже если он в момент запуска отключит макросы можно только полистать листы — пароль снят не будет. Тоесть в Вашем предложенном варианте появляется доступ к листам базы тогда когда уже пароль снят и там можно накуралесить делов тока держись — кладовщицы народ шустрый .
Наверно в таком случае мне надо подумать над другим способом защиты листов базы, чоб макрос работал а ручки нет.
-
Naeel Maqsudov
- Сообщения:2551
- Зарегистрирован:20 фев 2004, 19:17
- Откуда:Moscow, Russia
-
Контактная информация:
08 май 2009, 15:11
А как на счет скрытых листов.
На тулбаре «Элементы управления» есть кнопка «Свойства».
Стоя на листе в свойстве Visible можно установить значение 2, и тогда лист нельзя будет сделать видимым даже при помощи Формат/Лист/Показать (только из редактора VBA)
Тогда может и заморочки с паролями не понядобятся?
-
vint
- Сообщения:37
- Зарегистрирован:19 мар 2009, 16:53
08 май 2009, 19:55
Спасибо!
Мысль конешно интересная но как это сделать в моём случае?
число листов в базе колеблется в районе 200 и самое интересное их число непрерывно (в процессе работы с базой) изменяется программно, как добавляются так и удаляются, а пользователь видит только первый лист за формой которому я просто поставил зелёный фон и ярлычки от листов которые он не может активировать(поэтому он и не видит что происходит на рабочих листах). Если бы это сделать как с установкой/снятием паролей одновременно на все листы сколько бы их там не было который я использую
Код: Выделить всё
Sub ProtectAllSheets()
'защищаем все листы
Dim Sh As Worksheet
For Each Sh In ThisWorkbook.Sheets
Sh.Protect Password:="*****", Contents:=True, Scenarios:=True, UserInterfaceOnly:=True
Next
MsgBox "Все листы защищены!", vbInformation, "Защита"
End Sub
-
Naeel Maqsudov
- Сообщения:2551
- Зарегистрирован:20 фев 2004, 19:17
- Откуда:Moscow, Russia
-
Контактная информация:
08 май 2009, 23:16
Нет ничего проще
If Sh.Index>1 then Sh.Visible=2
… и спрятали всё, кроме первого
-
vint
- Сообщения:37
- Зарегистрирован:19 мар 2009, 16:53
09 май 2009, 14:00
Действительно! Что то я протупил.
но теперь другое, иногда программе надо выбрать лист (например перед загрузкой диапазона в комбобокс из 6 колонок), метод селект завершен неверно, наверно надо перед этим на время делать так Sh.Visible=-1 а потом Sh.Visible=2
Я на верном пути ? Или есть другой выход?
Большой спасибо за помощь!
-
EducatedFool
- Сообщения:196
- Зарегистрирован:06 апр 2008, 14:03
- Откуда:Россия, Урал
-
Контактная информация:
09 май 2009, 15:37
Или есть другой выход?
Для подобных задач можно придумать несколько вариантов реализации.
В данном случае, многое зависит от того, как Вы заполняете комбобокс.
Если макросом считываете значения с листа, и по-одному записываете в комбобокс, — то отображать лист не требуется.
А чтобы впредь никогда не видеть подобных сообщений:
метод селект завершен неверно
полностью откажитесь от использования методов Select и Activate в своём коде.
В 95 % случаев их использование не требуется, и только замедляет выполнение кода.
В любом случае, для записи в комбобокс использование метода Select не требуется.
Макросы для Excel, Word, CorelDRAW. Быстро, профессионально, недорого. http://ExcelVBA.ru/
Благодарности принимаются на кошелёк WebMoney: R318574877619 и Яндекс.Деньги: 41001335672216
-
vint
- Сообщения:37
- Зарегистрирован:19 мар 2009, 16:53
09 май 2009, 19:51
Комбобокс из 6 столбцов заполняется методом RowSource, вот например один из кусков кода чтоб на пальцах не объяснять
Код: Выделить всё
Dim posstr As Variant 'переменная для непустого диапазона данных от А1 до F-неизвестно
iRow21 = 1 'начальная строка поиска
iRow22 = 1 'начальная строка если пустая 1-ая строка
While (Application.ActiveWorkbook.Worksheets("ТМЦ").Range("A" & iRow21).Value <> "")
iRow21 = iRow21 + 1
iRow22 = iRow21 'нашли первую пустую строку
Wend 'значит последняя непустая строка на 1 меньше
iRow23 = iRow22 - 1 'вот она последняя непустая строка для раннее F-неизвестного
posstr = "A1" & ":" & _
Application.ActiveWorkbook.Worksheets("ТМЦ").Range("F" & iRow23).Address(False, False)
cmbNaim2.ColumnCount = 6 'загружаем 6 колонок для комбобокс
'Worksheets("ТМЦ").Select 'активируем необходимый лист перед загрузкой в комбобокс
cmbNaim2.RowSource = posstr 'загружаем комбобокс согласно полученной переменной
Worksheets("База").Select 'возврат на 1-ый лист
и если законспектировать селект как в коде , то соответственно он находит нужные данные а загружает этот диапазон с пустого не скрытого листа «База» и в итоге комба содержит около 200 пустых строк.
Я с Вами полностью согласен
Код: Выделить всё
полностью откажитесь от использования методов Select и Activate
всегда пытаюсь исключать подобное ( это сильно тормозит работу кода) но в данном случае я не знаю как поступить
и вот тут тоже
Код: Выделить всё
'сортируем лист "КР" по колонке "C" с ФИО
Worksheets("КР").Activate
Columns("A:A").Select
Range("A1:IV5000").Sort Key1:=Range("C1"), Order1:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("A1").Select 'эстетические операции
Worksheets("База").Activate 'эстетические операции
-
EducatedFool
- Сообщения:196
- Зарегистрирован:06 апр 2008, 14:03
- Откуда:Россия, Урал
- Контактная информация:
09 май 2009, 23:03
Код: Выделить всё
Private Sub UserForm_Initialize()
cmbNaim2.ColumnCount = 6
With Worksheets("ТМЦ")
Dim ra As Range: Set ra = .Range(.[a1], .Range("A" & .Rows.Count).End(xlUp)).Resize(, 6)
[B]Me.cmbNaim2.List = ra.Value[/B] ' заносим весь массив в комбобокс
End With
End Sub
И никаких Select-ов…
Лист «ТМЦ» при этом может быть скрытым.
Сортировку тоже можно оптимизировать — для этого совсем не обязательно активировать обрабатываемый лист.
Макросы для Excel, Word, CorelDRAW. Быстро, профессионально, недорого. http://ExcelVBA.ru/
Благодарности принимаются на кошелёк WebMoney: R318574877619 и Яндекс.Деньги: 41001335672216
Часто бывает, что надо получить данные из другой, открытой вместе с используемой, книги Excel.
Данная функция помогает получить ссылку на другую, открытую в текущий момент, книгу:
Sub ПримерИспользования_GetAnotherWorkbook() Dim WB As Workbook Set WB = GetAnotherWorkbook If Not WB Is Nothing Then MsgBox "Выбрана книга: " & WB.FullName, vbInformation Else MsgBox "Книга не выбрана", vbCritical: Exit Sub End If ' обработка данных из выбранной книги x = WB.Worksheets(1).Range("a2") ' ... End Sub Function GetAnotherWorkbook() As Workbook ' если в данный момент открыто 2 книги, функция возвратит вторую открытую книгу ' если помимо текущей, открыто более одной книги - будет предоставлен выбор On Error Resume Next Dim coll As New Collection, WB As Workbook For Each WB In Workbooks If WB.Name <> ThisWorkbook.Name Then If Windows(WB.Name).Visible Then coll.Add CStr(WB.Name) End If Next WB Select Case coll.Count Case 0 ' нет других открытых книг MsgBox "Нет других открытых книг", vbCritical, "Function GetAnotherWorkbook" Case 1 ' открыта ещё только одна книга - её и возвращаем Set GetAnotherWorkbook = Workbooks(coll(1)) Case Else ' открыто несколько книг - предоставляем выбор For i = 1 To coll.Count txt = txt & i & vbTab & coll(i) & vbNewLine Next i msg = "Выберите одну из открытых книг, и введите её порядковый номер:" & _ vbNewLine & vbNewLine & txt res = InputBox(msg, "Открыто более двух книг", 1) If IsNumeric(res) Then Set GetAnotherWorkbook = Workbooks(coll(Val(res))) End Select End Function
- 37367 просмотров
Не получается применить макрос? Не удаётся изменить код под свои нужды?
Оформите заказ у нас на сайте, не забыв прикрепить примеры файлов, и описать, что и как должно работать.