利用VBA,把工作表中提供的數據在資料庫表中逐一刪除

2021-01-08 VBA語言專家

大家好,我們今日繼續講解VBA資料庫解決方案的第24講內容:利用VBA,把工作表中提供的數據在數據表中刪除。在上一講中,我們講了利用rsADO.addnew 和 rsADO.Update 語句實現在數據表添加記錄的方法,今日我們講解,如何在記錄集中刪除記錄。也是在有重複記錄的數據表中刪除記錄的方法,如果有重複的數據將一併刪除。

實例:我們仍是利用之前的資料庫中的數據進行處理,數據如下:

我們要把上面3月份的記錄要全部刪除,為什麼要刪除呢?或許是我們是錄入錯誤吧,也或許是數據需要重新再確認,總之我們要刪除這些已經錄入的記錄,好在我們在ECXEL表格中還有這些記錄,需要按這些記錄來刪除數據表中的記錄。也許在職場中的你很熟悉上述的場景吧。

下面是EXCEL工作表中還存在的記錄:

下面我們就解決如何刪除這些記錄,代碼如下:

Sub mynzCreateDataTable_2() ' 第24講利用VBA把工作表中提供的數據在數據表中刪除

Dim cnADO As New ADODB.Connection

Dim rsADO As ADODB.Recordset

Dim strPath, strSQL, strTable As String

strPath = ThisWorkbook.Path & "\mydata2.accdb"

strTable = "19年銷售情況"

cnADO.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strPath

strSQL = "SELECT * FROM " & strTable

Set rsADO = New ADODB.Recordset

rsADO.Open strSQL, cnADO, 1, 3

'匯報給用戶記錄數

MsgBox "刪除前記錄數為:" & rsADO.RecordCount

Sheets("Sheet4").Select

'刪除記錄

t = 2

Do While Cells(t, 1) <> ""

GG = ""

rsADO.MoveFirst

For m = 1 To rsADO.RecordCount

SC = ""

For i = 0 To rsADO.Fields.Count - 1

If rsADO.Fields(i) = Sheets("Sheet4").Cells(t, i + 1) Then

SC = SC & "OK"

Else

SC = SC & "NOT"

End If

Next i

If InStr(SC, "NOT") = 0 Then

rsADO.Delete

rsADO.Update

GG = "OK"

End If

rsADO.MoveNext

Next m

If GG <> "OK" Then MsgBox "第" & t & "行數據沒有找到,無法刪除"

t = t + 1

Loop

'匯報給用戶最後的記錄數

MsgBox "刪除後記錄數為:" & rsADO.RecordCount

rsADO.Close

cnADO.Close

Set rsADO = Nothing

Set cnADO = Nothing

End Sub

代碼截圖:

代碼講解:

1 Dim cnADO As New ADODB.Connection

Dim rsADO As ADODB.Recordset

Dim strPath, strSQL, strTable As String

strPath = ThisWorkbook.Path & "\mydata2.accdb"

strTable = "19年銷售情況"

cnADO.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strPath

strSQL = "SELECT * FROM " & strTable

Set rsADO = New ADODB.Recordset

rsADO.Open strSQL, cnADO, 1, 3

'匯報給用戶記錄數

MsgBox "刪除前記錄數為:" & rsADO.RecordCount

Sheets("Sheet4").Select

仍是用前期綁定的方法建立ADO,打開連接和記錄集

2 t = 2

Do While Cells(t, 1) <> ""

rsADO.MoveFirst

For m = 1 To rsADO.RecordCount

SC = ""

GG = ""

For i = 0 To rsADO.Fields.Count - 1

If rsADO.Fields(i) = Sheets("Sheet4").Cells(t, i + 1) Then

SC = SC & "OK"

Else

SC = SC & "NOT"

End If

Next i

If InStr(SC, "NOT") = 0 Then

rsADO.Delete

rsADO.Update

GG = "OK"

End If

