2016-08-15 4 views
0

Я использую Excel 2010 для некоторой автоматизации.VBA - замораживание панели в другом файле

Короче говоря, я создаю новую книгу с помощью этого метода:

With CreateObject("Excel.Application") 
    Set NewBook = .Workbooks.Add 
    .Visible = True 
End With 

With NewBook 
    Set WS = NewBook.Sheets("Sheet1") 
End With 

А теперь я хотел бы создать стоп-панель.

Я попытался с помощью выбрать и ActiveWindow, как на this page:

WS.Range("F4").Select 
ActiveWindow.FreezePanes = True 

Как-то при редактировании различных файлов, .select метод всегда выбирает исходный файл вместо добавленной книги.

Затем я посмотрел на this page и попробовал:

NewBook.activate 
With ActiveWindow 
    If .FreezePanes Then .FreezePanes = False 
    .SplitColumn = 5 
    .SplitRow = 4 
    .FreezePanes = True 
End With 

Не используется, замораживать панель создается на исходном файле.

Nor выполняет следующие работы:

With NewBook 
    If .FreezePanes Then .FreezePanes = False 
    .SplitColumn = 5 
    .SplitRow = 4 
    .FreezePanes = True 
End With 

Не уверен, если мой .activate метод является неправильным, или ActiveWindow неправильно, или, может быть, .select неправильно. Большое спасибо, кто мог бы помочь.

+0

Кроме того, чтобы создать область замораживания, кажется, что VBA всегда требует ActiveWindow, есть ли способ обойти его? –

+0

Нет. Это свойство окна, а не рабочий лист. Вам нужно использовать 'NewBook.Application.ActiveWindow.FreezePanes = True' или' NewBook.Windows (1) .FreezePanes = True' – Rory

+1

Вы создаете новый экземпляр Excel, поэтому вам нужно явно ссылаться на этот экземпляр. –

ответ

0

Это как раз то, что я пытаюсь отлаживать код посредством выборочного использования операторов msgbox. Попытка размещения инструкции msgbox перед запуском newbook.activate или цикла while и вывода имени текущей рабочей книги или листа. Это должно сказать вам, какая рабочая тетрадь Excel видит в настоящее время активной.

Также ... https://msdn.microsoft.com/en-us/library/office/ff835568.aspx и https://msdn.microsoft.com/en-us/library/office/ff195422.aspx

может быть первенствует не распознает имя новой книги, которую вы создаете. Похоже, что каждая книга имеет свой собственный индекс, но в том порядке, в котором они созданы. Возможно, попробуйте перевести книгу по индексу.

0

Вместо использования ActiveWindow квалифицируйте первое (фактически уникальное) окно новой книги. Существует предпосылка, если книга имеет несколько листов; вам необходимо активировать требуемый лист в книге, чтобы FreezePanes применялся к правильной рабочей таблице в книге.

NewBook.Sheets("DesiredSheet").Activate 
With NewBook.Windows(1) 
    If .FreezePanes Then .FreezePanes = False 
    .SplitColumn = 0 
    .SplitRow = 1 
    .FreezePanes = True 
End With 

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

  • Нет связанных вопросов^_^