2013-09-05 13 views
5

"Widok obok siebie" i "Przesuwanie synchroniczne" ułatwiły porównanie 2 arkuszy kalkulacyjnych. Jednak nie ma funkcji "Synchronous Switching", więc jeśli przejdę do innej zakładki w jednym ze skoroszytów i dalej przewijam, zsynchronizowane przewijanie stanie się całkiem zabawne.znajdowanie okien w trybie "obok siebie"

Cóż, nie powinienem narzekać, ponieważ wszystko odbywa się ręcznie i powinienem mądrze korzystać z tej funkcji.

Jako leniwy programista, chciałbym napisać kod, aby się wykopać: Czy mogę napisać makro, aby zautomatyzować zmianę arkusza roboczego w oknie równorzędnym w trybie równoległym?

To załamuje się z 2 etapów:

  1. skąd mam wiedzieć, czy okno, najprawdopodobniej ActiveWindow, znajduje się w trybie side-by-side?
  2. Jeśli tak, to jak mogę powiedzieć, które okno jest równorzędne?

Zrobiłem swoją pracę domową. Wygląda na to, że Excel nie jest bardzo przyjazny dla programistów. Są 3 sposoby

  • BreakSideBySide()
  • CompareSideBySideWith(WindowName)
  • ResetPositionsSideBySide()

i 1 Właściwość logiczna

  • SyncScrollingSideBySide

w kolekcji Windows związanej z tą funkcją, ale są niewystarczające do rozwiązania moich pytań.

Czy ktoś ma pomysł, jak to osiągnąć? Czy rzeczywiście jest to niemożliwe? Z góry dziękuję.

Odpowiedz

0

Można to osiągnąć za pomocą zdarzenia Workbook_SheetActivate:

http://msdn.microsoft.com/en-us/library/office/ff195710.aspx

jeśli umieścić ten kod w swoim ThisWorkbook obiektu, za każdym razem po zmianie aktywnego arkusza, to będzie ...

  1. Przejście przez wszystkie otwarte skoroszyt o innej nazwie
  2. Poszukaj arkusza roboczego o tej samej nazwie co arkusz, który właśnie kliknąłeś na
  3. Aktywuj arkusza w innym skoroszycie

    Private Sub Workbook_SheetActivate(ByVal Sh As Object) 
    
        For i = 1 To Application.Workbooks.Count 
         If Application.Workbooks(i).Name <> ThisWorkbook.Name Then 
    
          Dim otherWB As Workbook 
          Set otherWB = Application.Workbooks(i) 
          otherWB.Sheets(Sh.Name).Activate 
    
         End If 
        Next 
    
    End Sub 
    

Zauważ, że to wymaga arkusz istnieć we wszystkich otwartych skoroszytach. W przeciwnym razie wystąpi błąd. Można jednak łatwo dodać obsługę błędów, aby zignorować skoroszyty z nieodpowiednimi arkuszami roboczymi.

Należy również pamiętać, że najlepiej jest użyć tego, gdy są otwarte tylko dwa skoroszyty.Nie analizowałem innych metod, o których wspomniałeś, ale może istnieć sposób na identyfikację dwóch skoroszytów, które są obecnie w trybie side-by-side, w którym to momencie kod mógłby rzucić pętlę i stać się bardziej zwięzły.

+0

Dziękuję, Mr.Reband, za fragment kodu Aktywacja arkusza roboczego. Jednak moim problemem jest znalezienie okna peer w widoku obok siebie. Tak, byłoby łatwiej, gdyby były tylko 2 widoczne okna (lub skoroszyt) - żaden wybór nie jest najlepszym wyborem. Ale niestety nie zawsze tak jest. Porównywanie 2 okien obok siebie i śledzenie różnic w trzecim pliku - tak zwykle robię w pracy. – clumsyman

+0

Można obejść ten problem, używając zmiennej prywatnego skoroszytu do przechowywania porównywalnej nazwy skoroszytu, a następnie napisać osobną metodę, która wywołuje funkcję 'CompareSideBySideWith', a także ustawia zmienną prywatnego skoroszytu. Wtedy nie musiałbyś nic zamykać, a możesz porównać 2 pliki i wyśledzić różnice w trzeciej. Możesz też otworzyć nowe wystąpienie programu Excel i zachować tam trzeci skoroszyt. –

+0

Wygląda na to, że najbliższym ujęciem, jakie mogę uzyskać, jest zapętlenie wszystkich otwartych skoroszytów i przełączenie arkusza roboczego o tej samej nazwie. To znaczy, jeśli książka ma arkusz o tej nazwie. To nie jest idealne, ale myślę, że nikomu to nie zaszkodzi :) – clumsyman

Powiązane problemy