2015-11-17 130 views
0

我試圖在同一時間選擇多個範圍。 IE瀏覽器。 B2:C2,B12:C12,B14:C14。從範圍字符串中選擇多個範圍

更新的代碼

Sub MarkForDMSLookup() 
Dim MarkingString As String 
Dim MarkingRange As String 

j = 0 

For i = 3 To 20 'LastRow() 
    If Cells(i, 5) = "Yes" Then 
     j = j + 1 
     MarkingRange = "B" & i & ":C" & i 
     'MsgBox MarkingRange 
     If j = 1 Then MarkingString = MarkingRange 
     If j > 1 Then MarkingString = MarkingString & ", " & MarkingRange 

     If Cells(i, 5) = "No" Then Cells(i, 5).EntireRow.Hidden = True 

    End If 
Next i 

'MsgBox MarkingString 

Union(MarkingString).Select 
End Sub 

Union標籤給了我一個類型不匹配。任何幫助對齊類型將不勝感激。

當限制for循環從2到20我可以使用Range標記而不是Union

+1

在這行做你的錯誤?更改'對於我= 3到LastRow()'爲'對於我= 3到LastRow' – R3uK

+0

錯誤與'設置SelRange =聯盟(MarkingString)' 我沒有錯誤與'LastRow()',但我要去當我擴展代碼時需要這個.. :) – StefanMoeberg

+0

'Set SelRange = range(MarkingString)' – Jeeped

回答

1

我只是使用一個自動篩選,而不是循環的:

Sub MarkForDMSLookup() 
    Dim j As Long 
    j = 0 

    With Range("E2:E" & LastRow()) 
     .AutoFilter field:=1, Criteria1:="Yes" 
     On Error Resume Next 
     .Resize(.Rows.Count - 1).Offset(1, -3).Resize(, 2).SpecialCells(xlCellTypeVisible).Select 
     On Error GoTo 0 
    End With 

End Sub 
Function LastRow() 
    LastRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row 
End Function 
+0

這很接近,但不是我所需要的。我需要能夠選擇已過濾的單元格,並且只能選擇已過濾的單元格。 – StefanMoeberg

+1

不知道我關注。這與您的原始代碼相同 - 即僅選擇列E包含「是」的單元格,並隱藏其他單元格。 – Rory

+0

對不起!我犯了一個錯字! – StefanMoeberg

0
Sub MarkForDMSLookup() 
Dim MarkingString As String, _ 
    MarkingRange As String, _ 
    FirstRun As Boolean, _ 
    RgMarking As Range, _ 
    RgTotal As Range, _ 
    CounT As Long, _ 
    ToTaL As Long 

FirstRun = True 
CounT = 0 
ToTaL = 0 
Set RgTotal = Nothing 

For i = 3 To LastRow 
    If Cells(i, 5) <> "Yes" Then 
     If Cells(i, 5) = "No" Then Cells(i, 5).EntireRow.Hidden = True 
    Else 
     MarkingRange = "B" & i & ":C" & i 
     CounT = CounT + 1 
     ToTaL = ToTaL + 1 
     If FirstRun Then 
      MarkingString = MarkingRange 
      FirstRun = False 
     Else 
      MarkingString = MarkingString & ", " & MarkingRange 
     End If 
     If CounT <> 20 Then 

     Else 
      On Error GoTo ErrHandler 
      Set RgMarking = Range(MarkingString) 
      Set RgTotal = Union(RgTotal, RgMarking) 
      On Error GoTo 0 
      MarkingString = vbNullString 
      FirstRun = True 
      CounT = 0 
     End If 
    End If 
Next i 

Set RgTotal = Union(RgTotal, RgMarking) 
RgTotal.Select 
Exit Sub 

ErrHandler: 
MsgBox Err.Description & vbCrLf & Err.Number 
Resume Next 
End Sub