Board logo

標題: [發問] 關於Union的用法及修改,兩個問題請教 [打印本頁]

作者: chiang0320    時間: 2016-11-6 23:59     標題: 關於Union的用法及修改,兩個問題請教

本帖最後由 chiang0320 於 2016-11-7 00:04 編輯

[attach]25742[/attach][attach]25743[/attach][attach]25745[/attach]
[attach]25747[/attach]

兩個問題請教老師教導,謝謝!
以下vba程式碼,條件--->將大於30的儲存格選取
1. 怎麼修改成選取  "整列(rows) "
2. 如果條件改成小於2的儲存格選取,會顯示錯誤,  "請問怎麼修改成,如果沒有在條件內的資料則跳過"

Public Sub QQQ()

Dim i As Long, Target As Range
For i = 2 To 11
    If Cells(i, "B") > 30 Then
       If Target Is Nothing Then
          Set Target = Cells(i, "B")
     Else
          Set Target = Union(Target, Cells(i, "B"))
     End If
  End If
Next
Target.Select
End Sub
作者: c_c_lai    時間: 2016-11-7 08:25

回復 1# chiang0320
提問: "2. 如果條件改成小於2的儲存格選取,會顯示錯誤"
照你寫的語法看來一定會出問題的,因為你的 "B 欄位" 中
並無條件小於2 的 COUNT, 所以 Target 變數則從宣告為
Range 後一直到迴圈結束,未經異動 (處理),依然保留為其初始值。
接著當你執行 Target.Select 時,則一定會產生錯誤訊息。 將
  1.     Target.Select
複製代碼
改成
  1.     If Not Target Is Nothing Then Target.Select
複製代碼
至於將   Target  欄改成設定為列:
  1.             If Target Is Nothing Then
  2.                 Set Target = Cells(i, "B")
  3.             Else
  4.                 Set Target = Union(Target, Cells(i, "B"))
  5.             End If
複製代碼
換成
  1.             If Target Is Nothing Then
  2.                 Set Target = Rows(i)
  3.             Else
  4.                 Set Target = Union(Target, Rows(i))
  5.             End If
複製代碼
就可行了。
作者: c_c_lai    時間: 2016-11-7 08:29

回復 1# chiang0320
修正後:
  1. Sub QQQ()
  2.     Dim i As Long, Target As Range
  3.    
  4.     For i = 2 To 11
  5.         If Cells(i, "B") > 30 Then
  6.             If Target Is Nothing Then
  7.                 Set Target = Rows(i)
  8.             Else
  9.                 Set Target = Union(Target, Rows(i))
  10.             End If
  11.         End If
  12.     Next
  13.     If Not Target Is Nothing Then Target.Select
  14. End Sub
複製代碼

作者: GBKEE    時間: 2016-11-7 14:35

回復 1# chiang0320
1. 怎麼修改成選取  "整列(rows) "
可修改如下
  1. Option Explicit
  2. Sub QQQ()
  3.     Dim i As Long, Target As Range, Rng As Range
  4.     Set Rng = Range("A1").CurrentRegion.Rows '** 附檔資料的範圍的的所有列
  5.     For i = 2 To 11
  6.         If Rng(i).Cells(2) < 2 Then
  7.         'If Rng.Range("B" & i) < 2 Then '** 也可以
  8.             If Target Is Nothing Then
  9.                 Set Target = Rng(i)
  10.             Else
  11.                 Set Target = Union(Target, Rng(i))
  12.             End If
  13.         End If
  14.     Next
  15.     If Not Target Is Nothing Then Target.Select
  16. End Sub
複製代碼

作者: c_c_lai    時間: 2016-11-7 16:00

回復 4# GBKEE
不錯的詮釋,謝謝指導!
作者: chiang0320    時間: 2016-11-7 20:43

回復 1# chiang0320


感謝 GBKEE 及 c_c_lai 兩位前輩的指導,謝謝!




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)