Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.02.2012, 02:36   #1
prowoke
Пользователь
 
Регистрация: 29.09.2011
Сообщений: 10
По умолчанию Область видимости переменных

Вот есть такой код
PHP код:
Public X(42) As Single
Public Y(3) As Single
Public As IntegerAs IntegerAs Integer

Private Sub button_Click()
Select Case methodlist.Value
Case "Из файла"
    
WorkFile
    MsgBox Y
(3)
Case 
"Из excel"
    
MsgBox "Excel"

Case "Из базы"
    
MsgBox "Из Базы"
End Select

End Sub

Private Sub methodlist_Change()
End Sub

Private Sub methodlist_Enter()
    
methodlist.Clear
    methodlist
.AddItem "Из базы"
    
methodlist.AddItem "Из файла"
    
methodlist.AddItem "Из excel"
End Sub

Sub WorkFile
()
Dim MyFile
Dim currentS 
As String
Dim count 
As Integer
Dim arr
() As String

MyFile 
FreeFile
Open 
("C:\MyCourse\data.txt") For Input As #MyFile

For 1 To 4
    Line Input 
#MyFile, currentS 'Читаем файл TEST.T
    
arr() = Split(currentS"  ")
    
count UBound(arr) - LBound(arr) + 'Считаем количество элементов в массиве
    
    If count = 5 Then
      For j = 1 To count - 1
        Select Case j
            Case 2
                Y(j) = arr(1)
            Case 3
                X(j, 1) = arr(2)
            Case 4
                X(j, 2) = arr(3)
            Case 5
                X(j, 3) = arr(4)
        End Select
      Next j
    End If
Next i

Close #MyFile '
Закрываем файл

End Sub

Private Sub UserForm_Click()
End Sub 
Вначале я обьявляю переменные при помощи Public. Потом из процедур заполняю эти переменные. При компиляции выдаёт такое сообщение:

"Compile error:
Constants, fixed-length strings, arrays, user-defined types and Declare statements not allowed as Public members of object modules"

Помогите, пожалуйста.
prowoke вне форума Ответить с цитированием
Старый 03.02.2012, 08:03   #2
Djeki
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 136
По умолчанию

Объявлять необходимо в модуле обычном, а не в модуле формы.
Djeki вне форума Ответить с цитированием
Старый 03.02.2012, 11:59   #3
alex77755
Форумчанин
 
Аватар для alex77755
 
Регистрация: 14.02.2009
Сообщений: 753
По умолчанию

Либо заменить Public на Dim
помогу решить контрольные VB6, VBA (недорого)
Alex77755@mail.ru
alex77755 вне форума Ответить с цитированием
Старый 03.02.2012, 12:51   #4
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

i As Integer, j As Integer, k As Integer вроде совсем не нуждаются в "публичности"
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 03.02.2012, 21:14   #5
prowoke
Пользователь
 
Регистрация: 29.09.2011
Сообщений: 10
По умолчанию

Чёт я совсем не понимаю. Мне нужно, чтобы массив заполнялся в процедуре. И как процедура закончится массив оставался в публичной области видимости. Как мне это сделать? В документации написано, что для этого надо использоваться public объявления переменных. Но надо это делать в начале модуля. Я вроде так и сделал. А счётчики типо i,j,k у меня используются во всех процедурах и я решил вынести их тоже.
prowoke вне форума Ответить с цитированием
Старый 03.02.2012, 21:31   #6
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Ну правильно - объявляете массивы публичными в стандартном модуле.
Счётчикам публичность не нужна - если только Вам в другой процедуре не нужно значение, которое осталось в счётчике по окончании цикла в другой процедуре.
Или лень их в каждой процедуре объявлять:?
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 03.02.2012, 22:00   #7
alex77755
Форумчанин
 
Аватар для alex77755
 
Регистрация: 14.02.2009
Сообщений: 753
По умолчанию

Public будет виден во всех модулях и процедурах, но обявлять надо только в обычном модуле. Судя по Private Sub UserForm_Click это у вас в модуле формы. В модуле формы не может быть объявлено публичных переменных. Если есть другие модули где надо использовать массив, то обявления надо выносить в модуль. Если же всё в одном модуле формі, но в разных процедурах достаточно обявить как Private или просто Dim
помогу решить контрольные VB6, VBA (недорого)
Alex77755@mail.ru
alex77755 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Область видимости chertovich Общие вопросы Delphi 10 24.09.2011 03:21
область видимости переменных Lotles Visual C++ 11 30.11.2010 23:30
область видимости Dimarik Общие вопросы .NET 5 21.02.2010 21:32
область видимости переменных. С++ Prestigio Помощь студентам 10 07.07.2008 15:55
область видимости ? artem779 Общие вопросы Delphi 3 14.09.2007 09:34