Установите логин c перед тем, как начать писать код. Начните с записи Option Explicit
в верхней части вашего пустого модуля кода.
Похоже, у вас есть рабочая книга с именем , например «Согласование». Кажется, вы хотите назвать эту книгу Wb
. Поэтому ваша первая строка кода должна быть
Dim Wb As Workbook 'книга согласования
Похоже, что где-то в этой книге есть ячейки A9 и A11. Куда? На листе. Какой рабочий лист? Это приведет вас ко второй строке кода.
Dim Ws As Worksheet 'рабочий лист, из которого можно собрать информацию о компании
Продолжайте так, пока не определите каждую часть вашего проекта по его характеру (рабочая книга, рабочий лист, строка, номер), по его функции в вашем проекте (поставщик данных, получатель данных, помощник) и присвоено ему имя.
Set wbk = Workbooks (Range ("A9"). Value) Set recon = Workbooks (Range ("A11"). Value)
создает два объекта книги. Вы не объявили их и не указали их функции в вашем проекте. Но ясно, что ваш код не сработает, если диапазоны A9 и A11 не содержат имен открытых книг. Они должны быть открыты, потому что ваш код не открывает их, даже если ячейки содержат полные имена файлов с соответствующими путями.
Обратите внимание, что и A9, и A11 находятся в ActiveSheet
. Это потому, что вы не указываете какой-либо конкретный лист. ActiveSheet
будет любым листом в объекте Wb
с именем , например «Согласование», который активен в данный момент - очень расплывчатое описание. Шансы на то, что правильный лист будет найден, очень малы.
Вся эта путаница вызвана отсутствием планирования перед тем, как вы начали писать код. Go назад и начать заново. Думайте гораздо меньшими шагами, чем вы делали до сих пор. Однако один шаг, о котором вы не должны думать, - это что выбрать или активировать . Ответ однозначно «Ничего». Wb.Worksheets("MySheet 1").Cells(9, "A")
- очень четкий адрес. VBA может это найти. Он может получить свои Value
, RowHeight
, Formula
и изменить любое из них и многое другое, как только сможет Select
или Activate
. Активация и выбор - это действие, необходимое пользователю. VBA или Excel этого не делают.
И, прежде чем я забыл, адреса VBA располагаются по имени, а ячейки - по их координатам. Range("A9")
- это обходной путь для использования синтетического c имени для диапазона, который представляет собой одну ячейку. Ничего хорошего из такой акробатики не выйдет. Поскольку вы уже освоили синтаксис адресации ячеек, используйте его для этой цели. Используйте имена для адресации диапазонов нескольких ячеек, но помните, что такие имена, как «A1: C7», искусственно созданы из координат ячеек. Это отличная система, но, увы, самая низкая ступенька на этой лестнице. Вы можете сделать гораздо больше с настоящими именами, которые вы сами создаете и управляете им.