Excel: если я открываю два окна в одной книге, почему макросы перестают работать в первом окне? - PullRequest
4 голосов
/ 02 февраля 2011

Я пытаюсь настроить кнопку в Excel, чтобы показать двойное представление двух отдельных листов одновременно.Это код, который я написал до сих пор (см. Ниже).Пока что код работает.Проблема в том, что в верхнем окне есть некоторые элементы управления activex на листе, и они, кажется, перестают работать, пока нижнее окно снова не закроется.Почему это происходит, и что я могу сделать, чтобы это исправить?Спасибо.

Private Sub DualViewButton_Click()
  Dim windowToPutOnTimeline As Window

  If Windows.Count = 1 Then
    ThisWorkbook.NewWindow
    Windows.Arrange xlArrangeStyleHorizontal, True, False, False
    Set windowToPutOnTimeline = Windows(1)
    If Windows(1).Top < Windows(2).Top Then
      Set windowToPutOnTimeline = Windows(2)
    End If

    With windowToPutOnTimeline
      .Activate
      HorizontalTimelineSheet.Activate
      .DisplayGridlines = False
      .DisplayRuler = False
      .DisplayHeadings = False
      .DisplayWorkbookTabs = False
      '.EnableResize = False
    End With

    Windows(2).Activate 'go back to the right focus the user expects.

  Else
    If Windows(1).Top = Windows(2).Top Then
      Windows.Arrange xlArrangeStyleHorizontal, True, False, False
    Else
      Windows.Arrange xlArrangeStyleVertical, True, False, False
    End If
  End If
End Sub

РЕДАКТИРОВАТЬ: если я переключаю окно, которое назначается для windowToPutOnTimeline, то проблема исчезает.Так что я по существу обошел проблему, не зная, почему она работает иначе.(см. фрагмент кода ниже)

With ThisWorkbook
  Set windowToPutOnTimeline = .Windows(1)
  Set windowToPutOnDataSheet = .Windows(2)
  tmp = .Windows(1).Top
  .Windows(1).Top = .Windows(2).Top
  .Windows(2).Top = tmp
End With

1 Ответ

4 голосов
/ 08 февраля 2011

Это поведение является ошибкой в ​​элементе управления ActiveX.

В качестве обходного пути используйте кнопку из элементов управления форм, а не кнопку ActiveX

Используя кнопку «Формы», вам нужно будет добавить модуль, объявить подпрограмму с вашим кодом и назначить подпрограмму в качестве макроса действия для вашей кнопки (в отличие от помещения кода в событие нажатия кнопки ActiveX)

Я пробовал это в Excel 2007, кажется, работает нормально - кнопка появляется и работает на обоих окнах

...