Access 2000 - стереть несколько форм? - PullRequest
2 голосов
/ 11 января 2010

В любом случае, чтобы стереть несколько форм, запросов и т. Д. В Access 2000? (В конструкторе то есть).

Ответы [ 3 ]

3 голосов
/ 08 октября 2013

Это работало лучше для меня. Попытка удалить элементы в самом цикле продолжала иметь проблемы. Я просто добавил имена объектов в массив, а затем удалил их.

Public Sub DeleteAllFormsAndReports()

Dim accobj As AccessObject
Dim X As Integer
Dim iObjCount As Integer
Dim sObjectNames() As String

If MsgBox("Are you sure you want to delete all of the forms and reports?", vbCritical + vbYesNo) = vbYes Then
    ReDim sObjectNames(0)
    For Each accobj In CurrentProject.AllForms
        ReDim Preserve sObjectNames(UBound(sObjectNames) + 1)
        sObjectNames(UBound(sObjectNames)) = accobj.Name
    Next accobj

    For X = 1 To UBound(sObjectNames)
        DoCmd.DeleteObject acForm, sObjectNames(X)
    Next X

    ReDim sObjectNames(0)
    For Each accobj In CurrentProject.AllReports
        ReDim Preserve sObjectNames(UBound(sObjectNames) + 1)
        sObjectNames(UBound(sObjectNames)) = accobj.Name
    Next accobj

    For X = 1 To UBound(sObjectNames)
        DoCmd.DeleteObject acReport, sObjectNames(X)
    Next X

End If

End Sub

2 голосов
/ 12 марта 2012

Я создаю много запросов на лету, когда пользователь выполняет определенные действия. Итак, я создам запрос, затем удалю запрос, как только они закроют форму. Я делаю это в рамках события On Close. Он запускается независимо от того, был ли создан запрос или нет. Итак, чтобы предотвратить ошибку, я говорю Resume Next.

Private Sub Form_Close()
    On Error Resume Next
    DoCmd.Close acReport, "EmployeeDetails"
    DoCmd.DeleteObject acQuery, "MyEmployeeDetails"
End Sub
1 голос
/ 12 января 2010

Вы можете удалять объекты с помощью VBA. При удалении из коллекции обязательно сделайте шаг назад, например, этот код удалит довольно много объектов:

Dim db As Database
Dim idx As Long
Dim strName As String

Set db = CurrentDb

    ''Forms
    For idx = CurrentProject.AllForms.Count - 1 To 0 Step -1
        strName = CurrentProject.AllForms(idx).Name
        DoCmd.DeleteObject acForm, strName
    Next idx

    ''Reports
    For idx = CurrentProject.AllReports.Count - 1 To 0 Step -1
        strName = CurrentProject.AllReports(idx).Name
        DoCmd.DeleteObject acReport, strName
    Next idx

    ''Modules
    For idx = CurrentProject.AllModules.Count - 1 To 0 Step -1
        strName = CurrentProject.AllModules(idx).Name
        If strName <> "Module9" Then
            DoCmd.DeleteObject acModule, strName
        End If
    Next idx

    ''Queries
    For idx = db.QueryDefs.Count - 1 To 0 Step -1
        strName = db.QueryDefs(idx).Name
        If Left(strName, 4) <> "~sq_" Then
            db.QueryDefs.Delete strName
        Else
            Debug.Print strName
        End If
    Next idx

    ''Relationships
    For idx = db.Relations.Count - 1 To 0 Step -1
        strName = db.Relations(idx).Name

        If Left(strName, 4) <> "msys" Then
            db.Relations.Delete strName
        Else
            Debug.Print strName
        End If
    Next idx

    ''Tables
    For idx = db.TableDefs.Count - 1 To 0 Step -1
        strName = db.TableDefs(idx).Name
        If Left(strName, 4) <> "msys" Then
            db.TableDefs.Delete strName
        Else
            Debug.Print strName
        End If
    Next idx
...