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


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

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

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

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

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
for each ... in ... не работает. Помогите.
    #32255616
S. Fedorenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OK тогда как мне перебрать все контролы в закрытых формах
...
Рейтинг: 0 / 0
for each ... in ... не работает. Помогите.
    #32255623
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Открывать их, например в режиме конструктора.
...
Рейтинг: 0 / 0
for each ... in ... не работает. Помогите.
    #32255626
Sfagnum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
или Hide
...
Рейтинг: 0 / 0
for each ... in ... не работает. Помогите.
    #32255649
assa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот работает в Акс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
9 сообщений из 9, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / for each ... in ... не работает. Помогите.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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