Использование CurrentRegion для выбора всей страницы

#vba #excel

#vba #excel

Вопрос:

У меня есть рабочий лист, содержащий несколько страниц, и каждая страница содержит имя и некоторую другую информацию, я использую этот код :

 Dim Area as String
For i=1 to 10000
If worksheets(1).cells(i,4)=name then
Area=worksheets(1).cells(i,4).CurrentRegion.Address
End If
Next i
  

код работает, однако он выбирает только область, рядом с которой находится имя, и я хочу, чтобы он выбирал всю страницу (на листе несколько страниц) вместо небольшой области вокруг имени, есть ли способ сделать это с помощью CurrentRegion? или, возможно, есть другое свойство, которое я могу использовать вместо этого?

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

Комментарии:

1. Что вы подразумеваете под «страницей» в рабочих листах?

2. Что-то вроде разрывов страниц между несколькими разделами на одном листе (что-то вроде той же концепции MSWord)

3. Что вы хотите сделать со страницей, содержащей имя? Выбор диапазона, а затем выполнение чего-либо с выделением неэффективно. Гораздо лучше использовать диапазон непосредственно внутри свойства или метода, который вы хотите применить.

Ответ №1:

Ваши комментарии показывают, что вы знаете, что разрывы страниц будут играть определенную роль в ответе.

Приведенный ниже код отобразит предварительный просмотр страницы, на которой находится диапазон, анализируемый в Name. Если лист содержит более одной страницы, определяемой WS.HPageBreaks.Count , то выполняйте цикл через HPageBreaks , пока HPageBreak строка меньше строки с именем анализируемого диапазона.

 Sub PrintSheetContainingTarget(Name As String)
'assumes sheet containing Name has no VPageBreaks
'(i.e. sheet is one printed page wide)
Dim WS As Worksheet
Dim Break As HPageBreak
Dim Page As Long
    Page = 1 'initialise Page in case only one page on sheet
    Set WS = Range(Name).Worksheet
    If WS.HPageBreaks.Count > 0 Then
        For Each Break In WS.HPageBreaks
            If Break.Location.Row < Range(Name).Row Then
                Page = Page   1
            End If
        Next
    End If
    'display print preview of Page
    WS.PrintOut Page, Page, 1, True
End Sub

Sub PrintWrapper()
    Call PrintSheetContainingTarget("Target")
End Sub
  

Я предполагаю, что вы хотите распечатать страницу, содержащую Name но если вы хотите сделать что-то другое, замените WS.PrintOut Page, Page, 1, True кодом для достижения вашей цели.

Ответ №2:

Измените свой код, чтобы

 If worksheets(1).cells(i,4)=name then
    Area = WorkSheets(1).Name amp; "!" amp; "A1:XFD1048576"
    ' You may modify this line to dynamically get max rows @ 65k for Excel 2003, etc.
End If
  

Комментарии:

1. Этот код будет выбирать только статические страницы, мне вроде как нужно что-то, что зависит от разрывов страниц вместо статического адреса, поскольку размер страниц будет меняться.

2. Как насчет того, чтобы попробовать Area = ActiveSheet.PageSetup.PrintArea

3. По-прежнему безуспешно, я нашел кое-что на веб-сайте Microsoft, касающееся свойств разрыва страницы, я попробую поработать с этим, в любом случае, спасибо за ваши ответы и время, приятель, высоко ценится!