Ссылки на ячейки и листы в Excel - PullRequest
2 голосов
/ 05 августа 2011

У меня есть проблема, которую я совсем не понимаю:

i = 150
If ActiveWorkbook.Worksheets("foobar").Cells(i, 3).Value Like "*:*" Then
  MsgBox "I found a colon!"
End If

Как вы можете догадаться, foobar листа имеет в позиции (150, 3) ячейку, содержащую двоеточие, поэтому отображается окно сообщения.

Теперь я хочу сделать это:

i = 150
Cell = ActiveWorkbook.Worksheets("foobar").Cells(i, 3).Value 'fails right here
If Cell Like "*:*" Then
  MsgBox "I found a colon!"
End If

Здесь я получаю сообщение об ошибке: «Переменная объекта или переменная блока не установлена. Фактически говорится:

Sheet = ActiveWorkbook.Worksheets("foobar")

выдает подобное сообщение. Зачем? Что я делаю неправильно? Я просто хочу ссылку на этот объект или, по крайней мере, ссылку.

Ответы [ 5 ]

6 голосов
/ 05 августа 2011

Итог:

  • При работе с объектами используйте Set.
  • При обработке данных примитив (целые, длинные, строки *, варианты *) вы не используете его.

Sheet, Workbook, Range, являются объектами. Поэтому вам нужно использовать Set при назначении их переменным.

A Range.Value возвращает вариант (это может быть long, строка и т. Д.). Таким образом, вы не можете использовать Set.

==========================

Теперь о вашем сообщении об ошибке ... Я бы сказал, что, возможно, раньше в вашем коде Cell объявляется как объект . Попробуйте использовать другое имя переменной или проверьте тип переменной Cell.

Чтобы проверить это, щелкните правой кнопкой мыши и выберите «Определение». Объявите его как Variant, чтобы решить проблему (однако помните о возможных побочных эффектах).

==========================

* Я знаю, что эти типы не «примитивны»; Я использовал в качестве примера здесь для чистоты объяснения.

2 голосов
/ 05 августа 2011

При назначении объекта линия

Sheet = ActiveWorkbook.Worksheets("foobar") 

следует читать

Set Sheet = ActiveWorkbook.Worksheets("foobar")
1 голос
/ 05 августа 2011

В твоей линии

Cell = ActiveWorkbook.Worksheets("foobar").Cells(i, 3).Value

Вы пытаетесь присвоить ячейке значение ячейки (возможно, строку). Снимите .Value, и задание должно работать лучше. Сообщение Excel, с которым вы столкнулись, не самое лучшее: иногда вы получаете его, когда назначаете переменные неправильного типа.

Однако If Cell Like может не работать. (Подсказка: .Value должен быть перемещен, а не удален.)

0 голосов
/ 05 августа 2011

Использовать Dim MyCell as Variant (или как строку), так как Cell является существующим объектом

0 голосов
/ 05 августа 2011

Я только что попробовал следующий код, и он, вероятно, работает в вашем коде. Убедитесь, что ActiveWorkBook - это действительно книга Active Work, которую вы хотите (если вы работаете с несколькими книгами)

Sub test()
i = 3
If ActiveWorkbook.Worksheets("Sheet1").Cells(i, 2).Value Like ":" Then
    MsgBox "I found a colon!"
Else
    MsgBox "didn't find a colon!"
End If

Cell = ActiveWorkbook.Worksheets("Sheet1").Cells(i, 2).Value
'fails right here
If Cell Like ":" Then
    MsgBox "I found a colon!"
End If
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...