Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / for each ... in ... не работает. Помогите. / 9 сообщений из 9, страница 1 из 1
04.09.2003, 11:06
    #32255567
S. Fedorenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
for each ... in ... не работает. Помогите.
Код: plaintext
1.
2.
3.
Dim myform As Form
For Each myform In Forms
MsgBox myform.Name
Next myform


Помогите, кто может. Начинаю выполнять, она доходит до For Each и останавливается. Как будто форм в базе нету. Сам цикл For Each работает, если я указываю конкретную форму и перебираю все элементы управления.

Вообще, задача такая:
Надо во всех формах и отчетах в надписях изменять одно слово на другое. Форм в базе - хренова туча и вручную ковырять не очень хочется.

Если кто знает другой способ, подскажите, пожалуйста.
...
Рейтинг: 0 / 0
04.09.2003, 11:11
    #32255576
mahoune
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
for each ... in ... не работает. Помогите.
А если так:
Код: plaintext
1.
2.
3.
4.
Dim fMyForm As Variant
    For Each fMyForm In CurrentProject.AllForms
      MsgBox fMyForm.NAME
    Next fMyForm

mahoune
...
Рейтинг: 0 / 0
04.09.2003, 11:14
    #32255579
S. Fedorenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
for each ... in ... не работает. Помогите.
ОГРОМЕННОЕ СПАСИБО.
Почему-то For Each myform In Forms учитывает только активные формы.
...
Рейтинг: 0 / 0
04.09.2003, 11:18
    #32255587
sasha_1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
for each ... in ... не работает. Помогите.
>Почему-то For Each myform In Forms учитывает только активные формы.
не почему-то, а так и задумано.
...
Рейтинг: 0 / 0
04.09.2003, 11:18
    #32255590
mahoune
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
for each ... in ... не работает. Помогите.
Потомучто:

Forms Property

You can use the Forms property to return a reference to the Forms collection and its related properties.

Setting
This property is available only by using Visual Basic and is read-only.

Remarks
The properties of the Forms collection in Visual Basic refer to forms that are currently open.

И соответстыенно:

AllForms Collection
The AllForms collection contains an AccessObject object for each form in the CurrentProject or CodeProject object.

mahoune
...
Рейтинг: 0 / 0
04.09.2003, 11:32
    #32255616
S. Fedorenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
for each ... in ... не работает. Помогите.
OK тогда как мне перебрать все контролы в закрытых формах
...
Рейтинг: 0 / 0
04.09.2003, 11:36
    #32255623
Geo
Geo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
for each ... in ... не работает. Помогите.
Открывать их, например в режиме конструктора.
...
Рейтинг: 0 / 0
04.09.2003, 11:40
    #32255626
Sfagnum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
for each ... in ... не работает. Помогите.
или Hide
...
Рейтинг: 0 / 0
04.09.2003, 11:50
    #32255649
assa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
for each ... in ... не работает. Помогите.
вот работает в Акс97 (AllForms в отсутствии). А явные объявления циклов - для максимальной совместимости еще с Акс2.0 (остается токо массовую замену DoCmd.xxx - DoCmd xxx и т.п.)
Код: 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.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
Function RedSqlProperty(StrFr As String, StrTo As String)
Dim aFm As document, fCnt As Container, db As Database
    Set db = CurrentDb()
Dim aFmNAME As String, sSQL As String
Dim aCntrl As Control
Dim aPrp As Property
Dim i As Long, j As Long, k As Long
Dim aFmF As Form
On Error Resume Next
    Set fCnt = db.Containers( "Forms" )
    For i =  0  To fCnt.Documents.Count -  1 
        Set aFm = fCnt.Documents(i)
        aFmNAME = aFm.Name
        DoCmd.OpenForm aFm.Name, A_DESIGN
        Set aFmF = Forms(aFmNAME)
        For k =  0  To aFmF.Count -  1 
            Set aCntrl = aFmF(k)
            For j =  0  To aCntrl.Properties.Count -  1 
                Set aPrp = aCntrl.Properties(j)
                If aPrp.TYPE =  8  Then
                    If InStr(aPrp.Value, StrFr) Then
                        If Err =  0  Then
                            sSQL = aPrp.Value
                            Debug.Print  ""; aPrp.Name; aCntrl.Name
                            Debug.Print aPrp.Value
                            Do While InStr(sSQL, StrFr) > 0 
                                Call replaceStr(sSQL, StrFr, StrTo)
                            Loop
                            aPrp.Value = sSQL
                        Else
                            Err =  0 
                        End If
                    End If
                End If
            Next j
        Next k
        DoCmd.Close A_FORM, aFmNAME, acSaveYes
    Next i
    Set fCnt = db.Containers("Reports ")
    For i = 0  To fCnt.Documents.Count -  1 
        Set aFm = fCnt.Documents(i)
        aFmNAME = aFm.Name
        DoCmd.OpenReport aFm.Name, A_DESIGN
        For k =  0  To Reports(aFmNAME).Count -  1 
            Set aCntrl = Reports(aFmNAME)(k)
            For j =  0  To aCntrl.Properties.Count -  1 
                Set aPrp = aCntrl.Properties(j)
                If aPrp.TYPE =  8  Then
                    If InStr(aPrp.Value, StrFr) Then
                        If Err =  0  Then
                            sSQL = aPrp.Value
                            Debug.Print ""; aPrp.Name; aCntrl.Name
                            Debug.Print aPrp.Value
                            Do While InStr(sSQL, StrFr) >  0 
                                Call replaceStr(sSQL, StrFr, StrTo)
                            Loop
                            aPrp.Value = sSQL
                        Else
                            Err =  0 
                        End If
                    End If
                End If
            Next j
        Next k
        DoCmd.Close A_REPORT, aFmNAME, acSaveYes
    Next i
    Set fCnt = Nothing
    Set db = Nothing

End Function

/проц replaceStr(sSQL, StrFr, StrTo) заменить на что-нить стандартное или свое)

шибко над красивостью не трудился. но работает.
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / for each ... in ... не работает. Помогите. / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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