powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / access vba помогите, запуталась с массивами
25 сообщений из 25, страница 1 из 1
access vba помогите, запуталась с массивами
    #38501939
irina_irina_irina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
написала код
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Dim strSQL As String
Dim MyArray As Variant
Dim element As String

MyArray = Array("1элемент", "2элемент ", "3элемент ", "4элемент ", "5элемент ")

For Each MyArray In element
strSQL = "INSERT INTO Остатки([Модель], [Затрата], Январь, Февраль) values " & _
"('" & Me.[Модель].Value & "', '" & element & "', " & _  ' в element должно записаться текстом название элемента
"'" & IIf(Me.[Месяц].Value = "Январь", element.Value, 0) & "', " & _  ' в element должно записаться значение
"'" & IIf(Me.[ Месяц].Value = "Февраль", element.Value, 0) & "');"
CurrentProject.Connection.Execute (strSQL)


пишет ошибку For Each may only iterate over a collection object or an array
Что делаю не так? совсем запуталась с массивами, никогда ими не пользовалась, но здесь элементов в массиве будет очень много и просто прописать код для каждого элемента как минимум глупо. подскажите как правильно изменить код, чтобы все работало.
...
Рейтинг: 0 / 0
access vba помогите, запуталась с массивами
    #38501945
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если немного вспомнить английский, будет понятно, где ошибка
Код: vbnet
1.
For Each element In MyArray

кроме того, element придется определить как Variant
...
Рейтинг: 0 / 0
access vba помогите, запуталась с массивами
    #38501961
Фотография Surrogate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
irina_irina_irina,

я не писал кодов для Access, но данный код вызвал несколько вопросов:

1. а где определено что такое переменная element ?
2. MyArray - тип Variant, element - тип string
3. в цикл For Each не завершен, отсутствует оператор Next
4. В цикле хотите перебрать массив входяший в переменную element
...
Рейтинг: 0 / 0
access vba помогите, запуталась с массивами
    #38501962
irina_irina_irina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro, так пишет Object required
...
Рейтинг: 0 / 0
access vba помогите, запуталась с массивами
    #38502014
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
irina_irina_irinaShocker.Pro, так пишет Object requiredскорее всего уже не на этой строке, а ругается на element.Value. У element нет Value, будь то String или Variant
...
Рейтинг: 0 / 0
access vba помогите, запуталась с массивами
    #38502018
irina_irina_irina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro, думаю что вы правы, потому что желтым выделяет((( как быть в этой ситуации? прописать без Value или что-то еще?
...
Рейтинг: 0 / 0
access vba помогите, запуталась с массивами
    #38502023
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если бы я знал, что вы хотите от element.Value, то может что-нибудь и подсказал бы
...
Рейтинг: 0 / 0
access vba помогите, запуталась с массивами
    #38502035
irina_irina_irina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro, в 1ом сообщении подписано комментариями, нужно чтобы сначала выводилось текстом название затраты (перечислена в массиве), а далее числовое значение указанное на форме для этой затраты. и так по каждой затрате. но мне наверное придется тогда объявлять 2 массива: 1 с текстовыми значениями, а другой с числовыми, только как их потом связать не понимаю.
...
Рейтинг: 0 / 0
access vba помогите, запуталась с массивами
    #38502052
irina_irina_irina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProЕсли бы я знал, что вы хотите от element.Value, то может что-нибудь и подсказал бы
Созрела до формулировки мысли) если у меня будет два массива, то мне нужно прописать условие типа
если из массива1-элемент1, то из массива2-элемент1,
массива1-элемент2, то из массива2-элемент2, и т.д.
В какую сторону копать для осуществления мысли.
...
Рейтинг: 0 / 0
access vba помогите, запуталась с массивами
    #38502086
Фотография lbppb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
irina_irina_irinaShocker.Pro, в 1ом сообщении подписано комментариями, нужно чтобы сначала выводилось текстом название затраты (перечислена в массиве), а далее числовое значение указанное на форме для этой затраты. и так по каждой затрате. но мне наверное придется тогда объявлять 2 массива: 1 с текстовыми значениями, а другой с числовыми, только как их потом связать не понимаю.

В таком случае, ваш массив должен содержать как текстовые, так и числовые значения.

Можно объявить свой тип, что-то вроде:
Код: vbnet
1.
2.
3.
4.
Public Type MyType
    MyText As String
    MyValue As Integer
End Type



И тогда, ваш массив будет не Variant, а MyType. И вместо fo each придется использовать for next.
...
Рейтинг: 0 / 0
access vba помогите, запуталась с массивами
    #38502105
irina_irina_irina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
lbppb, ругается на "свой" тип
...
Рейтинг: 0 / 0
access vba помогите, запуталась с массивами
    #38502141
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ирина,

1) если вы не будете приводить свой код, текст ошибки и строку, на которой она произошла, мы ничем не сможем вам помочь

2) если вы не будете заглядывать в help, а также попытаться сначала понять, что вам пишет компилятор, наше желание помогать быстро иссякнет

