Vba excel переключение между книгами

Обновлено: 21.11.2024

Здравствуйте! Не могли бы вы подсказать, почему этот код не работает:

Sub Hyperlinks()
''Установите гиперссылки
Workbooks.Open ("I:\DATA\Enterprise\Peugeot EQC\PSA Bimarques\Project\Peugeot Bi-marque Final 10Mar10.xls")
BimarquesFinal = ActiveWorkbook.Name
Sheets(1).Select

Затемнить HyperAddress как строку
HyperAddress = "'" & ThisWorkbook.Sheets("Список содержимого").Cells(y, 2).Value & "'!A1"
Workbooks(BimarquesFinal). Sheets(2).Cells(y, 1).Select
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:= _
HyperAddress, TextToDisplay:= _
Workbooks(BimarquesFinal).Sheets("Содержание книги").Cells(y, 1).Value

Строка, которая не работает:

По сути, все, что я хочу сделать, это после того, как я выбрал значения HyperAddress из рабочей книги, содержащей VBA, вернуться к рабочей книге, которую я только что открыл, и выбрать ячейку на листе 2! Я пробовал несколько вещей и не могу найти способ указать это, чтобы он не упал.

Даты предстоящих курсов обучения см. в разделе Цены и наличие

Спасибо за вопрос

Не могли бы вы кое-что пояснить для меня? Когда ваш код падает, он генерирует ошибку времени выполнения. Если да, то какой номер и описание?

Да, это ошибка времени выполнения 1004 – "Не удалось выбрать метод класса Range".

Спасибо за обновление. Извините за задержку с ответом, я заболел гриппом.

Ваша проблема в том, что вы можете выбрать только ячейку на активном листе. В вашем коде перед циклом вы выбираете лист 1, а затем в цикле пытаетесь выбрать ячейку на листе 2.

Если вы выберете лист 2 перед циклом, это должно решить проблему

Спасибо. Итак, для дальнейшего использования вы не можете выбрать ячейку, не выбрав сначала рабочий лист? Вы не можете выбрать лист и ячейку с одной и той же строкой кода?

Можно ли было добиться того же результата, выбрав рабочий лист в одной строке и ячейку в следующей строке?

Sub Hyperlinks()
''Установите гиперссылки
Workbooks.Open ("I:\DATA\Enterprise\Peugeot EQC\PSA Bimarques\Project\Peugeot Bi-marque Final 10Mar10.xls")
BimarquesFinal = ActiveWorkbook.Name

Затемнить HyperAddress как строку
HyperAddress = "'" & ThisWorkbook.Sheets("Список содержимого").Cells(y, 2).Value & "'!A1"
Workbooks(BimarquesFinal). Sheets(2).Select
Cells(y, 1).Select
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:= _
HyperAddress, TextToDisplay: = _
Workbooks(BimarquesFinal).Sheets("Содержание книги").Cells(y, 1).Value

Добро пожаловать. Пожалуйста, выберите свое приложение (например, Excel), а затем опубликуйте свой вопрос.

Наши сертифицированные инструкторы Microsoft ответят в течение 24 часов (рабочих дней).

Есть предложения, вопросы или комментарии? Отправьте сообщение в ветке форума «Улучшить тему».

Статьи Excel

Посетите наш веб-сайт, чтобы узнать больше об
excel+courses+in+london и других учебных курсах Microsoft.

Совет по Excel:

Двойная жизнь Ctrl+d

Предположим, у меня есть формула в ячейке B1, которую я хочу скопировать в ячейку B2:B10. Я могу выбрать B1:B10, а затем нажать Ctrl+d, чтобы скопировать формулу в выбранный диапазон. Пользователи обычно игнорируют этот ярлык в пользу двойного щелчка на дескрипторе заполнения для копирования вниз, но Ctrl+d иногда полезен, особенно когда в окружающих столбцах нет данных, чтобы указать, насколько метод двойного щелчка должен копировать формулы.< /p>

Однако сочетание клавиш Ctrl+d имеет и другое применение. Когда я использую панель инструментов рисования для рисования таких объектов, как текстовые поля, прямоугольники и овалы, на листе, Ctrl+d создает мгновенную копию выбранных фигур. Например, мне нужно пять текстовых полей одинакового размера. Я рисую одно текстовое поле и настраиваю его до нужного размера, выделяю его, затем четыре раза нажимаю Ctrl+d, чтобы получить четыре идентичные копии.

