Invalid use of Me keyword / Как уйти от этой ошибки?

Программирование на Visual Basic for Applications
claus
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 16.10.2008 (Чт) 15:36

Invalid use of Me keyword / Как уйти от этой ошибки?

Сообщение claus » 30.10.2008 (Чт) 14:59

Есть код:
Код: Выделить всё
If wsUnique.ProtectContents = True Then
     
       MsgBox "Рабочий лист " & wsUnique.Name & _
       " защищён"": Exit Sub
    End If

    Application.ScreenUpdating = False
   
    wsUnique.UsedRange.Clear
   
    Dim iColumn As Range, iTarget As Range
    For Each iColumn In Me.UsedRange.Columns
        Select Case iColumn.Column
            Case 2, 4 To 256 'Case 2, Is > 3
            Set iTarget = wsUnique.[A65536].End(xlUp)(2)
            iColumn.AdvancedFilter _
            Action:=xlFilterCopy, CopyToRange:=iTarget, Unique:=True
            With wsUnique.Range(iTarget(2), wsUnique.[A65536].End(xlUp))
                 iCountIfAll = Application.CountIf(iColumn.Offset(1), .Cells)
                 iSum& = Application.Sum(iCountIfAll)
                 .Offset(, 1).Value = iCountIfAll
                 .Offset(, 2).Value = Evaluate(.Offset(, 1).Address(External:=True) & "/" & iSum& & "*100")
                 With .Resize(1, 3).Offset(.Count)
                      .Value = Array("Сумма", iSum&, "100%")
                      .Font.Color = vbRed
                 End With
            End With
        End Select
    Next
    With wsUnique.UsedRange
         If Application.CountBlank(.Columns(1)) > 0 Then _
         .Columns(1).SpecialCells(xlBlanks).EntireRow.Delete

         .EntireColumn.AutoFit
    End With
   
    Application.ScreenUpdating = True
Когда это единственный модуль в этом файле - все прекрасно, но когда кроме него есть и другие модули - выдает приведенную выше ошибку. :?
Последний раз редактировалось claus 30.10.2008 (Чт) 15:45, всего редактировалось 1 раз.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Invalid use of Me keyword / Как уйти от этой ошибки?

Сообщение Денис » 30.10.2008 (Чт) 15:18

Лучше не используй переменную Me - это зарезервированное слово. Им объекты ссылаются на самих себя. Не используй.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

claus
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 16.10.2008 (Чт) 15:36

Re: Invalid use of Me keyword / Как уйти от этой ошибки?

Сообщение claus » 30.10.2008 (Чт) 15:33

Да, но если я его заменю - все перестает работать.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Invalid use of Me keyword / Как уйти от этой ошибки?

Сообщение Денис » 30.10.2008 (Чт) 15:38

Ничего не понимаю. А где объявлены переменные? Что представляет из себя MyObject и почему его надо присваивать Me, и почему без ключевого слова Set?

UPD: Замени строки
Код: Выделить всё
    Me = MyObject
    For Each iColumn In Me.UsedRange.Columns

этим
Код: Выделить всё
    'Me = MyObject
    For Each iColumn In wsUnique.UsedRange.Columns
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

claus
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 16.10.2008 (Чт) 15:36

Re: Invalid use of Me keyword / Как уйти от этой ошибки?

Сообщение claus » 30.10.2008 (Чт) 15:50

так ведь работает же когда он один-единственный модуль.

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Re: Invalid use of Me keyword / Как уйти от этой ошибки?

Сообщение ANDLL » 30.10.2008 (Чт) 15:52

claus
Еще раз, по русски.
Me это ключевое слово в контексте модуля класса. Не используй его как имя переменной.
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Goettsch
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 21.08.2007 (Вт) 1:44

Re: Invalid use of Me keyword / Как уйти от этой ошибки?

Сообщение Goettsch » 02.11.2008 (Вс) 18:02

Вместо Me.UsedRange.Columns пишите ссылку на нужный Вам лист, например: ActiveSheet или Worksheets("SomeName") итп. А что касается Me, то оно тут совершенно "не в кассу". "Me" — это обращение к объекту изнутри этого самого объекта. Использовать можно в 2 случаях: (1) Вы создали свой объект (т.е. класс в терминах VB(A), но я предпочитаю называть "объект") и внутри его кода используете "Me"; (2) Внутри кода формы для ссылок, например, на элементы управления, расположенные на этой форме итп.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Re: Invalid use of Me keyword / Как уйти от этой ошибки?

Сообщение tyomitch » 02.11.2008 (Вс) 18:21

1) "класс" и "объект" -- не альтернативные названия одного и того же. Это разные вещи.
3) внутри объектов Workbook и Worksheet слово Me тоже допустимо и имеет вполне конкретный смысл
Изображение

KL
Microsoft MVP
 
Сообщения: 483
Зарегистрирован: 30.10.2005 (Вс) 0:31
Откуда: Madrid

Re: Invalid use of Me keyword / Как уйти от этой ошибки?

Сообщение KL » 02.11.2008 (Вс) 19:45

claus писал(а):Когда это единственный модуль в этом файле - все прекрасно, но когда кроме него есть и другие модули - выдает приведенную выше ошибку. :?

Как уже было сказано...
1) Me - это обращение к объекту, в модуле класса которого находится код.
2) Модули Лист1, Лист2, ... (Sheet#), ЭтаКнига (ThisWorkbook), UserForm1, UserForm2, ..., Class1, Class2, ..., и т.д. - это модули класса, а значит допускают использование Me
3) Модули типа Модуль1, Модуль2, ...(Module#) не допускают использования Me

Отсюда вопросы:
1) изначальный код, в каком модуле находится, когда работает?
2) другие модули, какого они типа?
3) другие модули, содержат ли они слово Me?
Привет,
KL


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 114

    TopList  
cron