Динамический диапазон со скрытым именем листа

Я пытаюсь создать архив для некоторых ручных вводов. У меня это работало, но когда архив был скрыт, у меня возникли некоторые проблемы.

Sub Archive()
Dim sDumpRange  As String
Dim sDumpSheet As String
sDumpSheet = "Active archive"
If Range("C6") <> Empty Then
    pRow = Sheets(sDumpSheet).Range("I1")
       If pRow > 1 Then
          Range("A2:E" & pRow).Delete Shift:=xlUp
       Else
       End If
    sDumpRange = "'" & Sheets("Active archive") & "'!" & "A" & Range("A5000").End(xlUp).Row + 1
   ' sDumpRange = "A" & Range("A5000").End(xlUp).Row + 1
    Sheets("call-outs completed").Range("a10:e109").Copy
    Worksheets(sDumpSheet).Range(sDumpRange).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    Sheets("call-outs completed").Range("a10:a109").ClearContents
    Sheets("call-outs completed").Select
    Range("A11").Select
Else
    MsgBox "Data not archived. Please select your name first and try again."
End If
End Sub

Существует одна ячейка, подсчитывающая, сколько строк с датой старше 2 месяцев, а затем эти старые данные удаляются (удалить раздел с помощью pRow).

Я пробовал разные вещи, и теперь sDumpRange был изменен, и он не работает, но когда это было, казалось, что он вычислял диапазон в неправильном листе ввода данных. Это была десятка копируемых в архив из неправильной ячейки (Активный архив А11). И при обновлении данные были перезаписаны, так как лист ввода также очищается. Ключ, кажется, теперь находится в пределах sDumpRange расчета.


person user2964203    schedule 07.11.2013    source источник


Ответы (2)


но когда архив был скрыт, у меня возникли некоторые проблемы.

Это очевидно, потому что это больше не ActiveSheet, и поэтому я продолжаю твердить об ЭТОМ

Вам необходимо полностью квалифицировать объекты диапазона. Например, изменить

Range("A2:E" & pRow).Delete Shift:=xlUp

to

Sheets(sDumpSheet).Range("A2:E" & pRow).Delete Shift:=xlUp

иначе он удалит строки с неправильного листа.

Точно так же, пожалуйста, внесите изменения везде и включите предложения по ссылке, которую я упомянул выше.

person Siddharth Rout    schedule 07.11.2013
comment
@Jean-FrançoisCorbett: О, я буду :D - person Siddharth Rout; 07.11.2013
comment
Эта линия до сих пор вызывает у меня проблемы. Скопированные ячейки копируются в диапазон, рассчитанный на основе неправильного листа. Я должен добавить туда sDumpSheet как правильную ссылку где-нибудь. Я удалил строку выше. sDumpRange = A & Range(A5000).End(xlUp).Row + 1 - person user2964203; 07.11.2013
comment
Range("A5000") Вы не правильно определили его. Он всегда будет ссылаться на активный лист. Пожалуйста, прочитайте мой ответ еще раз. - person Siddharth Rout; 07.11.2013
comment
Итак, как активировать этот лист, если он скрыт, а рабочие листы защищены? Думаю, мне нужно было бы каким-то образом добавить в s.DumpRange детали рабочего листа. Ранее у меня была строка с выбором s.DumpSheet, но она перестала работать, когда лист был скрыт и защищен. Не уверен, как изменить эту строку, упомянутую в моем предыдущем комментарии, чтобы получить правильный диапазон дампа диапазона. - person user2964203; 07.11.2013
comment
Зачем нужно его активировать? Вы не прошли по ссылке, которую я дал в своем ответе выше? - person Siddharth Rout; 07.11.2013
comment
sDumpRange = A & Sheets(sDumpSheet).Range(A5000).End(xlUp).Row + 1 выглядит отсортированным. - person user2964203; 07.11.2013

Операции со скрытыми листами не всегда выполняются должным образом. Это верно для PasteSpecial точно.

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

При этом в начале:

Sheets(sDumpSheet).Visible = xlSheetVisible

А это в конце:

Sheets(sDumpSheet).Visible = xlSheetHidden

Также знайте, что вы можете скрыть лист от просмотра в Excel, изменив значение на xlSheetVeryHidden, таким образом, вы можете отобразить его только из кода VBA или окна VBA...

person K_B    schedule 07.11.2013
comment
Я мог бы это сделать, но я бы предпочел не моргать другими листами во время процесса. Кроме того, рабочая книга будет защищена, поэтому, вероятно, произойдет сбой. - person user2964203; 07.11.2013