Форум программистов, компьютерный форум, киберфорум
Наши страницы
MS Access
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
Soft17
1 / 1 / 1
Регистрация: 15.01.2017
Сообщений: 386
1

Как объявить глобальный массив?

31.01.2019, 23:24. Просмотров 1042. Ответов 8

Как объявить глобальный массив?

Моя попытка
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Option Compare Database
Option Explicit
 
Public masAccum(100) As String
masAccum = Array("ИмяЗадачиЗаплн", "Свойтсво1ЗадачиЗаплн", "Свойтсво2ЗадачиЗаплн") 'Массив.
 
Private Sub ИмяЗадачиЗаплн_KeyDown(KeyCode As Integer, Shift As Integer)
    Call CheckKeyenter(KeyCode)
   
End Sub
 
 
' Нажатие "Enter". Проверка
Sub CheckKeyenter(KeyCode As Integer)
    Dim i, fieldAccum
    On Error GoTo errend
    
    If KeyCode = 13 Then  ' Нажатие `Ввод`
        
        For i = 0 To UBound(masAccum) '
                fieldAccum = masAccum(i)
         Next
       
    End If ' KeyCode
    Exit Sub
        DoCmd.CancelEvent ' ИСХ
errend:
                MsgBox "Ошибка " & Err.Number & " " & Err.Description
    
End Sub
При любом действии в поле "ИмяЗадачиЗаплн" получаю ошибку:
"Выражение Клавиша вниз, введенное в поле свойства события, вызывает ошибку: Invalid outside procedure.
* Результатом выражения не является имя макроса, имя функции пользователя или строка [Процедура обработки событий].
* Ошибка при вычислении функции, события или макроса.
"
0
Миниатюры
Как объявить глобальный массив?  
Вложения
Тип файла: zip МассГлоб.zip (25.6 Кб, 1 просмотров)
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.01.2019, 23:24
Ответы с готовыми решениями:

Как объявить глобальный массив?
Как объявить глобальный массив? ругается, что нельзя? в книге написанно можно. в чем может быть...

Глобальный массив структур: как объявить и где
Три вопросов по данной теме) 1)как описывать? 2)как объявлять? 3)где всё это делать? по...

Объявить глобальный двумерный массив
Как и где объявить глобальный двумерный массив в Visual C++ типа bool, чтобы он был виден на всей...

Строковый массив (объявить пустой глобальный строковый массив из 16 элементов)
Подскажите, как объявить пустой глобальный строковый массив из 16 элементов? в качестве...

Объявить массив? Запросто! Объявить массив массивов? А как это?
Доброго времени суток! Конечно, все знают, как объявить массив! int main () { int array; }

8
snipe
3117 / 1094 / 263
Регистрация: 07.08.2013
Сообщений: 2,777
01.02.2019, 03:10 2
уберите пятую строку в какой-то код исполняемый при запуске
в той области где вы заполняете публичные переменные только объявляются

вот только толку от этого массива будет мало
т.к. вы активно используете обработчик ошибок т.е. они возникают
а при возникновении ошибки публичные переменные сбрасываются
лучше юзать либо постоянно открытую скрытую форму или делать таблицу куда грузить данные
0
Soft17
1 / 1 / 1
Регистрация: 15.01.2017
Сообщений: 386
01.02.2019, 08:10  [ТС] 3
Цитата Сообщение от snipe Посмотреть сообщение
лучше юзать либо постоянно открытую скрытую форму или делать таблицу куда грузить данные
Плохо понимаю о чём выговорите...

Изменения:
- создал процедуру "FillArrayMasAccum()";
- в "CheckKeyenter(KeyCode)" добавил "Call FillArrayMasAccum";

Не работает.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Public masAccum(100) As String
 
Sub FillArrayMasAccum()
    masAccum = Array("ИмяЗадачиЗаплн", "Свойтсво1ЗадачиЗаплн", "Свойтсво2ЗадачиЗаплн") 'Массив.
End Sub
 
 
Private Sub ИмяЗадачиЗаплн_KeyDown(KeyCode As Integer, Shift As Integer)
    Call CheckKeyenter(KeyCode)
   
End Sub
 
 
' Нажатие "Enter". Проверка
Sub CheckKeyenter(KeyCode As Integer)
    Dim i, fieldAccum
    Call FillArrayMasAccum
    
    On Error GoTo errend
    
    If KeyCode = 13 Then  ' Нажатие `Ввод`
        
        For i = 0 To UBound(masAccum) '
                fieldAccum = masAccum(i)
         Next
       
    End If ' KeyCode
    Exit Sub
        DoCmd.CancelEvent ' ИСХ