У меня открыто 3 рабочих книги, в основном ББ есть моя командная кнопка + код, а другие 2 были открыты с использованием существующего кода в моей основной книге.

Используя общий код, например (Thisworkbook, activeworkbook, workbooks(1)), как я могу активировать один из 3?

Я знаю, что к основной книге можно получить доступ с помощью "thisworkbook", но когда я активирую ее, я не могу активировать одну из других в моей следующей строке кода с помощью activeworkbook.activate или workbooks(1).activate.

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

Заранее спасибо!

Добро пожаловать в OzGrid

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

если вы не привередливы. Если вы имеете в виду определенный лист в bookName

Кстати, вам не нужно активировать лист для работы с ним.

делает то же самое быстрее и проще, чем

Код, с которым у меня возникли проблемы, выделен жирным шрифтом внизу страницы. :)

Частная подписка ClickME_Click()
Application.ScreenUpdating = False

Sheets("Дамп данных").Select
Листы("Дамп данных").Cells.Select
Selection.ClearContents
Sheets("Данные DDR").Select

Dim Msg, Style, Title, Help, Ctxt, Response, MyString, Msg1, Style1, Title1, Help1, Ctxt1, Response1, MyString1
Msg = "Выберите файл Excel с исходными данными DDR" ' Определить сообщение .
Style = vbOK ' Определить кнопки.
Title = "Производительность" ' Определить заголовок.
Ctxt = 1000 ' Определить тему
Response = MsgBox(Msg, Style, Title, Help , Ctxt)
If Response = vbOK Then ' Пользователь выбрал Да.
' Выполнить какое-либо действие.

ChDir "Q:\Client Folders\ADI Optimization"
Application.FindFile
ActiveWorkbook.Activate

Msg1 = "Выберите конвертер текста завершения PT" ' Определите сообщение.
Style1 = vbOK ' Определите кнопки.
Title1 = "Производительность" ' Определите заголовок.
Ctxt1 = 1000 ' Определите тему
Response1 = MsgBox(Msg1, Style1, Title1, Help1, Ctxt1)
If Response1 = vbOK Then ' Пользователь выбрал Да.
MyString1 = "Спасибо" ' Выполните какое-то действие.
End If
ChDir "Q:\Client Folders"
Application.FindFile
ActiveWorkbook.Activate

Если Sheets("Welldata").Cells(3, 3).Value = 1 And Sheets("Welldata").Cells(4, 3) = 2 Then

С рабочими листами("welldata")
.Range("c3:n500").PasteSpecial _
Операция:=xlPasteSpecialOperationAdd
End With

С рабочими листами("welldata")
.Range("c3:n500").PasteSpecial _
Операция:=xlPasteSpecialOperationAdd

*Ниже я не могу активировать нужную книгу. Он остается в «Эта книга» (моя основная книга с кодом), активированная с помощью приведенного выше кода.*

У меня есть код, который ищет определенную информацию в другой книге, но эта книга меняет имена и форматы. В настоящее время я использую workbook.open, чтобы открыть его, и когда я указываю местоположение файла, он имеет динамическую часть (вы поймете на примере кода). Проблема в том, что в середине кода мне нужно вернуться к первой рабочей книге (той, в которой выполняется код), сделать некоторые вещи, а затем снова вернуться к рабочей книге, в которой она искала информацию. Я попытался установить его как переменную, используя dim secondfile как строку/книгу (попробовал оба), а затем попытался установить ее как активную книгу, когда она была «активна», поэтому я мог использовать «secondfile.activate» позже, когда мне нужно было вернуться к нему, но не повезло. Вот код:

Я не могу заставить его снова открыть книгу wb, потому что это не имеет смысла. Прямо сейчас у меня есть список с более чем 1000 данных, которые ищутся в более чем 30 файлах. Имя файла находится в первой рабочей книге, по крайней мере, в ее части, как вы можете видеть в коде. Я использую часть "Range("D6").offset", чтобы получить его. Дело в том, что выполнение кода заняло бы слишком много времени, если бы я каждый раз закрывал и открывал вторую книгу, поэтому я пытаюсь найти все, что находится в определенном файле, и после поиска все это сохранить и закрытие его. Вот почему мне нужно вернуться к этому файлу.