3) (необязательный пункт) если вы не будете разворачивать мысль, что вы хотите сделать (ограничиваясь, как в первом посте фразами типа "должно записаться значение"), мы не сможем вам предложить вам более оптимальные пути решения вашей задачи
...
Рейтинг: 0 / 0
access vba помогите, запуталась с массивами
    #38504270
irina_irina_irina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro, не было интернета под рукой. проблему решить так и не смогла(

Код: vbnet
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.
Dim strSQL As String
Dim MyArray As Variant
Dim i As Variant
Dim MyArray1 As Variant
Dim j As Variant

MyArray = Array("ëèñò 09Ã2Ñ á10", "ëèñò 09Ã2Ñ á12", "ëèñò 09Ã2Ñ á20", "ëèñò 09Ã2Ñ á22", "ëèñò ñò.3", "ëèñò íåðæàâåþùèé",)
MyArray1 = Array(Me.[ëèñò 09Ã2Ñ á10].Value, Me.[ëèñò 09Ã2Ñ á12].Value, Me.[ëèñò 09Ã2Ñ á20].Value, Me.[ëèñò 09Ã2Ñ á22].Value, "" _
& Me.[ëèñò ñò.3].Value, Me.[ëèñò íåðæàâåþùèé].Value)

i = 0
j = 0
For i = 0 To 38
    MyArray [i] = MyArray1 [j] ' эту строку выделяет красным
        strSQL = "INSERT INTO Îñòàòêè([3 óðîâåíü âàãîíà], [Âèä çàòðàò], ßíâàðü, Ôåâðàëü, Ìàðò, Àïðåëü, Ìàé, Èþíü, " & _
        "Èþëü, Àâãóñò, Ñåíòÿáðü, Îêòÿáðü, Íîÿáðü, Äåêàáðü) values " & _
        "('" & Me.[3ÓðÂàã].Value & "', '" & i & "', " & _
        "'" & IIf(Me.[Ìåñÿö].Value = "ßíâàðü", j, 0) & "', " & _
        "'" & IIf(Me.[Ìåñÿö].Value = "Ôåâðàëü", j, 0) & "', " & _
        "'" & IIf(Me.[Ìåñÿö].Value = "Ìàðò", j, 0) & "', " & _
        "'" & IIf(Me.[Ìåñÿö].Value = "Àïðåëü", j, 0) & "', " & _
        "'" & IIf(Me.[Ìåñÿö].Value = "Ìàé", j, 0) & "', " & _
        "'" & IIf(Me.[Ìåñÿö].Value = "Èþíü", j, 0) & "', " & _
        "'" & IIf(Me.[Ìåñÿö].Value = "Èþëü", j, 0) & "', " & _
        "'" & IIf(Me.[Ìåñÿö].Value = "Àâãóñò", j, 0) & "', " & _
        "'" & IIf(Me.[Ìåñÿö].Value = "Ñåíòÿáðü", j, 0) & "', " & _
        "'" & IIf(Me.[Ìåñÿö].Value = "Îêòÿáðü", j, 0) & "', " & _
        "'" & IIf(Me.[Ìåñÿö].Value = "Íîÿáðü", j, 0) & "', " & _
        "'" & IIf(Me.[Ìåñÿö].Value = "Äåêàáðü", j, 0) & "');"
        CurrentProject.Connection.Execute (strSQL)
    i = i + 1
    j = j + 1
Next i



вот последний вариант моего кода. Мне нужно прописать цикл для каждого элемента 1-го массива, но при этом в цикле нужно сослаться на элемент 2-го массива, равного по индексу элементу из 1-го.
...
Рейтинг: 0 / 0
access vba помогите, запуталась с массивами
    #38504272
irina_irina_irina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
фигня какая-то с кодом, сейчас скину ещё раз
...
Рейтинг: 0 / 0
access vba помогите, запуталась с массивами
    #38504276
irina_irina_irina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Dim strSQL As String
Dim MyArray As Variant
Dim i As Variant
Dim MyArray1 As Variant
Dim j As Variant

MyArray = Array("лист 09Г2С б10", "лист 09Г2С б12", "лист 09Г2С б20", "лист 09Г2С б22", "лист ст.3", "лист нержавеющий")
MyArray1 = Array(Me.[лист 09Г2С б10].Value, Me.[лист 09Г2С б12].Value, Me.[лист 09Г2С б20].Value, Me.[лист 09Г2С б22].Value, "" _
& Me.[лист ст.3].Value, Me.[лист нержавеющий].Value)

i = 0
j = 0
For i = 0 To 38
    MyArray [i] = MyArray1 [j]
        strSQL = "INSERT INTO Остатки([3 уровень вагона], [Вид затраты], Январь, Февраль, Март) values " & _
        "('" & Me.[3 уровень вагона].Value & "', '" & i & "', " & _
        "'" & IIf(Me.[Месяц].Value = "Январь", j, 0) & "', " & _
        "'" & IIf(Me.[Месяц].Value = "Февраль", j, 0) & "', " & _
        "'" & IIf(Me.[Месяц].Value = "Март", j, 0) & "');"
        CurrentProject.Connection.Execute (strSQL)
    i = i + 1
    j = j + 1
Next i
...
Рейтинг: 0 / 0
access vba помогите, запуталась с массивами
    #38504358
Фотография lbppb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
irina_irina_irina,

Что в лоб, что по лбу.

Вы в массивы 6 элементов помещаете, а пробежаться по 39 пытаетесь.

А здесь вообще песня, i-ый элемент массива MyArray приравнивается j-ому элементу массива MyArray1.
Код: vbnet
1.
MyArray [i] = MyArray1 [j]



При чем дальше массивы ни коем образом не учавствуют, зато целочисленные индексы идут прямиком в запрос.
...
Рейтинг: 0 / 0
access vba помогите, запуталась с массивами
    #38504379
irina_irina_irina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
lbppb, элементов у меня 39, я просто код для форума меньше сделала. то что у меня не правильно я и так знаю, мне и нужно подсказать как правильно, я с массивами в access никогда не работала, вот и не получается ничего. может ссылки какие кто-нибудь даст, где можно посмотреть как нужно правильно. а то я уже google замучила, а того что нужно так и не нашла. может запрос неправильно задаю(
...
Рейтинг: 0 / 0
access vba помогите, запуталась с массивами
    #38504399
Фотография lbppb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
irina_irina_irinalbppb, элементов у меня 39, я просто код для форума меньше сделала.

Предупреждать надо.

irina_irina_irinaто что у меня не правильно я и так знаю, мне и нужно подсказать как правильно, я с массивами в access никогда не работала, вот и не получается ничего.

Уважаемый Shocker.Pro вам уже написал по поводу помощи, но вы проигнорировали. Вы с массивами только в Access никогда не работали или все-таки вообще никогда в глаза не видели?

irina_irina_irinaможет ссылки какие кто-нибудь даст, где можно посмотреть как нужно правильно. а то я уже google замучила, а того что нужно так и не нашла. может запрос неправильно задаю(

Если вы хотя бы намекнете, какие ссылки, на что вы хотите посмотреть, что правильно, а то варианты самые разные в голову приходят.
...
Рейтинг: 0 / 0
access vba помогите, запуталась с массивами
    #38504533
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
irina_irina_irina ,
так что у Вас за ошибка возникает сейчас?
...
Рейтинг: 0 / 0
access vba помогите, запуталась с массивами
    #38504536
irina_irina_irina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
lbppb, ну я же писала что мне нужно прописать цикл для каждого элемента 1-го массива, но при этом в цикле нужно сослаться на элемент 2-го массива, равного по индексу элементу из 1-го. как работать с одним массивом есть куча информации, а вот как с двумя приравняв текст и число нигде найти не могу. понимаю что по индексу, но как правильно это сделать. все варианты кодов которые я пробую, не выдают ошибку, они либо выводят не то, либо вообще ничего не выводят. ошибка скорее всего только в том, что я массивы сравниваю не правильно. как мне их правильно сравнить по индексу, чтобы потом вывести элементы равные по индексу.
...
Рейтинг: 0 / 0
access vba помогите, запуталась с массивами
    #38504546
irina_irina_irina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Dim strSQL As String
Dim MyArray As Variant
Dim i As Variant
Dim MyArray1 As Variant
Dim j As Variant

MyArray = Array("лист 09Г2С б10", "лист 09Г2С б12", "лист 09Г2С б20", "лист 09Г2С б22", "лист ст.3", "лист нержавеющий")
MyArray1 = Array(Me.[лист 09Г2С б10].Value, Me.[лист 09Г2С б12].Value, Me.[лист 09Г2С б20].Value, Me.[лист 09Г2С б22].Value, "" _
& Me.[лист ст.3].Value, Me.[лист нержавеющий].Value)

For i = 0 To UBound(MyArray)
    For j = i To UBound(MyArray1)
        strSQL = "INSERT INTO Остатки([3 уровень вагона], [Вид затраты], Январь, Февраль, Март) values " & _
        "('" & Me.[3 уровень вагона].Value & "', '" & MyArray(i) & "', " & _
        "'" & IIf(Me.[Месяц].Value = "Январь", MyArray(j), 0) & "', " & _
        "'" & IIf(Me.[Месяц].Value = "Февраль", MyArray(j), 0) & "', " & _
        "'" & IIf(Me.[Месяц].Value = "Март", MyArray(j), 0) & "');"
        CurrentProject.Connection.Execute (strSQL)
    Next j
Next i



Так выводит то что нужно, но не совсем корректно, элементов в обоих массивах 39, записей должно получится 39. Но записей получается 39 для первого MyArray(i), 38 для второго MyArray(i) и т.д. Здесь я видимо уже с циклами накосячила(
...
Рейтинг: 0 / 0
access vba помогите, запуталась с массивами
    #38504549
irina_irina_irina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблему решила) всем спасибо) код, если вдруг кому нужно будет
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Dim strSQL As String
Dim MyArray As Variant
Dim i As Variant
Dim MyArray1 As Variant
Dim j As Variant

MyArray = Array("лист 09Г2С б10", "лист 09Г2С б12", "лист 09Г2С б20", "лист 09Г2С б22", "лист ст.3", "лист нержавеющий")
MyArray1 = Array(Me.[лист 09Г2С б10].Value, Me.[лист 09Г2С б12].Value, Me.[лист 09Г2С б20].Value, Me.[лист 09Г2С б22].Value, "" _
& Me.[лист ст.3].Value, Me.[лист нержавеющий].Value)

j = 0
For i = 0 To UBound(MyArray)
    If j = i Then
        strSQL = "INSERT INTO Остатки([3 уровень вагона], [Вид затраты], Январь, Февраль, Март) values " & _
        "('" & Me.[3 уровень вагона].Value & "', '" & MyArray(i) & "', " & _
        "'" & IIf(Me.[Месяц].Value = "Январь", MyArray(j), 0) & "', " & _
        "'" & IIf(Me.[Месяц].Value = "Февраль", MyArray(j), 0) & "', " & _
        "'" & IIf(Me.[Месяц].Value = "Март", MyArray(j), 0) & "');"
        CurrentProject.Connection.Execute (strSQL)
    Enf If
    j = j + 1
Next i
...
Рейтинг: 0 / 0
access vba помогите, запуталась с массивами
    #38504572
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что, Аксесс не поддерживает переменные привязки?
...
Рейтинг: 0 / 0
access vba помогите, запуталась с массивами
    #38504939
Фотография lbppb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
irina_irina_irina,

Зачем вам два индекса? Вот так не проще?

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
For i = 0 To UBound(MyArray)
        strSQL = "INSERT INTO Остатки([3 уровень вагона], [Вид затраты], Январь, Февраль, Март) values " & _
        "('" & Me.[3 уровень вагона].Value & "', '" & MyArray(i) & "', " & _
        "'" & IIf(Me.[Месяц].Value = "Январь", MyArray(i), 0) & "', " & _
        "'" & IIf(Me.[Месяц].Value = "Февраль", MyArray(i), 0) & "', " & _
        "'" & IIf(Me.[Месяц].Value = "Март", MyArray(i), 0) & "');"
        CurrentProject.Connection.Execute (strSQL)
Next i



Вы забыли, что у вас два разных массива в запросе, MyArray1 потерялся.
...
Рейтинг: 0 / 0
access vba помогите, запуталась с массивами
    #38505384
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
irina_irina_irinaПроблему решила) всем спасибо) код, если вдруг кому нужно будет
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Dim strSQL As String
Dim MyArray As Variant
Dim i As Variant
Dim MyArray1 As Variant
Dim j As Variant

