Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / access vba помогите, запуталась с массивами / 25 сообщений из 25, страница 1 из 1
16.12.2013, 12:05
    #38501939
irina_irina_irina
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
access vba помогите, запуталась с массивами
написала код
Код: 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
16.12.2013, 12:10
    #38501945
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
access vba помогите, запуталась с массивами
Если немного вспомнить английский, будет понятно, где ошибка
Код: vbnet
1.
For Each element In MyArray

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

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

1. а где определено что такое переменная element ?
2. MyArray - тип Variant, element - тип string
3. в цикл For Each не завершен, отсутствует оператор Next
4. В цикле хотите перебрать массив входяший в переменную element
...
Рейтинг: 0 / 0
16.12.2013, 12:19
    #38501962
irina_irina_irina
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
access vba помогите, запуталась с массивами
Shocker.Pro, так пишет Object required
...
Рейтинг: 0 / 0
16.12.2013, 12:45
    #38502014
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
access vba помогите, запуталась с массивами
irina_irina_irinaShocker.Pro, так пишет Object requiredскорее всего уже не на этой строке, а ругается на element.Value. У element нет Value, будь то String или Variant
...
Рейтинг: 0 / 0
16.12.2013, 12:49
    #38502018
irina_irina_irina
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
access vba помогите, запуталась с массивами
Shocker.Pro, думаю что вы правы, потому что желтым выделяет((( как быть в этой ситуации? прописать без Value или что-то еще?
...
Рейтинг: 0 / 0
16.12.2013, 12:50
    #38502023
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
access vba помогите, запуталась с массивами
Если бы я знал, что вы хотите от element.Value, то может что-нибудь и подсказал бы
...
Рейтинг: 0 / 0
16.12.2013, 12:57
    #38502035
irina_irina_irina
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
access vba помогите, запуталась с массивами
Shocker.Pro, в 1ом сообщении подписано комментариями, нужно чтобы сначала выводилось текстом название затраты (перечислена в массиве), а далее числовое значение указанное на форме для этой затраты. и так по каждой затрате. но мне наверное придется тогда объявлять 2 массива: 1 с текстовыми значениями, а другой с числовыми, только как их потом связать не понимаю.
...
Рейтинг: 0 / 0
16.12.2013, 13:13
    #38502052
irina_irina_irina
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
access vba помогите, запуталась с массивами
Shocker.ProЕсли бы я знал, что вы хотите от element.Value, то может что-нибудь и подсказал бы
Созрела до формулировки мысли) если у меня будет два массива, то мне нужно прописать условие типа
если из массива1-элемент1, то из массива2-элемент1,
массива1-элемент2, то из массива2-элемент2, и т.д.
В какую сторону копать для осуществления мысли.
...
Рейтинг: 0 / 0
16.12.2013, 13:35
    #38502086
lbppb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
access vba помогите, запуталась с массивами
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
16.12.2013, 13:45
    #38502105
irina_irina_irina
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
access vba помогите, запуталась с массивами
lbppb, ругается на "свой" тип
...
Рейтинг: 0 / 0
16.12.2013, 14:04
    #38502141
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
access vba помогите, запуталась с массивами
Ирина,

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

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

3) (необязательный пункт) если вы не будете разворачивать мысль, что вы хотите сделать (ограничиваясь, как в первом посте фразами типа "должно записаться значение"), мы не сможем вам предложить вам более оптимальные пути решения вашей задачи
...
Рейтинг: 0 / 0
17.12.2013, 21:05
    #38504270
irina_irina_irina
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
access vba помогите, запуталась с массивами
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
17.12.2013, 21:06
    #38504272
irina_irina_irina
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
access vba помогите, запуталась с массивами
фигня какая-то с кодом, сейчас скину ещё раз
...
Рейтинг: 0 / 0
17.12.2013, 21:12
    #38504276
irina_irina_irina
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
access vba помогите, запуталась с массивами
Код: 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
17.12.2013, 22:51
    #38504358
lbppb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
access vba помогите, запуталась с массивами
irina_irina_irina,

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

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

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



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

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

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

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

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

Если вы хотя бы намекнете, какие ссылки, на что вы хотите посмотреть, что правильно, а то варианты самые разные в голову приходят.
...
Рейтинг: 0 / 0
18.12.2013, 08:05
    #38504533
HandKot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
access vba помогите, запуталась с массивами
irina_irina_irina ,
так что у Вас за ошибка возникает сейчас?
...
Рейтинг: 0 / 0
18.12.2013, 08:12
    #38504536
irina_irina_irina
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
access vba помогите, запуталась с массивами
lbppb, ну я же писала что мне нужно прописать цикл для каждого элемента 1-го массива, но при этом в цикле нужно сослаться на элемент 2-го массива, равного по индексу элементу из 1-го. как работать с одним массивом есть куча информации, а вот как с двумя приравняв текст и число нигде найти не могу. понимаю что по индексу, но как правильно это сделать. все варианты кодов которые я пробую, не выдают ошибку, они либо выводят не то, либо вообще ничего не выводят. ошибка скорее всего только в том, что я массивы сравниваю не правильно. как мне их правильно сравнить по индексу, чтобы потом вывести элементы равные по индексу.
...
Рейтинг: 0 / 0
18.12.2013, 08:49
    #38504546
irina_irina_irina
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
access vba помогите, запуталась с массивами
Код: 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
18.12.2013, 08:58
    #38504549
irina_irina_irina
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
access vba помогите, запуталась с массивами
Проблему решила) всем спасибо) код, если вдруг кому нужно будет
Код: 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
18.12.2013, 09:31
    #38504572
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
access vba помогите, запуталась с массивами
А что, Аксесс не поддерживает переменные привязки?
...
Рейтинг: 0 / 0
18.12.2013, 12:41
    #38504939
lbppb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
access vba помогите, запуталась с массивами
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
18.12.2013, 16:11
    #38505384
HandKot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
access vba помогите, запуталась с массивами
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
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / access vba помогите, запуталась с массивами / 25 сообщений из 25, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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