3

我通常在 Excel 2007 中完成大部分工作,但我认为 Excel 不是管理我需要处理的数据的正确工具。所以我正在尝试将一个 excel 电子表格转换为一个 Access 2007 db,我可以毫无问题地做到这一点,但在对电子表格做任何事情之前,我会通过清理其中的数据以使用结果信息的过程。在excel中,我使用如下宏

Sub deletedExceptions_row()
    Dim i As Long
    Dim ws As Worksheet

    On Error GoTo whoa

    Set ws = Sheets("data") 

    With ws
        For i = .Cells.SpecialCells(xlCellTypeLastCell).Row To 1 Step -1
            If .Cells(i, 3) = "" Or _
              VBA.Left(.Cells(i, 3), 4) = "511-" Or _
              VBA.Left(.Cells(i, 3), 5) = "CARL-" Then
                .Rows(i).Delete
            End If
        Next i
    End With
    Exit Sub
whoa:
    MsgBox "Value of i is " & i
End Sub

删除电子表格中不必要的记录我将如何在 Access 2007 中完成同样的事情。

该宏正在查找特定部分,或者更确切地说是记录第三个字段的前几个字符,以确定是否需要删除整个记录(例如 511-QWTY-SVP 或 CARL-52589-00)。总共有大约 180 个这样的字符类型会影响需要从电子表格中删除的 1000 行,但我想在 Access 2007 中复制相同的过程,但不知道如何。

感谢大家这个问题的帮助

4

4 回答 4

3

在 Access 中,您可以执行DELETE语句以丢弃字段中的值为空字符串 ("") 或与您的模式之一匹配的行。

DELETE FROM YourTable
WHERE
       YourField = ""
    OR YourField ALike "511-%"
    OR YourField ALike "CARL-%";

使用索引,WHERE 子句中的模式匹配比使用电子表格宏等函数YourField的查询提供了潜在的巨大性能改进。Left()IOW,以下查询将要求 db 引擎在YourTable. 但是通过上面的查询和YourField索引,数据库引擎可以简单地选择匹配的行......这很容易快一个数量级。

DELETE FROM YourTable
WHERE
       YourField = ""
    OR Left(YourField, 4) = "511-"
    OR Left(YourField, 5) = "CARL-";
于 2012-07-04T14:45:24.937 回答
3
Sub DeleteRows(strVal as string)
     strVal = Trim(strVal)
     if strVal = "" then exit sub
     dim dbs as Database
     set dbs = CurrentDB
     dbs.execute "Delete * FROM YOURTABLE where YOURFIELD Like '" & strVal & "*'"
     set dbs = Nothing
End Sub

然后为每个项目调用它

DeleteRows("Carl-")
DeleteRows("511-")
于 2012-07-04T15:30:19.897 回答
2

鉴于您有 180 个可能的问题行,创建一个问题列表表可能是有意义的。例如:

Excel导入

ID  ARow
1   Carl-abdre
2   511-ferw2
3   wywr-carl
4   123-456

问题清单

Problem
511-
Carl-

询问

DELETE 
FROM ExcelImport
WHERE ExcelImport.ID In (
    SELECT ID 
    FROM ExcelImport, ProblemList 
    WHERE ARow Like [Problem] & "*" Or ARow & ""="")

查询后导入Excel

ID  ARow
3   wywr-carl
4   123-456
于 2012-07-04T15:38:00.617 回答
0

您使用 SQL 语言管理数据库数据。对于访问,请检查:

http://msdn.microsoft.com/en-us/library/bb177896%28v=office.12%29.aspx

Sub DeleteX()

    Dim dbs As Database, rst As Recordset
    Set dbs = OpenDatabase("Northwind.mdb")

    dbs.Execute "DELETE * FROM " _
        & "Employees WHERE Title ALike 'FOOBAR-%';"
    dbs.Close
End Sub
于 2012-07-04T14:46:43.113 回答