2016-03-18 2 views
1

У меня есть список классов, которые мои пользователи приняли, что я хочу добавить, какой доступ к имеющимся у них транспортным средствам, и если компания активировала свои значки для использования транспортных средств (вилочные подъемники и т.д). Поэтому я хотел объединить все строки классов для пользователя, а затем просто получить центрированный ответ. Когда я шаг за шагом прохожу, он работает, но конечным результатом является весь столбец данных, который объединяется. Мой вопрос у меня есть синтаксис неправильно, или я пытаюсь сделать что-то, что не может быть сделано в Excel 2013.VBA слияния автофильтрованных ячеек через .SpecialCells (xlCellTypeVisible) .Range

код я использую:

With Range("A1:K" & LastRow) 
    For i = 1 To UBound(FleetID, 1) 
    .AutoFilter Field:=5, Criteria1:=FleetID(i) 

    LastFilteredRow = .SpecialCells(xlCellTypeVisible).Cells(Rows.Count, "A").End(xlUp).Row 
    If LastFilteredRow > 1 Then 
    With .SpecialCells(xlCellTypeVisible).Range("R2:R" & LastFilteredRow) 
     .Select 
     .Merge 
     If FleetClass(i) = "Operator" Then .Value = "Standard" Else .Value = FleetClass(i) 
     .HorizontalAlignment = xlCenter 
     .VerticalAlignment = xlCenter 
    End With 'std 
    With .SpecialCells(xlCellTypeVisible).Range("S2:S" & LastFilteredRow) 
     .Select 
     .Merge 
     .Value = FleetAct(i) 
     .HorizontalAlignment = xlCenter 
     .VerticalAlignment = xlCenter 
    End With ' ' active 
    End If 
    Next i 
    .Columns("A:U").AutoFit 
    .Columns("E").ColumnWidth = 11 
    .Columns("H:I").ColumnWidth = 11 
    .Columns("N:N").ColumnWidth = 2 
End With 'Range("A1:K" & LastRow) 

Мой результат выйдет следующим

without merge

with merge

ответ

0

я понял это у меня было 2 ошибки в этом коде. Первой ошибкой был мой диапазон был неправильным, хотя он, похоже, не сломал слияние, но разрывает код, который я добавил позже. У меня был диапазон после специальных ячеек, поэтому слияние ячеек с начала листа до конца моих видимых ячеек вместо слияния видимых ячеек внутри моего диапазона, таким образом, был необходим код

With Range("A1:T" & LastRow) 
    For i = 1 To UBound(FleetID, 1) 
     .AutoFilter Field:=5, Criteria1:=FleetID(i) 
     LastFilteredRow = .SpecialCells(xlCellTypeVisible).Cells(Rows.Count, "A").End(xlUp).Row 
     If LastFilteredRow > 1 Then 
     With .Range("R2:R" & LastFilteredRow).SpecialCells(xlCellTypeVisible) 
     .Merge 
     If FleetClass(i) = "Operator" Then .Value = "Standard" Else .Value = FleetClass(i) 
      .HorizontalAlignment = xlCenter 
      .VerticalAlignment = xlCenter 
     End With 'std 
     With .Range("S2:S" & LastFilteredRow).SpecialCells(xlCellTypeVisible) 
     .Merge 
     .Value = FleetAct(i) 
     .HorizontalAlignment = xlCenter 
     .VerticalAlignment = xlCenter 
     End With ' ' active 
     End If 
    Next i 
    .Columns("A:U").AutoFit 
    .Columns("E").ColumnWidth = 11 
    .Columns("H:I").ColumnWidth = 11 
    .Columns("N:N").ColumnWidth = 2 
End With 'Range("A1:T" & LastRow)