errend:
                MsgBox "Ошибка " & Err.Number & " " & Err.Description
    
End Sub

Вопрос.
1. Как сделать чтобы я заполнил массив в одном месте, а потом использовал в разных процедурах?
0
ltv_1953
Эксперт MS Access
13310 / 6018 / 1204
Регистрация: 21.06.2012
Сообщений: 10,872
01.02.2019, 08:34 4
Цитата Сообщение от Soft17 Посмотреть сообщение
1. Как сделать чтобы я заполнил массив в одном месте, а потом использовал в разных процедурах?
Создайте модуль и объявите массив в нем.
1
Миниатюры
Как объявить глобальный массив?  
01.02.2019, 08:34
Soft17
1 / 1 / 1
Регистрация: 15.01.2017
Сообщений: 386
01.02.2019, 09:03  [ТС] 5
ltv_1953,

Модуль "Arrays":
Visual Basic
1
Public masAccum(100) As String

Форма:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Sub FillArrayMasAccum()
    ' Arrays.masAccum = Array("ИмяЗадачиЗаплн", "Свойтсво1ЗадачиЗаплн", "Свойтсво2ЗадачиЗаплн") 'Массив.
        masAccum = Array("ИмяЗадачиЗаплн", "Свойтсво1ЗадачиЗаплн", "Свойтсво2ЗадачиЗаплн") 'Массив.
End Sub
 
 
Private Sub ИмяЗадачиЗаплн_KeyDown(KeyCode As Integer, Shift As Integer)
    Call CheckKeyenter(KeyCode)
   
End Sub
 
 
' Нажатие "Enter". Проверка
Sub CheckKeyenter(KeyCode As Integer)
    Dim i, fieldAccum, masAccum
    Call FillArrayMasAccum
    masAccum = Arrays.masAccum
    
    On Error GoTo errend
    
    If KeyCode = 13 Then  ' Нажатие `Ввод`
        
        For i = 0 To UBound(masAccum) '
                fieldAccum = masAccum(i)
         Next
       
    End If ' KeyCode
    Exit Sub
        DoCmd.CancelEvent ' ИСХ
errend:
                MsgBox "Ошибка " & Err.Number & " " & Err.Description
    
End Sub
0
Миниатюры
Как объявить глобальный массив?  
ltv_1953
Эксперт MS Access
13310 / 6018 / 1204
Регистрация: 21.06.2012
Сообщений: 10,872
01.02.2019, 09:13 6
Лучший ответ Сообщение было отмечено Soft17 как решение

Решение

А причем здесь Ваш вопрос об объявлении ...?
Насколько я помню, в VBA операций над массивами нет. Присваивание делается элементу массива (нужен индекс).
Возможно Вам нужно такое
Visual Basic
1
2
3
4
5
Sub FillArrayMasAccum()
    masAccum(1) = "ИмяЗадачиЗаплн"
    masAccum(2) = "Свойтсво1ЗадачиЗаплн"
    masAccum(3) = "Свойтсво2ЗадачиЗаплн"
End Sub
1
Soft17
1 / 1 / 1
Регистрация: 15.01.2017
Сообщений: 386
01.02.2019, 09:56  [ТС] 7
Цитата Сообщение от ltv_1953 Посмотреть сообщение
А причем здесь Ваш вопрос об объявлении ...?
Извините за некорректность...
Плохо разбираюсь.

Решение_1(Работает)
Предложенное вами.
Код
Модуль Arrays:
Visual Basic
1
2
3
4
5
6
7
8
9
10
Option Compare Database
Option Explicit
 
Public masAccum(100) As String
 
Sub FillArrayMasAccum()
    masAccum(1) = "ИмяЗадачиЗаплн"
    masAccum(2) = "Свойтсво1ЗадачиЗаплн"
    masAccum(3) = "Свойтсво2ЗадачиЗаплн"
End Sub
Код формы:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Private Sub ИмяЗадачиЗаплн_KeyDown(KeyCode As Integer, Shift As Integer)
     Call CheckKeyenter(KeyCode)
   ' Call CheckKeyenter_1(KeyCode)
End Sub
 
 
 ' Нажатие "Enter". Проверка