rsADO.MoveNext

Next m

If GG <> "OK" Then MsgBox "第" & t & "行數據沒有找到,無法刪除"

t = t + 1

Loop

上述代碼中,用t記錄了當前工作表的行數,一直循環到空值出現,然後,針對每一行的數據,在數據表中校驗,如果完成相同,那麼刪除,如何判斷呢,我們用了兩個標識,一個是SC,如果每個值都相同,那麼SC中不會出現「NOT」,在最後我們判斷SC中如果沒有「NOT」,那麼我們刪除,否則向下運行。而GG的標識則是提示是否有數據沒有找到,如果沒有找到,那麼提示某行沒有找到。

在刪除數據的時候用了

rsADO.Delete

rsADO.Update

這是刪除某個數據常用的方法。

3 '匯報給用戶最後的記錄數

MsgBox "刪除後記錄數為:" & rsADO.RecordCount

rsADO.Close

cnADO.Close

Set rsADO = Nothing

Set cnADO = Nothing

在最後提示給用戶刪除的結果並釋放內存。

下面看我們程序的運行:

首先會提示當前數據的數量:

如果沒有找到數據,則有提示:

我們增加後最後一行的測試:

最後會提示有一條沒有刪除:

今日內容回向:

1 如何刪除記錄集中的數據?

2 如何根據工作表中提供的數據刪除數據表中的數據?

