Bu olaylar için vba object model kelimesinde tanımlanmış olaylar var mı?


0

Her şeyden önce baktım ve hiç bulamadım.

Aşağıdakilerden biri olduğunda bir makronun çalışmasını istiyorum:

  1. Belge açıldı
  2. Belge kaydedildi
  3. Metin belgeye yapıştırılır
  4. Belge bir sayfaya birden büyüyor.
  5. Belge bir sayfaya daha az küçülür.

İlk 2 için, teknik olarak ikincisi kaydedilmeden önce olsa bile olaylar var, diğer üçünde de var mı? Değilse, bir şekilde onları ekleyebilir miyim?

İki numaralı olay ile ilgili olarak, otomatik kaydetme sırasında da bir DocumentBeforeSave olayı var mı?


Tam olarak değil, tüm belgenin toplam sayfa sayısı. Bazen insanlar inceleme için sadece bir kısmını yazdırmak isteyebilirler. Bu, baskı alanını değiştirir, ancak toplam sayfa sayısını değiştirmez.
Ernst

Yanıtlar:


1

Komutları yakalama / yakalama komutlarından bahsediyorsunuz. Haklısın, için olaylar var. open ve save, ancak diğerleri daha az yaygındır. İşte bazı kodlara bir bağlantı Yakalamak macun . Excel'e odaklanıp odaklanmadığını biliyorum, ancak yapmaya çalıştığınız şey için doğru yöne gitmenize yardımcı olabilir.

Ayrıca, kontrol edin 2007 Office Sistemindeki Yerleşik Komutları Denetlemek için VBA'yı Kullanma . Bu yazıda bir bağlantı var Ofis Geliştiricileri için SDK Belgeleri ve Referansları hangi da yardımcı olabilir.

Aklında tut; Makro Güvenliği aynı ayarlanmadıkça kaydedilmiş bir belgede makro çalıştırmak her kişi için aynı şekilde çalışmayabilir. Bazı bilgisayarlar engellenmiş olabilir, bu da belgenizin istediğiniz gibi davranmayacağı anlamına gelir.


Paste olayını yakalamak için öneri bellekten gibi çalışacağını sanmıyorum Application.OnKey MS Word'de çalışmaz.
Adam

1

Alttaki yerleşik yöntem adıyla aynı adı vererek belirli VBA işlevlerini geçersiz kılabileceğinizi düşünüyorum. Bu durumda, bu olayın yakalanması olarak hizmet etmelidir.

Sub EditPaste()

Selection.Paste
'Other code

End Sub

Belgedeki sayfa sayısını yakalamakla ilgili olarak, sayfa sayısını yoklamak ve sayım değişmişse hareket etmek için bir zamanlayıcı kullanabilirsiniz:

Private Sub Document_Open()

Application.OnTime When:=Now + TimeValue("00:00:01"), _
Name:="CheckPages"

End Sub

Sub CheckPages()

'
' Get pages using ActiveDocument.ActiveWindow.ActivePane.Pages.Count 
' Compare with page count stored via global variable
' If they don't match run code for your event.

'Rerun the macro in 1 second
Application.OnTime When:=Now + TimeValue("00:00:01"), _
Name:="CheckPages"

End Sub
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.