Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как правильно написать цикл / 17 сообщений из 17, страница 1 из 1
27.07.2009, 15:37
    #36111279
user999
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно написать цикл
У меня есть 10 лейблов. Нужно расположить их определенным образом.
Расположение нужно сделать в цикле. Выдает ошибку. Не могу в цикле написать названия объектов (Н-р: N1, N2, N3)
Вот код, пробовал разными способами:
Код: plaintext
1.
2.
3.
4.
5.
6.
For i =  1  To  10 
    Вариант1: N(i).Top =  400 
    Вариант2: N & i.Top =  400 
    Вариант3: M = N & i или N(i)
                   M.Top =  400 
Next i
...
Рейтинг: 0 / 0
27.07.2009, 15:40
    #36111289
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно написать цикл
Нужно из лейблов сделать массив, присвоив им одинаковое имя.

Jah loves you.
...
Рейтинг: 0 / 0
27.07.2009, 15:46
    #36111313
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно написать цикл
На форме 3 Label и 2 кнопки
Код: plaintext
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.
Option Explicit

Private Sub Command1_Click()
Dim i As Long
For i =  1  To  3 
    With Me.Controls("Label" & CStr(i))
        .Top =  500  * i
        .Left =  100 
    End With
Next i
End Sub

Private Sub Command2_Click()
Dim i As Long
Dim lab( 1  To  3 ) As Label
Set lab( 1 ) = Me.Label1
Set lab( 2 ) = Me.Label2
Set lab( 3 ) = Me.Label3

For i =  1  To  3 
    With lab(i)
        .Top =  750  * i
        .Left =  1000 
    End With
Next i
End Sub

Можно ещё и с TypeOf поигратся, вообщем есть где развернутся :)


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
28.07.2009, 09:47
    #36112544
user999
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно написать цикл
To Игорь Горбонос

Вариант
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Dim i As Long
For i =  1  To  3 
    With Me.Controls("Label" & CStr(i))
        .Top =  500  * i
        .Left =  100 
    End With
Next i

То что надо. Спасибо
...
Рейтинг: 0 / 0
28.07.2009, 13:14
    #36113168
user999
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно написать цикл
Прошу еще раз помочь.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Dim i As Long
For i =  1  To  3 
    With Me.Controls("Label" & CStr(i))
        .Top =  500  * i
        .Left =  100 
    End With
Next i
 
Как присвоить названия? .Caption =
Вставляю в цикл запрос типа:
strSQL = "SELECT Группы.[НаименованиеГруппы] AS [Группа] FROM [Группы] ORDER BY [НаименованиеГруппы];"
G = CurrentProject.Connection.Execute(strSQL).Fields(0)
.Caption = G

Естественно все надписи с первым значением из запроса.
Как изменить запрос?
LIMIT в Access не работает
В PHP можно было бы G сделать массивом.

Как в VBA не знаю.
...
Рейтинг: 0 / 0
28.07.2009, 14:02
    #36113325
mds_world
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно написать цикл
user999LIMIT в Access не работает
В PHP можно было бы G сделать массивом.
Вместо LIMIT используется Top
Select Top 10 ...



По поводу "можно было бы G сделать массивом" смотрите в хелпе метод GetRows
...
Рейтинг: 0 / 0
29.07.2009, 12:23
    #36115239
user999
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно написать цикл
Что тот не получается:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
For i =  1  To R
Dim rs As DAO.Recordset
Dim strSQL As String
Dim MyArray As Variant
strSQL = "SELECT Группы.[НаименованиеГруппы] FROM [Группы];"
Set rs = CurrentDb.OpenRecordset(strSQL)
MyArray = rs.GetRows()

MsgBox MyArray(i,  0 )
Next i
...
Рейтинг: 0 / 0
29.07.2009, 12:39
    #36115274
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно написать цикл
а что вы внутрь цикла то засунули и объявления и выборку данных?
...
Рейтинг: 0 / 0
29.07.2009, 12:43
    #36115284
