Выбор метода класса Range не удался. Адрес диапазона найден msgBox, но не будет ".Select" - PullRequest
0 голосов
/ 24 апреля 2019

Я работаю с именованными диапазонами (в основном на листе 2) и в процессе создания сводки на листе с именем «Регистрация».Я в основном копирую и вставляю код, который работал в других частях программы.По какой-то причине VBA не выберет диапазон в листе 2.

В приведенном ниже коде «RegistrationPairs» - это диапазон в листе «Signups», а «NewMem» - это диапазон в «Sheet2».

''''''''''
MsgBox "SignupPairs 2,1 " & Range("SignupPairs")(2, 1)
Range("SignupPairs")(2, 1).Select
MsgBox "NewMem 1,1 " & Range("NewMem")(1, 1)
'Sheets("Sheet2").Range("NewMem")(1, 1).Select  'Doesn't work.
Range("NewMem")(1, 1).Select
''''''''''

Первые четыре строки были добавлены для целей отладки.Последняя строка - это та, которая привела меня в ступор.Четвертая строка была попыткой конкретизировать лист, который я хотел использовать;это не сработало.MsgBox правильно сообщает содержимое ячеек в «RegistrationPairs» и «NewMem», но я не могу выбрать NewMem (1,1) для создания «Range (Selection, Selection.End (xlDown)). Rows.Count.

Для бонусных баллов: есть ли у кого-нибудь ссылка или ссылка на хороший учебник для начинающих или руководство по VBA, чтобы я мог обучаться и не задавать эти простые вопросы? VBA для чайников только втянул меня в этот беспорядок.

PS Нажатие «F1» на «Выбрать» в VBA Editor отправляет меня на страницу «Выбрать дело», которая кажется тупиковой.

1 Ответ

1 голос
/ 24 апреля 2019

Поскольку вы новичок в VBA, я настоятельно рекомендую всегда записывать то, что вы собираетесь делать, в виде комментариев в своем коде.Это поможет помощникам и поможет вам в будущем.

Я не уверен, что вы хотите сделать с данными в вашем сводном листе.Я рекомендую вам создать ссылку на сводную таблицу, а затем использовать массивы из названных диапазонов.

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

Sub doSomethingWithSignups()
    Dim ws As Worksheet, signUps As Variant, newMems As Variant
    ' these arrays will have whatever data you have identified in the Named Ranges
    signUps = ThisWorkbook.Names("SignupPairs").RefersToRange.Value2
    newMems = ThisWorkbook.Names("NewMems").RefersToRange.Value2

    ' you can do anything with these arrays now
    MsgBox("SignupPairs 2,1 " & signUps(2, 1))
    MsgBox("NewMem 1,1 " & newMems(1, 1))
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...