相關焦點

  • 把工作表中提供的特定數據在資料庫中批量刪除的方法
    大家好,我們今日繼續講解VBA資料庫解決方案的第25講內容:利用VBA,把工作表中提供的數據在數據表中批量刪除的方法。在上一講中,我們講了實現在數據表中刪除記錄的一般方法,這種方法可以對重複的數據進行處理,但實際的情況是,我們的數據記錄很多時候是沒有重複的,而且如果數據量很大,該怎麼處理呢?今日我們就講解如何在記錄集中批量刪除給定記錄的方法。
  • 利用VBA,如何在資料庫中新建查詢表,並在工作表中顯示其內容
    大家好,今日講解VBA資料庫解決方案第19講:如何在資料庫中新建一個查詢表,並在工作表中顯示出來。關於Recorsset集合的一些操作講解,在前幾講中講了很多,這裡提醒大家一點:任何對象都不是孤立存在的,要結合實際來理解。
  • 運用Excel-vba合併工作表數據
    如下圖,工作簿中共有以下幾個工作表,現希望將各張工作表中的數據合併在一起。1.打開vba編輯器:右鍵單擊任意工作表,選擇「查看代碼」。2.輸入代碼:雙擊"ThisWorkbook",在代碼窗口中輸入以下代碼:Sub 合併當前工作簿下的所有工作表()Dim ws As WorksheetDim sh As Worksheet, i%On Error Resume Next '如遇錯誤繼續運行Application.ScreenUpdating = False
  • 根據工作表中的數據,生成資料庫新數據表的方法
    大家好今日我們繼續講解VBA資料庫解決方案的第22講:如何利用工作表數據,生成資料庫新的數據表。在之前的講解中我們講了很多把數據從數據表中導出到工作表的方法,今日我們講解如何把數據由工作表存儲到資料庫中的數據表。為什麼要有這樣的操作呢?
  • 如何批量修改資料庫中的數據
    大家好,今日我們繼續VBA資料庫解決方案的第29講:如何批量修改資料庫中的記錄。在資料庫解決方案中,我在從實際應用的角度,把工作中可能遇到的各種情況都儘可能的給羅列上,我們先後講了:①如何在資料庫中動態刪除和建立數據表(第14講)②在已有的數據表中刪除、添加、修改欄位的方法(第21講);③根據工作表中的數據,生成資料庫中新的數據表的方法(第22講);④向一個已有的數據表中添加數據記錄的方法(第23講);⑤把工作表中提供的數據在數據表中逐一刪除
  • 利用VBA代碼刪除空白行,如何刪除重複數據
    大家好,今日內容仍是和大家分享VBA編程中常用的簡單「積木」過程代碼,NO.136-NO.138,內容是:插入多行表格的方法、如何刪除工作表中的空白行、刪除重複數據行等內容。其中使用UsedRange屬性返回工作表中已使用的區域。使用工作表CountA函數判斷當前行已使用單元格的數量,如果為零說明此行是空行則使用Delete刪除。 UsedRange屬性應用於Worksheet對象,返回指定工作表中已使用區域的Range對象,即返回工作表中已使用的單元格區域。
  • Excel中按照條件拆分工作表,數據透視表就能實現
    有時候我們在excel中將所有數據放在同一張工作表,但由於工作需要又不得不將他們拆分到不同的工作表中,如果數量較少的時候可以使用函數公式或者篩選的辦法,但是數據量較大又不會vba怎麼辦?今天小編分享一個極其簡單的辦法:案例1:按照班級拆分,數據量較少可以使用vlookup函數第一步:添加輔助列在A2中輸入公式=B2&COUNTIF($B$2:B2,B2),就是統計班級出現的次數第二步:提取不重複值即班級需要準備將所有班級名稱提取出來,放在不同的工作表中,做好表頭第三步:按住shift鍵選定所有工作表,在中輸入公式=IFERROR
  • 使用VBA代碼完成判斷工作表是否存在及刪除工作表的方法
    NO.174-NO.175內容是:NO. 174:如何利用VBA代碼,判斷是否為空表,如果為空表則使用Delete方法刪除NO. 175:利用VBA的自定義函數,判斷工作表是否存在 VBA過程代碼174:如何利用VBA代碼,判斷是否為空表,如果為空表則使用Delete方法刪除
  • excel數據透視表:利用數據透視表一次批量生成工作表
    工作中有時候需要批量生成工作表,像下圖,今天就講解利用數據透視表一次批量生成工作表。1、在excel工作表中輸入要批量生成的工作表的名稱。2、插入數據透視表。點擊工具欄插入—數據透視表。3、在表/區域選擇要生成工作表名稱的區域,數據透視表放置位置選擇現有工作表,位置可任意選擇,這裡選擇E12。點擊確定。4、在右側數據透視表欄位對話框,將欄位部門拖動到篩選器。5、依次點擊數據透視表工具—分析—選項—顯示報表篩選頁。在彈出的對話框中點擊確定。6、這時候會看到在下面已經生成了工作表。
  • 利用VBA代碼,輕鬆完成向工作表中添加指定圖片到指定位置
    今日分享的是第NO.215-NO.215,內容是:NO. 215:Insert方法在工作表中插入圖片********************************************************************VBA過程代碼215:Insert方法在工作表中插入圖片Sub MynzinsertPic()Dim i As
  • 如何批量刪除Excel工作表
    文/江覓如果一個工作薄中的工作表比較多,想要批量刪除工作表就顯得十分不方便,Excel vba是個特別好的工具,在此做了一個小工具,可以批量也可以選擇刪除工作表。示例通常刪除功能是一個比較具有破壞性,如果不小心刪除了重要文件,那就災難了,所以在使用Delete的時候要特別謹慎。按鈕說明此工作薄:批量刪除工作表工具工作薄,聽上去十分拗口,就是本工具的Excel工作表。打開工作薄:可以選擇想要刪除表的工作薄,這一點做得很自由,可以以窗口形式來選擇刪除工作薄。關閉工作薄:很顯然,就是把打開的工作薄關閉。
  • 工作表拆分,VBA用了30行,Python只有8行
    工作中,很多小夥伴都會遇到一些需求,將一份Excel文檔按照部門進行拆分,每個部門是一個單獨的工作表。讀者需要注意的是,多個工作表的拆分,始終在一個工作簿內操作。讓我們一起通過Python來實現。本例目標:根據指定的Excel文件按照部門拆分成多個工作表。最終效果:按照部門生成工作表。技術點:groupby()方法的使用,Excel的追加模式等。
  • 利用數組分別提取數據填入不同的工作表中
    大家好,今日我們繼續講解VBA數組與字典解決方案,今日講解第77講內容:根據數據分類不同,利用數組分別提取填入不同的工作表中。數據處理中有一塊內容是數據的分類,數據的分類一般來講也可以用兩種辦法來實現,一是數組方法,一是字典方案,在77和78講中我將就這兩種方案詳細講解,今日講解的是數組方案。
  • 利用VBA,把數據按工作表進行歸類匯總
    Arr(0, k)的數據即是供應商的名稱; ActiveWorkbook.Sheets.Add after:=Worksheets("數據備份")ActiveSheet.Name = Arr(0, k)上述代碼是把供應商的名稱作為工作表的名稱,在數據備份工作表之後插入。
  • Python和VBA巔峰對決-工作表的合併
    工作中,很多小夥伴都會遇到一些需求,將一份Excel文檔按照每個部門整理的工作表匯總為一份總的工作表。每個工作表格式都一樣,但是數量很多。傳統的方法就是手工打開文件,拷貝黏貼。費力耗時。Python提供了豐富的第三方庫,能夠靈活的的解決你在職場中遇到的問題,極大的解放了我們的雙手,留出大量的空餘時間去學習或者生活。
  • 奇妙的VBA代碼之二十八:EXCEL中,如何批量刪除工作表中的空白行
    今日講解奇妙的VBA代碼之二十八:EXCEL中,如何批量刪除工作表中的空白行。要首先講解的是Range對象的Delete方法,此方法用於刪除對象。語法:expression.Delete(Shift)參數:a) expression是必需的,返回一個Range對象。b) Shift是可選的,指定刪除單元格時替補單元格的移位方式。
  • 刪除空白工作表,手工黨?速度慢!刪除的不乾淨!我選擇VBA!
    前景提要工作中我們的報表經常會存在一些空白的工作表,比方說我們創建的一些輔助數據,或者從其他地方拷貝過來的一些輔助資料,既然都是輔助的,在完成了工作使命之後,最終的結果都會被刪除,但是通常情況下我們僅僅是刪除了數據內容,但是原來的的工作表中依然保留著一些原始的格式,公式甚至是一些圖片
  • VBA代碼解決方案第49講:VBA代碼中工作表函數SUM的利用方法 - VBA...
    大家好,我們今日繼續講解VBA代碼解決方案的第49講內容(註:在整理之前的VBA系列文章中合併了一些文章,重新成集排序為第49講,所以從這篇文章開始以新的排序計算):VBA中SUM函數的利用方法。對多個單元格求和,是統計工作中非常普遍的工作,在之前的函數講解過程中,我下了很大的氣力來講解SUM函數及其衍生的函數,在數組的講解中也講了此函數在數組中的利用,可以說SUM函數在統計工作中起著舉足輕重的作用,如果把這個函數利用好了,對自己的工作是非常方便的,今日我在VBA中就此函數的利用及規律再次加以講解。
  • 如何將多個表格中數據匯總到一張表中
    前幾天有個讀者在後臺留言,如何將多個表格中的數據匯總到一張表裡。筆者查詢了相關資料,發現目前除了用vba編寫代碼之外,沒有特別簡單的方法,而寫代碼這件事情,非一日之功。因此筆者建議,此時,我們可以利用一些好用的插件進行數據匯總處理。利用「方方格子」這個插件,只需幾步就可以將多個表格中的數據進行匯總。直接在官網就可以下載,目前也還是免費使用的。
  • VBA拆分工作表
    Excel界面操作為我們提供了各種強大的功能,我們首先應該充分利用Excel中的內置功能,在利用VBA編程時也是如此,這是我們學習Excel VBA的原則之一。