MyArray = Array("лист 09Г2С б10", "лист 09Г2С б12", "лист 09Г2С б20", "лист 09Г2С б22", "лист ст.3", "лист нержавеющий")
MyArray1 = Array(Me.[лист 09Г2С б10].Value, Me.[лист 09Г2С б12].Value, Me.[лист 09Г2С б20].Value, Me.[лист 09Г2С б22].Value, "" _
& Me.[лист ст.3].Value, Me.[лист нержавеющий].Value)

j = 0
For i = 0 To UBound(MyArray)
    If j = i Then
        strSQL = "INSERT INTO Остатки([3 уровень вагона], [Вид затраты], Январь, Февраль, Март) values " & _
        "('" & Me.[3 уровень вагона].Value & "', '" & MyArray(i) & "', " & _
        "'" & IIf(Me.[Месяц].Value = "Январь", MyArray(j), 0) & "', " & _
        "'" & IIf(Me.[Месяц].Value = "Февраль", MyArray(j), 0) & "', " & _
        "'" & IIf(Me.[Месяц].Value = "Март", MyArray(j), 0) & "');"
        CurrentProject.Connection.Execute (strSQL)
    Enf If
    j = j + 1
Next i



irina_irina_irina, это не совсем корректный код, при определённых условиях он вам ничего не выдаст
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / access vba помогите, запуталась с массивами
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]