2013-09-03 14 views
8

Sorumluluk Reddi: VBA ile çalışmamdan birkaç yıl geçti, bu yüzden kendimi çok farklı bir dille karıştırmamın neden olduğu bir sorun olabilir genellikle uğraştığım şeyden.Excel üstbilgileri/altbilgileri boş bırakılmadıkça VBA aracılığıyla değişmeyecek

So; Çok sayfalı (20+) bir çalışma kitabım var (Excel 2010), bunların çoğu çok sayfalı. Her şeyi yazdırırken işleri daha kolay hale getirmek için, diğerlerinin yanı sıra sayfanın adını, sayfa sayısını ve benzeri bazı sayfalara özgü üstbilgileri eklemek istiyorum.

Başlığı ayarlayan tüm sayfalar üzerinde yineleme yaparak (teoride) bunu benim için yapması gereken küçük bir işlev yazdım. Ancak, bazı nedenlerden dolayı sadece başlık boşsa çalışır; Zaten bir değeri varsa, bilinmeyen bir nedenden ötürü üzerine yazmayı reddeder.

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

Çok garip davranış. Sorunu Excel 2010'da çoğaltabilirim. Başlığı el ile değiştirirken bir makroyu kaydedersem bile o makroyu çalıştırırsanız düzgün çalışmaz. Başlık metninin bölümlerini ekleme ile ilgili rasgele davranış. – Stewbob

+1

Evet, başlığın diğer bölümlerine pagenumbers eklerken bazı sorunlar yaşadım; Bazı sebeplerden dolayı Excel, sihirli kelimelerin bir kısmını (örneğin &. [Sayfalar] ile & [Pa] değiştirerek) kaldırır, böylece tüm başlığı işe yaramaz hale getirir. Bu, yalnızca başlık bir makro tarafından düzenlendiğinde olur, örn. eğer LeftHeader değiştirirse, aynı zamanda dağınık olacak RightHeader – bjelleklang

+0

Excel 2010'a sahip olmamanız lütfen beni görmezden gelmeyin - ancak, eğer varsa, etkiyi bilmek istiyorum: 'role = GetRole (Mode) ' – pnuts

cevap

8

Metni değiştirmek için işe yarayacak bir çözüm buldum. Nedeni ne olursa olsun, makroda, düzgün çalışması için header/footer format character codes'u eklemeniz gerekir. &L, &C olmadan

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 

ve &R kodları metinden önce, ben işe alamadım:

Bu kod mevcut başlık yeni bilgilerle metni değiştirmek için çalıştı.

.CenterHeader = "&L some text" 

aslında LeftHeader pozisyonunda some text koyacağız:

buldum Bazı ilginç davranış aşağıdaki kodu kullanabilirsiniz eğer olmasıdır. Bu, biçimlendirme kodlarının çok önemli olduğuna inanmamı sağladı.

+0

Mükemmel, çok teşekkürler. – bjelleklang

+0

Bu hala benim için çalışmıyor. Çok sinir bozucu. – eksortso

6

PageSetup işlemi yapmadan önce Application.PrintCommunication = False hattı (ki bu makro kaydedici tarafından eklenir) VBA ile biçimlendirmeyi sıkıştırır.

Kodunuzda bu satır varsa, çıkarmayı deneyin. Bu, VBA aracılığıyla üstbilgiyi ve altbilgiyi ayarlamayla ilgili sorunumu çözdü.

+0

Teşekkürler! Bu doğru cevap, aynı zamanda kaydedilen çizgiyi tuttuğumdan beri. Bu satırı kaldırdığımda makro beklendiği gibi çalışmaya başladı. –

2

Yıllardır StackOverflow'u okudum ve bu gerçekten bir çözüm gönderebildiğim ilk sefer ... umarım birilerine yardım eder! Ayrıca, hatırlamanız gerekir, ben bir CPA programcı değil ;-)

Başlığı doldurmak için ActiveSheet'den bazı değerler okuyorum. Uygulama, vergi beyannamesi ile gönderilecek bir vergi seçmedir, böylece vergi mükellefinin adı ve üstte sosyal güvenlik numarası olmalıdır.

Bugün seçim formu daha sonra seçim biçimlendirir olarak Mark-to-Market seçim yılı aynı olmadığını denetler
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 

.

1

Yaprak baskı ayarlarını 2 döngüye ayırdım. Uygulama ile ilk döngü.PrintCommunication = False Başlıksız/altbilgi kurulumunu çalıştırıyorum. Daha sonra Application.PrintCommunication = True ayarını yapıyorum ve üstbilgi/altbilgi kurulumunu ikinci bir döngüde çalıştırıyorum. XL2003'ten daha hızlı çalışacak ve üstbilgi/altbilgiyi doğru uygular. MS bu hatayı çözene kadar, bu benim için iyi çalışıyor.