Sub CheckKeyenter(KeyCode As Integer)
    Dim i, fieldAccum
 
    Call Arrays.FillArrayMasAccum
 
    On Error GoTo errend
 
    If KeyCode = 13 Then  ' Нажатие `Ввод`
 
        For i = 0 To UBound(masAccum) '
                fieldAccum = masAccum(i)
         Next
 
    End If ' KeyCode
    Exit Sub
        DoCmd.CancelEvent ' ИСХ
errend:
                MsgBox "Ошибка " & Err.Number & " " & Err.Description
 
End Sub

Решение_2(Не работает)
Ошибка в модуле Arrays: "Can't assign to array".
Модуль Arrays:

Visual Basic
1
2
3
4
5
6
7
8
9
10
Public masAccum(100) As String
 
Sub FillArrayMasAccum()
'    masAccum(1) = "ИмяЗадачиЗаплн"
'    masAccum(2) = "Свойтсво1ЗадачиЗаплн"
'    masAccum(3) = "Свойтсво2ЗадачиЗаплн"
    
    masAccum = Array("ИмяЗадачиЗаплн", "Свойтсво1ЗадачиЗаплн", "Свойтсво2ЗадачиЗаплн") 'Массив.
    
End Sub



Код формы:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Sub CheckKeyenter_1(KeyCode As Integer)
    Dim i, fieldAccum
    
     Call Arrays.FillArrayMasAccum
    ' masAccum = Array("ИмяЗадачиЗаплн", "Свойтсво1ЗадачиЗаплн", "Свойтсво2ЗадачиЗаплн") 'Массив.
 
    
    On Error GoTo errend
    
    If KeyCode = 13 Then  ' Нажатие `Ввод`
        
        For i = 0 To UBound(masAccum) '
                fieldAccum = masAccum(i)
         Next
       
    End If ' KeyCode
    Exit Sub
        DoCmd.CancelEvent ' ИСХ
errend:
                MsgBox "Ошибка " & Err.Number & " " & Err.Description
    
End Sub

Решение_3(Работает)
Массив заполняется в процедуре.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Sub CheckKeyenter_1(KeyCode As Integer)
    Dim i, fieldAccum, masAccum
    ' Dim i, fieldAccum
    
     ' Call Arrays.FillArrayMasAccum
      masAccum = Array("ИмяЗадачиЗаплн", "Свойтсво1ЗадачиЗаплн", "Свойтсво2ЗадачиЗаплн") 'Массив.
 
    
    On Error GoTo errend
    
    If KeyCode = 13 Then  ' Нажатие `Ввод`
        
        For i = 0 To UBound(masAccum) '
                fieldAccum = masAccum(i)
         Next
       
    End If ' KeyCode
    Exit Sub
        DoCmd.CancelEvent ' ИСХ
errend:
                MsgBox "Ошибка " & Err.Number & " " & Err.Description
    
End Sub

Вопрос.
Почему не работает "Решение_2"?
Если я правильно понимаю, то "Решение_2" это тоже, что и "Решение_3", только "masAccum" объявлен глобально.
Прошу извинить, если я неточен в терминах.
0
Миниатюры
Как объявить глобальный массив?  
Вложения
Тип файла: zip МассГлоб_7.zip (56.6 Кб, 0 просмотров)
ltv_1953
Эксперт MS Access
13310 / 6018 / 1204
Регистрация: 21.06.2012
Сообщений: 10,872
01.02.2019, 10:12 8
masAccum - массив, Array("ИмяЗадачиЗаплн", "Свойтсво1ЗадачиЗаплн", "Свойтсво2ЗадачиЗаплн") тоже массив. Присваивание делается поэлементно, а не массив массиву.
1
Панург
Мы один, давай на "ты"
1733 / 772 / 167
Регистрация: 16.06.2016
Сообщений: 1,595
01.02.2019, 10:25 9
Цитата Сообщение от Soft17 Посмотреть сообщение
Почему не работает "Решение_2"?
убери 100 (размер массива) когда объявляешь и ничего туда не пиши.
При первой же необработанной ошибке в массиве станет пусто.
1
01.02.2019, 10:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.02.2019, 10:25

Можно ли объявить глобальный константный QVector?
Привет! Хотелось вместо всяких static wchar_t в глобальном пространстве объявить вектор пар,...

Можно ли объявить глобальный константный заполненный std::vector ?
Хотелось бы, чтоб был объявлен в глобальном пространстве уже заполненный константный статический...

Как создать глобальный массив
Помогите неразумному, пока что неразумному, думал создать в одной из форм двумерный массив там же...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru