2013-09-03 8 views
8

Zrzeczenie się: Minęło kilka lat odkąd pracowałem (dużo) z VBA, więc może to być problem spowodowany przez zmieszanie się z tym, co zasadniczo jest bardzo innym językiem z tego, z czym zwykle mam do czynienia.Nagłówki/stopki Excela nie zmienią się przez VBA, chyba że puste

Tak; Mam skoroszyt (Excel 2010) z wieloma arkuszami (20+), z których większość ma wiele stron. Aby ułatwić drukowanie wszystkiego, chcę dodać nagłówki specyficzne dla arkusza, między innymi nazwę arkusza, liczbę stron i tak dalej.

Napisałem niewielką funkcję, która powinna (teoretycznie) zrobić to dla mnie przez iterację nad wszystkimi arkuszami ustawiającymi nagłówek. Jednak z jakiegoś powodu działa tylko wtedy, gdy nagłówek jest pusty; jeśli ma już wartość, odmawia zastąpienia z nieznanego powodu.

Dim sheetIndex, numsheets As Integer 
sheetIndex = 1 
numsheets = Sheets.Count 

' Loop through each sheet, but don't set any of them to active 
While sheetIndex <= numsheets 
    Dim sheetname, role, labeltext As String 
    sheetname = Sheets(sheetIndex).name 
    role = GetRole(mode) 
    labeltext = "Some text - " & sheetname & " - " & role 

    With Sheets(sheetIndex).PageSetup 
     .LeftHeader = labeltext 
     .CenterHeader = "" 
     .RightHeader = "Page &[Page]/&[Pages]" 
     .LeftFooter = "&[Date] - &[Time]" 
     .CenterFooter = "" 
     .RightFooter = "Page &P/&N" 
    End With 

    sheetIndex = sheetIndex + 1 
Wend 
+0

Bardzo dziwne zachowanie. Mogę zduplikować twój problem w programie Excel 2010. Nawet jeśli nagrywam makro, gdy ręcznie zmieniam nagłówek, a następnie uruchomę to makro, nie będzie działać poprawnie. Pozornie przypadkowe zachowanie dotyczące dodawania fragmentów tekstu nagłówka. – Stewbob

+1

Tak, miałem również pewne problemy przy dodawaniu okładek do innych części nagłówka; z jakiegoś powodu Excel usuwa część magicznych słów (zastępując np. & [Pages] za pomocą & [Pa), czyniąc cały nagłówek bezużytecznym. Dzieje się tak tylko wtedy, gdy nagłówek jest edytowany przez makro, np. jeśli zmieni LeftHeader będzie to zepsuć RightHeader – bjelleklang

+0

Nie mając Excel 2010 proszę zignorować mnie - ale jestem ciekawy wiedzieć, że efekt, jeśli w ogóle, komentowania 'rola = GetRole (Mode)' – pnuts

Odpowiedz

8

Znalazłem rozwiązanie, które wydaje się działać w celu zastąpienia tekstu. Z dowolnego powodu, w makro, musisz włączyć header/footer format character codes, aby działał poprawnie.

Ten kod pracował zastąpić istniejący tekst nagłówka z nowymi informacjami:

Sub test() 
    Dim sht As Worksheet 
    Set sht = Worksheets(1) 
    sht.PageSetup.LeftHeader = "&L left text" 
    sht.PageSetup.CenterHeader = "&C center Text" 
    sht.PageSetup.RightHeader = "&R right text" 
End Sub 

Bez &L, &C i &R kody przed tekstem, nie mogę zmusić go do pracy.

Niektóre interesujące zachowanie znalazłem jest to, że jeśli można użyć następującego kodu:

.CenterHeader = "&L some text" 

to rzeczywiście umieścić some text w pozycji LeftHeader. To doprowadziło mnie do przekonania, że ​​kody formatowania były bardzo ważne.

+0

Idealne, wielkie dzięki. – bjelleklang

+0

To nadal nie działa dla mnie. Bardzo frustrujące. – eksortso

6

Linia Application.PrintCommunication = False (dodawana przez rejestrator makr) przed wykonaniem polecenia PageSetup wkręca formaterstwo za pomocą VBA.

Jeśli kod zawiera ten wiersz, spróbuj go usunąć. To rozwiązało mój problem z ustawianiem nagłówka i stopki za pomocą VBA.

+0

Dzięki! To jest właściwa odpowiedź, ponieważ zachowałem tę nagraną linię. Jak tylko usunąłem tę linię, makro zaczęło działać zgodnie z oczekiwaniami. –

2

Przez lata czytałem StackOverflow i po raz pierwszy udało mi się opublikować rozwiązanie ... mam nadzieję, że pomoże komuś! Trzeba też pamiętać, że jestem CPA, a nie programistą ;-)

Czytam niektóre wartości z ActiveSheet, aby wypełnić nagłówek. Wniosek jest wyborami podatkowymi, które zostaną przesłane wraz z zeznaniem podatkowym, więc musi mieć nazwisko podatnika i numer ubezpieczenia społecznego na górze.

Sub PrintElection() 
' Print preview the MTM Election 
    If Range("Tax_Year").Value = Range("First_MTM_year").Value Then 
     ActiveSheet.PageSetup.LeftHeader = Format(Worksheets("Election").Range("Taxpayer_Name").Value) 
     ActiveSheet.PageSetup.RightHeader = Format(Worksheets("Election").Range("Taxpayer_SSN").Value) 

     ActiveWindow.SelectedSheets.PrintPreview 

    Else 

     MsgBox "The 'Effective For Tax Year' date must EQUAL the 'First MTM year' date", vbOKOnly, "Check Years" 
     Sheets("Roadmap").Select 
     Range("First_MTM_year").Select 
    End If 

End Sub 

Sprawdza, czy rok wyborów Mark-to-Market jest taki sam jak formularz wyborów, a następnie formatuje stronę wyboru.

1

Rozdzielam układ drukowania arkuszy na 2 pętle. Pierwsza pętla z Application.PrintCommunication = False Uruchomiłem konfigurację non-header/footer. Następnie ustaw Application.PrintCommunication = True i uruchom konfigurację nagłówka/stopki w drugiej pętli. Wydaje się działać szybciej niż w XL2003 i poprawnie stosuje nagłówek/stopkę. Dopóki MS nie naprawi tego błędu, to działa dobrze dla mnie.

Powiązane problemy