Microsoft Excel 2010'da VBA kullanarak Excel'i Word'den kontrol edin

Anonim

Bir kelime belgesinden bir excel dosyasına veri kopyalamamız gereken zamanlar vardır. Office'in tüm sürümlerinde bir makro ile bunu çok kolay bir şekilde yapabiliriz. Makro, mevcut / yeni bir excel dosyasını açacak, içeriği kopyalayacak ve ardından dosyayı kaydedip kapatacaktır. Bunun nasıl yapıldığını görelim.

Seçenek Açık


Alt OpenAndReadWordDoc()
Dim tString As String
Dim p Uzun, r Uzun
wrdApp Nesne Olarak Dim, Nesne Olarak wrdDoc
Çalışma Kitabı Olarak Dim wb
Dim trange Varyant Olarak

wb = Çalışma Kitaplarını ayarla.Add
wb.Worksheets(1).Range(“A1”) ile
.Value = “Word Belgesi İçeriği:”
.Font.Bold = Doğru
.Font.Size = 14
.Ofset(1,0).Seç
İle bitmek

r = 3

Set wrdApp = CreateObject(“Word.Application”)
wrdApp.Visible = Doğru
wrdDoc = wrdApp.Documents.Open(“B:\Test\MyNewWordDoc.docx”) olarak ayarlayın

wrdDoc ile
p = 1 ila .Paragraphs.Count için
Set trange = .Range(Start:=.Paragraphs(p).Range.Start, _
Bitiş:=.Paragraflar(p).Aralık.Son)
tString = trange.Text
tString = Sol(tString, Len(tString)-1)

Eğer Instr(1, tString,”1”) > 0 ise
wb.Worksheets(1).Range(“A” & r).Value = tString
r=r+1
Bitir

Sonraki p
.Kapat

İle bitmek

wrdApp.Çık
wrdDoc'u ayarla = Hiçbir şey
wrdApp'i ayarla = Hiçbir şey
wb.Kaydedildi = Doğru

Alt Bitiş

Yukarıdaki kodu dosyanıza kopyalamak için,

  • Klavyede Alt + F11 tuşlarına basın
  • Sol tarafta Microsoft Excel Nesneleri göreceksiniz.
  • Sağ tıklayın ve Ekle'yi seçin
  • Ardından Modül'e tıklayın
  • Kodu sağdaki kod penceresine kopyalayın

Şimdi bu kodun nasıl çalıştığını görelim -

İlk önce -tstring'e ihtiyacımız olan değişkenleri metni tutacak bir dizge olarak bildiririz (hangi metni daha sonra göreceğiz). Sayaç olarak 2 değişken “p” ve “r”. Bunlar “uzun” tiptedir. Sonra 2 nesne değişkenimiz var wrdApp ve wrdDoc. wrdApp, kelime uygulama nesnesidir ve wrdDoc, Word belge nesnesidir. Wb, kodda oluşturulan yeni çalışma kitabı için çalışma kitabı değişkenimizdir. Mevcut bir çalışma kitabını açıyorsanız, bunun yerine bu değişkeni atayabilirsiniz. Son değişken, word doc'dan excel dosyasına aktarılması gereken içeriğe sahip olacak değişkenin trange varyant türüdür.

wb = Çalışma Kitaplarını ayarla.Add

Bu, yeni çalışma kitabını wb değişkenine atar. Yeni bir çalışma kitabı eklemek istemiyor ancak mevcut bir çalışma kitabını açmak istiyorsanız, bu satırı aşağıdaki gibi değiştirebilirsiniz:
wb'yi ayarla - Workbooks.Open(“B:\Test\File1.xlsx”)

wb.Worksheets(1).Range(“A1”) ile
.Value = “Word Belgesi İçeriği:”
.Font.Bold = Doğru
.Font.Size = 14
.Ofset(1,0).Seç
İle bitmek

With wb.Worksheets(1).range(“A1”), ona başvurmanın hızlı bir yoludur. Böylece With ve End with ifadeleri arasındaki kod satırlarının her biri için tekrarlamanız gerekmez.

Bu kod satırları, 1'in A1 hücresine kalın yazı tipi ve 14 yazı tipi boyutuyla “Word Belgesi İçeriği:” metnine yerleştirilir.NS yeni çalışma kitabındaki çalışma sayfası. Ardından .Offset(1,0).Select sonraki satırı seçer.

