返回列表 上一主題 發帖

[發問] vba特定格式刪除

回復 5# GBKEE
Rng(1) 、Rng(2) 以及 Union() 的處裡蠻細膩及扼要,
一針見血,簡明俐落。
謝謝您的賜教!

TOP

回復 7# man65boy
套用 GBKEE 大大的程式碼,並加上
  1.          If Sh.Range("a4") <> "" Then
  2.             .
  3.             .
  4.          End If
複製代碼
來過濾空白內容的表單:
  1. Sub Ex()
  2.     Dim Rng(1 To 12) As Range, Sh As Worksheet
  3.     For Each Sh In Sheets  ' Sheets 物件: 活頁簿Sheet的物件集合
  4.         If Sh.Range("a4") <> "" Then
  5.             Set Rng(1) = Sh.Cells.Find(Sh.Range("a4"), Sh.Range("a4")) ' [物品編號 ]所在列:為所有工作表表單上的共通點
  6.             If Not Rng(1) Is Nothing Then '工作表上有尋找到 [物品編號 ]
  7.                 Set Rng(2) = Nothing
  8.                 Do
  9.                     If Rng(2) Is Nothing Then
  10.                         Set Rng(2) = Rng(1).Offset(-3).Resize(4).EntireRow     '[物品編號 ]所在列 ,往上4列儲存格的整列
  11.                     Else
  12.                         Set Rng(2) = Union(Rng(2), Rng(1).Offset(-3).Resize(4).EntireRow)  ''整合:[物品編號 ]所在列 ,往上4列儲存格的整列
  13.                     End If
  14.                     Set Rng(1) = Sh.Cells.FindNext(Rng(1))
  15.                 Loop Until Rng(1).Address(0, 0) = "A4"
  16.                 If Not Rng(2) Is Nothing Then Rng(2).Delete   '刪除
  17.             End If
  18.         End If
  19.     Next
  20. End Sub
複製代碼

TOP

回復 9# man65boy
如果你想要將 A4 的儲存格文字 (物品編號) 改為 (日期),
理論上是 OK 的。
但是在你的 A3 欄位的值是 Rng(1) = "           製表日期: " : Range/Range
程式在最後一次執行 Set Rng(1) = Sh.Cells.FindNext(Rng(1)) 時,
回頭搜尋 (FindNext()) 卻抓到了A3 欄位的值,而非 A4 的儲存格文字 (日期)。

接著 程式繼續往下執行到
Set Rng(2) = Union(Rng(2), Rng(1).Offset(-3).Resize(4).EntireRow)
在 Rng(1).Offset(-3) 便產出了錯誤訊息 ('1004');因為此時
Rng(1).Address(0, 0) = "A3" : String, 而 Rng(1).Offset(-3) 的位址為 A0,
已經超出表單的範圍。

TOP

回復 9# man65boy
就如 GBKEE 大大的提示 (#12) 做修正,
便 OK 了!

TOP

回復 14# man65boy
你認為處理的思考方向 OK 的話,就以你的想法去達成它。
論壇只是一個釋疑與學習的場合,每個人均有自己的思考方向,
只要是好的詮釋、或是更佳的技巧處理都是值得我們學習的。

TOP

        靜思自在 : 生氣,就是拿別人的過錯來懲罰自己。
返回列表 上一主題