user999
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно написать цикл
Да без разницы, можно и так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Dim rs As DAO.Recordset
Dim strSQL As String
Dim MyArray As Variant
strSQL = "SELECT Группы.[НаименованиеГруппы] FROM [Группы];"
Set rs = CurrentDb.OpenRecordset(strSQL)
MyArray = rs.GetRows()

For i =  1  To R
MsgBox MyArray(i,  0 )
Next i
Все равно ошибка
...
Рейтинг: 0 / 0
29.07.2009, 12:52
    #36115308
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно написать цикл
user999Все равно ошибка

Блин! ошибка в 17 строке!
Какая ошибка? может выход за границы массива , может пустой рекордсет, может вообще при выполнении запроса что-то происходит.
Текст ошибки можно взять в окне Immedate набрав следующий текст: ? err.description и нажав на Ентер. Окно Immedate можно вызвать нажав Ctrl+G или в меню View пункт Immedate Window.

З.Ы. И без текста ошибки не приходите
...
Рейтинг: 0 / 0
29.07.2009, 12:56
    #36115321
user999
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно написать цикл
Subscript out of range
...
Рейтинг: 0 / 0
29.07.2009, 13:09
    #36115379
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно написать цикл
Код: plaintext
1.
2.
For i =  1  To R
MsgBox MyArray(i,  0 )
Next i

что такое R? где она у вас задается?

напишите так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
If IsArray(MyArray) Then
For i = LBound(MyArray) To UBound(MyArray)

...

Next i
End if
...
Рейтинг: 0 / 0
29.07.2009, 13:58
    #36115514
user999
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно написать цикл
Работает только так:

Код: plaintext
1.
MsgBox MyArray( 0 ,  0 )
или
Код: plaintext
1.
MsgBox MyArray(i, i)
где i начинается с 0

Выводит первое значение из массива, а потом выдает ошибку (когда в цикле i становится = 1)

Т.е. вывести поочереди все значения массива не получается
...
Рейтинг: 0 / 0
29.07.2009, 14:40
    #36115630
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно написать цикл
> Автор: user999
> Работает только так:

Значит у вас двухмерный массив с одной строкой
> Выводит первое значение из массива, а потом выдает ошибку (когда в цикле i становится = 1)

Естественно, потому, что пытаетесь вывести содержимое массива с координатами 1,1 а если там одна строка, получаете
ошибку выхода за границы массива.
Код: plaintext
1.
2.
3.
4.
5.
Dim i As Long, j As Long
For i = LBound(MyArray,  1 ) to UBound(MyArray,  1 )
       For j = LBound(MyArray,  2 ) To UBound(MyArray,  2 )
              MsgBox MyArray(i, j)
       Next j
Next i

> Т.е. вывести поочереди все значения массива не получается
;)


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
30.07.2009, 08:41
    #36116875
user999
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно написать цикл
Игорь Горбонос,

Все равно выводит только значение первой строки, а в таблице их 7.
Таблица состоит из 2-х полей: Код и НаименованиеГруппы. Заполнено 7 строк.

Неужели у Вас работает написанный Вами код, а у меня нет. Казалось бы простая задача.
...
Рейтинг: 0 / 0
30.07.2009, 09:19
    #36116937
mds_world
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно написать цикл
Код: plaintext
1.
2.
3.
4.
................................
Set rs = CurrentDb.OpenRecordset(strSQL)
rs.MoveLast: rs.MoveFirst
MyArray = rs.GetRows(rs.RecordCount)
...............................
...
Рейтинг: 0 / 0
30.07.2009, 09:28
    #36116962
user999
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно написать цикл
Разобрался, загвоздка была в
MyArray = rs.GetRows()

нужно было

MyArray = rs.GetRows(R)

где R количество строк в запросе
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как правильно написать цикл / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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