r = 3

Word belgesinden kopyalanacak veriler için excel dosyasındaki başlangıç ​​satırı olduğu için “r” değişkenine 3 değeri atanır.

Set wrdApp = CreateObject(“Word.Application”)

Word sisteminizde zaten çalışıyorsa,CreateObjectyeni bir Word örneği oluşturacaktır. Dolayısıyla bu satır, wrdApp nesne değişkenini, daha sonra kodda kullanabileceğiniz Word Uygulamasına atar.

wrdApp.Visible = Doğru

Yeni oluşturulan Word örneği, oluşturulduğunda görünmeyecektir. Görünür hale getirmek için, wrdApp.Visible = True değerini görünür hale getirmeniz gerekir.

wrdDoc = wrdApp.Documents.Open("B:\Test\MyNewWordDoc.docx") olarak ayarlayın

Word uygulamasının yeni örneğini oluşturduk ancak henüz bir kaynak word belgesi açmadık. Yani bu komut word belgesini açacaktır. wrdDoc nesnesi, daha sonra kodda kullanabilmemiz için bu belgeye atanmıştır.

wrdDoc ile… .Son ile

Bu, tamamen wrdDoc nesnesiyle çalışacak olan “With” döngümüzdür. Bu döngüyü bir kez açtığınızda, bu döngüde “wrdDoc” metnini tekrarlamanız gerekmez. wrdDoc ile ilgili herhangi bir nesneden önce doğrudan nokta (“.”) ile başlayabilirsiniz. Bu döngü ile biter İle bitmek Beyan. End With ifadesi girildikten sonra, wrdDoc'tan sonraki nesnelere yalnızca “.” ile başvuramazsınız.

p = 1 için .Paragraphs.Count

Bu, 1'den dönecek olan “For” döngüsüdür.NS word belgesindeki son paragraflara. Verileri içeren word dosyası, her biri ayrı bir paragraf olarak saklanan 100 satır bilgi içerir. Döngü 1'den 100'e kadar artacak ve paragrafları kopyalayacaktır. Belirli koşullar belirlenirse, kopyala yapıştır bu koşullara dayalı olacaktır.

Set trange = .Range(Start:=.Paragraphs(p).Range.Start, End:=.Paragraphs(p).Range.End)

Bu, döngü arttıkça aralığa her paragrafın başlangıcını ve sonunu atar.

tString = trange.text
tString = Sol(tString,len(tString)-1)

Önce trange'den gelen metin TString'e iletilir. Sonra her paragrafın cümlenin sonunda bir paragraf karakteri vardır. Bu, Sol işlevi kullanılarak kaldırılır. Sol taraftan, sonuncusu dışındaki tüm karakterler tString değişkeninde saklanır.

Instr(1, tString, “1”) > 0 ise
wb.Worksheets(1).Range(“A” & r).Value = tString
r=r+1
Bitir

Bu EĞER işlevi, tString içindeki metnin 1 sayısını içerip içermediğini kontrol eder. Doğruysa, tString'in içeriğini çalışma kitabındaki bir sonraki kullanılabilir satıra kopyalar. “r” ilk önce 3 değerine sahipti. r=r+1 kullanarak, bir sonraki girdinin önceki girdinin altına yerleştirilebilmesi için onu 1 artırıyoruz.

Sonraki p
.Kapat

NS Sonraki p sonraki paragrafa kod artışları satırı.

.Kapat tüm paragraflar üzerinde çalışıldıktan sonra belgeyi kapatır. Excel dosyasında aldığımız çıktı bu -

Çıktıya yalnızca sayının herhangi bir yerinde 1 sayısını içeren paragrafların dahil edildiğini göreceksiniz.

wrdApp.Çık
wrdDoc'u ayarla = Hiçbir şey
wrdApp'i ayarla = Hiçbir şey
wb.Kaydedildi = Doğru

wrdApp.Quit, Uygulama kelimesini kapatacaktır. Set wrdDoc = Nothing ve Set wrdApp = Nothing, bu 2 nesne değişkeni tarafından alınan belleği serbest bırakacak ve onları Nothing olarak ayarlayacaktır. wb.Saved = True çalışma kitabını kaydeder.

Yukarıdaki kod ile word dosyasından excel dosyasına hangi verilerin kopyalanacağını kontrol edebiliriz.