2013-11-16 3 views
1

Я уверен, что это относительно простой запрос, но сказать, что я любитель с VBA, был бы комплиментом.Excel VBA/Macro Необходимая помощь - Скрытые строки

Что я пытаюсь сделать, это использовать кнопку макроса для копирования определенной информации с одного листа на основную таблицу. Это работает нормально, пока я не скрою строки (всего 880 строк, и учитывая, что они сидят рядом с таблицами ввода данных, мне нужно скрыть их, чтобы упростить навигацию).

Это код, который я использую в настоящее время, - может ли он быть изменен, чтобы включить скрытые строки?

Спасибо заранее,

Роб

Private Sub CopyDataTeam1() 
    Application.ScreenUpdating = False 
    Dim copySheet As Worksheet 
    Dim pasteSheet As Worksheet 

    Set copySheet = ActiveSheet 
    Set pasteSheet = Worksheets("MainData") 

    copySheet.Range("AY5:BC5", copySheet.Range("AY5:BC5").End(xlDown)).Copy 
    pasteSheet.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues 

    Sheets("MainData").Cells.Replace What:="-", Replacement:="", LookAt:=xlWhole, SearchOrder:= _ 
     xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False 

    Application.CutCopyMode = False 
    Application.ScreenUpdating = True 
End Sub 
+0

«* Это работает отлично, пока я не скрываю строки *» Ну, хорошо, * Тогда * что происходит ? Сообщите нам, в чем проблема, включая любые сообщения об ошибках. – RBarryYoung

+0

Спасибо за ваш комментарий и извинения за то, что вы так расплывчаты. В принципе, нет ошибки, но я ожидаю, что будет скопировано 875 строк данных, но вместо этого она копирует только 29 строк, которые не скрыты. – HendrixAndChill

ответ

2

Одним из решений может быть, чтобы проверить лист первых скрытых строк. Сохраните это для объекта Range.

Unhide ваш диапазон, сделать свой материал, то rehide диапазон ...

'pass in a worksheet, and get all the hidden rows 
Function HiddenRange(ws As Worksheet) As Range 

Dim hideRange As Range 
Dim column As Long 

    'use column a 
    column = 1 

'if your hidden rows are at the end of your sheet, then 
'.End(xlUp) may not capture the end of the sheet correctly. 
'could use UsedRange.Rows instead.. 
For i = 1 To ws.UsedRange.Rows.Count 'ws.Cells(ws.Rows.Count, column).End(xlUp).Row 

    If ws.Rows(i).Hidden Then 

     If hideRange Is Nothing Then 

     Set hideRange = ws.Rows(i) 

     Else 

     Set hideRange = Application.Union(ws.Rows(i), hideRange) 

     End If 

    End If 

Next i 

'return our hidden range 
    If hideRange Is Nothing = False Then 

    Set HiddenRange = hideRange 

    End If 

End Function 


Public Sub UsageExample() 

Dim rng As Range 

Application.ScreenUpdating = False 
Application.Calculation = xlCalculationManual 

'disable error tracking as we get type mismatch if rng is set to nothing 
On Error Resume Next 
Set rng = HiddenRange(Sheet1) 

'resume error handling 
On Error GoTo err 


If Not rng Is Nothing Then rng.Rows.Hidden = False 


'do your stuff in here 

If Not rng Is Nothing Then rng.Rows.Hidden = True 


Application.Calculation = xlCalculationAutomatic 
Application.ScreenUpdating = True 

Exit Sub 

err: 
Application.Calculation = xlCalculationAutomatic 
Application.ScreenUpdating = True 

MsgBox err.Description, vbExclamation, "An error occured" 

End Sub 

Вы также можете изменить способ установить диапазон копирования. Не используйте xlDown, как если бы у вас были пустые ячейки в столбце BC, диапазон не будет установлен правильно.

Изменение его ниже будет установить диапазон, основанный на нижнем значении в столбце BC

copySheet.Range(copySheet.Range("AY5"), copySheet.Range("BC" & copySheet.Rows.Count).End(xlUp)).Copy 
+0

Привет, Сэм, спасибо за ваш комментарий. Это панель, предназначенная для использования несколькими сторонними сторонами, поэтому я хочу, чтобы строки были скрыты, когда вы представляли их им. В идеале они заполняют таблицы, данные передаются в скрытые строки, а макрос передает эти скрытые данные в мастер-лист, который затем я использую для заполнения сводной диаграммы. Смогу ли я определить скрытые строки как диапазон/с, если не непрерывный? Спасибо, Роб. – HendrixAndChill

+1

@RobZacher Да, это будет работать, если строки не будут непрерывными. – Sam

+0

Привет, Сэм, Спасибо за помощь. Однако код запускается, но продолжает копировать только 29 отображаемых строк. Какие-либо предложения? Еще раз спасибо, Роб. – HendrixAndChill

Смежные вопросы