нельзя установить свойство freezepanes класса window
«Невозможно установить свойство FreezePanes класса Window« Excel 2016 (офис 365)
Я построил excel addin, который заполняет рабочий лист данными из базы данных. Я также добавляю некоторый стиль и блокирую некоторые строки и столбцы с помощью FreezePanes.
Excel из офиса 365, вероятно, действительно хочет, чтобы моя рабочая таблица excel была физически на переднем плане, но worksheet.Activate() не помогла, и я также попробовал следующий код:
Но это тоже не сработало. Может ли кто-нибудь помочь мне с этим?
Ответов: 4
Возможно ли, что worksheet.Application.ActiveWindow это не окно, которое содержит ваш активный рабочий лист? В предыдущих версиях Excel все книги имели одно и то же окно, но поскольку Microsoft потеряла MDI для Excel, у вас могут появиться два разных окна с использованием того же кода, что и раньше. Смешивание этих окон может привести к проблеме, с которой вы сталкиваетесь.
И еще одна возможность заключается в том, что на самом деле это ошибка в Excel. Я нашел кого-то другого, у которого была такая же проблема, но неясно, решил ли этот человек проблему или заполнил отчет об ошибке:
Вы можете отправить отчет об ошибке в Microsoft и дождаться, смогут ли они подтвердить это как ошибку.
Возможно ли это сделать в VBA?
Если вы хотите проверить, действительно ли лист активен, вы можете:
В документации MSDN было бы похоже, что надстройки VBA работают лучше с 2013/365, чем с C #.
Да! Я исправил это, как предложил Xatoo, добавив:
Важно добавить, что это решение работает только тогда, когда на самом деле окно минимизировано, поэтому вам нужно проверить это.
Забавная деталь заключается в том, что это все еще не отправляет окно на передний план.
Вы можете установить xlMaximized для лучшей практики. Поскольку xlNormal может одинаково xlMinimized, так что снова получите ошибку.
«Не удалось установить свойство FreezePanes класса окна» Excel 2016 (office 365)
Я построил Excel addin, который заполняет лист данными из базы данных. Я также добавляю некоторые стили и блокирую некоторые строки и столбцы с помощью FreezePanes.
Excel из office 365, вероятно, действительно хочет, чтобы мой лист excel физически находился на переднем плане, но worksheet.Activate() не помогло и я также попробовал следующий код:
но это тоже не сработало. Кто-нибудь может мне помочь?
чтобы быть ясным: версия из моего excel 2016 Версия 1611 (Build 7571.2109)
4 ответов
может, worksheet.Application.ActiveWindow не является ли окно, содержащее ваш активный рабочий лист? В предыдущих версиях Excel все книги имели одно и то же окно, но так как Microsoft отбросила MDI для Excel, вы можете внезапно иметь два разных окна, используя тот же код, что и раньше. Смешивание этих окон может привести к проблеме, с которой вы столкнулись.
см. эту ссылку для некоторых изменений с Excel Две тысячи тринадцать: https://msdn.microsoft.com/en-us/library/office/dn251093.aspx
и еще одна возможность заключается в том, что это на самом деле ошибка в Excel. Я нашел кого-то еще, у кого была такая же проблема, но неясно, решил ли этот человек проблему или заполнил ошибку доклад:
вы можете подать отчет об ошибке с Microsoft и подождать, чтобы увидеть, могут ли они подтвердить это как ошибку.
есть ли возможность сделать это в VBA?
Если вы хотите проверить, действительно ли лист активен, вы можете сделать:
документация MSDN будет выглядеть так, как будто надстройки VBA работают лучше с 2013/365, чем C#.
да! Я исправил это, как Xatoo предложил с добавлением:
важно добавить, что это решение работает только тогда, когда фактически окно свернуто, поэтому вам нужно проверить это.
забавная деталь заключается в том, что это все еще не отправляет окно на передний план.
вы можете установить xlMaximized для лучшей практики. Потому что xlNormal может же xlMinimized, так что получить ошибку снова.
«Невозможно установить свойство FreezePanes класса Window» Excel 2016 (офис 365)
Я построил надстройку Excel, которая заполняет рабочий лист данными из базы данных. Я также добавляю некоторые стили и блокирую некоторые строки и столбцы с помощью FreezePanes.
Excel из офиса 365, вероятно, действительно хочет, чтобы моя рабочая таблица Excel была физически на переднем плане, но worksheet.Activate() не помогает, и я также попробовал следующий код:
Но это тоже не сработало. Может ли кто-нибудь помочь мне с этим?
Чтобы быть ясным: версия моего Excel является 2016 Версия 1611 (Build 7571.2109)
4 ответа
Да! Я исправил это, как предложил Xatoo, добавив:
Важно добавить, что это решение работает только тогда, когда на самом деле окно свернуто, поэтому вам нужно проверить это.
Забавная деталь в том, что это все еще не отправляет окно на передний план.
Возможно ли, что worksheet.Application.ActiveWindow не является окном, содержащим ваш активный рабочий лист? В предыдущих версиях Excel все книги имели одно и то же окно, но поскольку Microsoft удалила MDI для Excel, у вас могут неожиданно появиться два разных окна, использующих один и тот же код, как и раньше. Смешивание этих окон может привести к проблеме, с которой вы столкнетесь.
Смотрите эту ссылку для некоторых изменений после Excel 2013: https://msdn.microsoft.com/en-us/library/ офис / dn251093.aspx
И еще одна возможность заключается в том, что это на самом деле ошибка в Excel. Я нашел кого-то, у кого была такая же проблема, но неясно, решил ли этот человек проблему или заполнил отчет об ошибке:
Вы можете отправить отчет об ошибке в Microsoft и подождать, чтобы узнать, смогут ли они подтвердить это как ошибку.
Есть ли возможность сделать это в VBA?
Если вы хотите проверить, действительно ли лист активен, вы можете сделать:
Документация MSDN создаст впечатление, что надстройки VBA работают лучше с 2013/365, чем C #.
Вы можете установить xlMaximized для лучшей практики. Потому что xlNormal может такой же xlMinimized, так что получите ошибку снова.
FreezePanes without ActiveWindow
gauntletxg
Well-known Member
I’m automating some Excel tasks from another language (AutoIt), and have hit a snag with freezing panes. The basic structure of the AutoIt code is
Everything works fine, except the code I have in my Excel macro to freeze panes doesn’t work, as the application is not visible and thus there’s no active Excel window to work with. Is there a way I can freeze panes in this context? The only thing I can think of is ActiveSheet.FreezePanes, but that doesn’t work.
Excel Facts
Tom Urtis
MrExcel MVP
OK, there are some idiosyncrasies at work here, which can get confusing for this to work in your case, because the full context of your code is not evident.
FreezePanes is a property of a Window and of the ActiveWindow. Note, key words here (believe it or not) are «a» and «the».
The ActiveWindow is the window that is active, meaning it needs to be activated (selected) for it to be active, as there can only be one ActiveWindow in a single instance of Excel, hence the significance of the word «the».
A Window can be another workbook in the same instance of Excel, or a second Window in the same workbook such as if you click Window > New Window for the active workbook. In that respect, a Window does not need to be active for FreezePanes to be set. However, if for example you have Sheet1 active and you create a new window, and in that window you activate Sheet2, then re-activate your first (original) window to be on Sheet1 and you exectute
Windows(2).FreezePanes = True
it will freeze panes on Sheet2 in the second window but not Sheet2 on the window you are actively on.
So in your case, where this leaves you might be right smack in the middle, where you are creating an Excel object, which (and this is where I cannot tell) may or may not be in the same instance of Excel. If you are creating a seperate instance, that instance will not be recognized as a Window in the Windows collection of your active workbook.
If the Excel app yuou are creating is a part of your current active workbook’s Window collection, you could execute this codeline to freeze panes on that unselected Window app.
Windows(2).FreezePanes = True
. assuming it is the second Window in your collection, as an example.
Otherwise, you are out of luck unless you make visible that xl object being created, make it active, and then set the Freeze Panes at that point.
Нельзя установить свойство freezepanes класса window
Вопрос
I have a workbook (Excel 2007) with several worksheets and want to freeze panes in all
instead of range.select also tried Application.Goto ActiveSheet.Range(«E5») and if the activecell is for instance Z35 doesn’t work correctly
just work if I set the Application.ScreenUpdating to true.
Can someone advise. would like not see the screen jumpping.
Ответы
I use the same workaround in Excel 2003; it works fine.
The trick is that the cells above and to the left of the freeze have to be visible (hence GoTo «A1»).
If the corner cell is not in the window, the window is quartered as usual.
Все ответы
Regards, Hans Vogelaar (http://www.eileenslounge.com)
I have tried and it doesn’t. Only if I have the Application.ScreedUpdating = true (turn on)
My problem is when the code run the user has already interact with the workbook.
Regards, Hans Vogelaar (http://www.eileenslounge.com)
I use the same workaround in Excel 2003; it works fine.
The trick is that the cells above and to the left of the freeze have to be visible (hence GoTo «A1»).
If the corner cell is not in the window, the window is quartered as usual.
Yes the trick is make the goto before set the ScreenUpdating to False.
It also works in Excel 2007
I am having a similar issue: If I set Application.Visible = False, ActiveWindow.FreezePanes does not work.
I’m calling the vba function stored in an Excel Marco-Enabled Workbook (.xlsm), using a PowerShell Script, while the PowerShell script is triggered by SQL Server Job Agent. If I directly run the PowerShell script in PowerShell console, this issue won’t happen. But if I run this script in the PowerShell console inside the SQL Server 2014, this bug will happen.
System: Windows Windows Server 2012 R2 Standard (6.3.9600 Build 9600)
SQL Server: Microsoft SQL Server 2014 Standard 64-bit
Excel: Excel 2013 32-bit (15.0.4420.1017) MSO (15.0.4420.1017) (Microsoft Office Professional Plus 2013)