PS: не все файлы имеют одинаковый формат, поэтому я не использовал "workbooks.activate" или что-то подобное, а затем использовал ту же самую вещь "Range("D6").offset" для установки файла для активации, поскольку некоторые из них находятся в формате .xls, а другие — в формате xlsx.

Скажем, вы затемняете wb1 как рабочую книгу и wb2 как рабочую книгу. Вы используете следующий синтаксис? wb1.sheets("Лист1").Range("A1") = "aaa" или wb2.Sheets("Лист3").Range("B12") = MyString. Я хочу сказать, что вам не нужно активировать его, чтобы изменять ячейки или читать из них.

@DavidG, может быть, я понял идею. Вы говорите, что мне не нужно возвращаться к первой книге, чтобы изменить в ней ячейку, верно? Сейчас попробую и вернусь к вам

Участник форума Дата регистрации 05.04.2010 Расположение Лейквуд, Иллинойс MS-Off Ver Excel 2016 Сообщений 367

Переключение между двумя открытыми книгами

У меня очень простая проблема, над которой я ломаю голову. В моем коде Workbook VBA я просматриваю другую книгу и открываю ее. Мне нужно скопировать и вставить ячейки между основной книгой и книгой, которую я просмотрел и теперь открыл. Просматриваемая книга называется ManualImport, и я могу открыть ее в приведенном ниже коде. Теперь, когда он открыт, мне нужно его активировать. Мне удалось скопировать и вставить сразу после того, как рабочая книга открыта, но в последнем разделе кода ниже я получаю сообщение об ошибке, когда пытаюсь вернуться к рабочей книге, которая была просмотрена. эта ошибка возникает после последнего комментария "------------копирует и вставляет данные-----------

Я пробовал следующее:

Workbooks("ManualImport"). Активировать
Windows ("ManualImport"). Активировать
Windows ("ManualImport"). Активировать

Во-первых, это то, что у меня есть в коде VBA, но все это приводит к ошибкам. Что такое правильная команда?

Заранее спасибо!

Участник форума Регистрация 06-02-2005 Сообщений 100

вам нужно, чтобы окончание файла (.xlsm, .xlsx) было частью имени книги

Участник форума Дата регистрации 05.04.2010 Расположение Лейквуд, Иллинойс MS-Off Ver Excel 2016 Сообщений 367

Участник форума Регистрация 06-02-2005 Сообщений 100

требуется расширение .xls_, если имя файла в ManualImport.xls_

или не нужны кавычки, если ManualImport — это просто переменная, содержащая строку с расширением

или нужно и то, и другое, если ManualImport — это переменная, которая содержит имя файла, но не расширение

что он возвращает?

Гуру форума Дата регистрации 02-02-2005 Расположение Стерлинг, Шотландия MS-Off Ver Microsoft Office 365 Сообщений 19 616

Вам не нужно активировать или выбирать какую-либо книгу для копирования/вставки между ними.

Вот ваш код без активации/выбора.

Forum Expert Дата регистрации 09.06.2014 Местоположение USA MS-Off Ver 2016 Сообщений 2,527

Чтобы уточнить, что Нори говорит об активации и выборе.

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

Итак, у меня есть две открытые книги, одна из которых с кодом может называться ThisWorkbook и всегда будет означать одну и ту же книгу, независимо от того, какая книга активна.

Другая рабочая книга называется "One.xlsm". Вы увидите в коде, что ссылка на рабочий лист, затем лист на рабочем листе, а затем диапазон на рабочем листе - это все, что вам нужно. Я могу копировать данные из одного в другой, не имеет значения, есть ли у меня другая открытая книга, которая оказывается активной книгой. Вы также можете назначать переменные для рабочих книг и листов в этих рабочих книгах и диапазонах на этих листах, а затем, просто ссылаясь на переменную диапазона, я имею в виду рабочую книгу, лист в этой рабочей книге и диапазон с одной переменной. В конце вы увидите, что я мог бы просто указать рабочую книгу, лист и диапазон для каждого листа и скопировать из одного листа в другой, как в примере Нори, ничего не активируя и не выбирая.

Напоминаем: как только ваш первоначальный запрос будет выполнен, отметьте эту тему как РЕШЕННУЮ, перейдя в раскрывающийся список "Инструменты темы" над своим первым сообщением и выбрав "Решено".

Если вы довольны моей помощью, рассмотрите возможность нажатия кнопки добавления репутации в левом нижнем углу этого сообщения.

Читайте также: