jian
Lv 7
jian asked in 電腦與網際網路軟體 · 9 years ago

如何用 VBA 刪除多個工作簿固定欄位的資料

小弟剛學 VBA, 目前寫一個 VBA 的程式, 遇到困難, 想請各位

高手幫忙

我想刪除工作簿上固定欄位的資料, 請問要如何寫

檔案放置在

http://www.funp.net/101105

VBA 程式為 CP2FT_Bin1.xls

這些是我要刪除的資料

Device: ADC123 Lot NO: Wafer ID: 01 Wafer Size: 6 Inch Flat Dir: 90 Degree Total test die: 8301 Pass Die: 7438 Fail Die: 863 Yield: 89.60%

Update:

謝謝 明嵐 和 准提部林 的回答

明嵐大 的方法我試過了Workbooks(tname).Worksheets("B1H198.1_1").Rows(k).Delete

最好改成 Workbooks(tname).Worksheets("B1H198.1_1").Rows(k).Clear 比較好

准提部林大 寫得目前對我而言比較難, 我只是初學者, 不過我會慢慢消化, 請

准提部林大將回答移至回答區, 謝謝

2 Answers

Rating
  • 9 years ago
    Favorite Answer

    <範例檔>:

    http://www.funp.net/443176

    只是依原來程式碼加以改寫,參考看看!

    2012-05-12 16:17:48 補充:

    EXCEL VBA.刪除同層路徑〔子資料夾〕中〔EXCEL檔〕的指定列

                             <.准提部林.>

    ---------------------------------

    範例檔簡介:

    ■主要需求:

     1.從〔執行主檔〕同層路徑中取得〔map〕資料夾中的XLS檔案清單。

     2.逐一開啟目標檔案,並刪除〔指定列號〕的資料。

       〔指定列號〕來源:〔CPFTBin〕工作表的〔G37.H37〕儲存格。

     

    ■程式碼1:取得〔map〕資料夾中的XLS檔案清單。

     Do

     If xFile = "" Then xFile = Dir(xPath & "\*.xls") Else xFile = Dir

     If xFile = "" Then Exit Do

     x = x + 1

     With MySht

        .[D2].Cells(x, 1) = xFile

        .[C2].Cells(x, 1) = Mid(xFile, 10, 2)

        .[B2].Cells(x, 1) = Left(xFile, 8)

     End With

     Loop

     

     --解析--

     1.因為自 OFFICE 2007 版以後,〔FileSearch〕已不能使用,故改用〔DIR〕。

     2.當剛執行時,變數 xFile 必為〔空字串〕,故以 Dir(xPath & "\*.xls") 抓檔。

     3.續抓第2以後的檔,則只能使用 xFile = Dir,否則又是重覆抓第1檔。

     4.直到 xFile 又變為〔空字串〕時,表示已抓完檔,而跳出 Do ~ Loop。

     

    ■程式碼2:逐一開啟目標檔案,並刪除〔指定列號〕的資料。

     For x = 2 To xRow

       fName = MySht.Range("D" & x)

       xFile = xPath & "\" & fName

       If Dir(xFile) <> "" Then

         Workbooks.Open xFile

         Set xBook = Workbooks(fName)

       End If

       xBook.ActiveSheet.Rows(Row1 & ":" & Row2).Delete

       xBook.Close Savechanges:=True

     Next x --解析--

     1.〔Row1.Row2〕為〔刪除列號〕,來自〔CPFTBin 的 G37.H37〕。

       xBook.ActiveSheet.Rows(Row1 & ":" & Row2).Delete

       亦即等同於 > xBook.ActiveSheet.Rows("107:116").Delete

       若無其他考量,也可將〔Delete〕改為〔Clear〕或〔ClearContents〕清除。

     2.原程式碼:

       For k = Row1 To Row2

        Rows(k).Delete

       Next k

       >可將〔Delete〕改為〔Clear〕或〔ClearContents〕清除。

     

       >或改為如下方式的〔刪除〕:

        For k = Row1 To Row2

         Rows(k).Delete

          k = k + 1

        Next k

     

       >也可改為〔由下而上〕的〔刪除〕:

        For k = Row2 To Row1 Step -1

         Rows(k).Delete

        Next k

     

    ■說明:個人所使用皆是最基礎的程式碼,多看幾次即可明白。

    ---------------------------------

    <範例檔>:

    http://www.funp.net/443176

    ---------------------------------

    2012-05-12 18:08:08 補充:

    If Dir(xFile) <> "" Then

     Workbooks.Open xFile

     Set xBook = Workbooks(fName)

     以下2行要放在判斷式內

     xBook.ActiveSheet.Rows(Row1 & ":" & Row2).Delete

     xBook.Close Savechanges:=True

    End If

    ---------------------------------  

  • 9 years ago

    以下紅色和綠色的部份是我修改過的,

    想要控制不同的excel檔,利用父子層的關係就可以了,

    B1H198.1_1 是你開啟的sheet名稱,想要控制他,就要先選擇他,

    刪除的部份也是同樣道裡,但是你用迴圈的方法刪除會有問題,

    因為刪除一行後,下面的行會遞補上來,你所要刪除的行就不會順著下去,

    建議你直接設定範去刪除就可以了,方法如下:

    Worksheets(B1H198.1_1 ).Rows("106:116" ).Delete

    --------------------------------------------------------------------------------------------------

    Workbooks.Open fname, ReadOnly:=False

    Workbooks(tname).ActivateWorkbooks(tname).Worksheets("B1H198.1_1").Select'Sheets(sname).Select

    For k = row1 To row2 Workbooks(tname).Worksheets("B1H198.1_1").Rows(k).Delete

    Next k

    Source(s): 自己
Still have questions? Get your answers by asking now.