2010-01-11 50 views
2

无论如何删除Access 2000中的多个窗体,查询等? (在设计师那里)。Access 2000 - 删除多个表单?

+0

通过“抹去”你的意思是删除对象还是你的意思是清除显示在打开的窗体或查询的数据? – 2010-01-11 18:56:45

+0

删除对象。 – Alex 2010-01-12 03:35:54

+0

你介意标记我的答案,如果它有帮助吗?我可以使用代表。 :) – jfw 2014-11-21 22:10:49

回答

1

您可以使用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 
2

当用户执行某些操作我创造了很多的查询上飞的。所以,我将创建查询,然后在关闭表单后删除查询。我在On Close事件下执行此操作。无论查询是否创建,它都会运行。所以,为了防止出现错误,我将它告诉Resume Next。

Private Sub Form_Close() 
    On Error Resume Next 
    DoCmd.Close acReport, "EmployeeDetails" 
    DoCmd.DeleteObject acQuery, "MyEmployeeDetails" 
End Sub 
2

这对我更好。试图去除循环中的元素一直存在问题。我只是将对象名称放入数组中,然后将其删除。

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 

末次