Bu öğretici, bir VBA Otomasyon Hatasının ne anlama geldiğini ve nasıl oluştuğunu açıklayacaktır.
Excel nesnelerden oluşur - Çalışma Kitabı nesnesi, Çalışma Sayfası nesnesi, Aralık nesnesi ve Hücre nesnesi bunlardan birkaçıdır. Her nesnenin davranışı VBA koduyla kontrol edilebilen birden çok özelliği ve yöntemi vardır. VBA kodu doğru programlanmamışsa, bir otomasyon hatası meydana gelebilir. VBA'daki en sinir bozucu hatalardan biridir, çünkü kodunuz tamamen iyi göründüğünde genellikle görünürde bir sebep olmadan ortaya çıkabilir!
(VBA Hataları hakkında daha fazla bilgi için Hata İşleme Kılavuzumuza bakın)
Artık Aktif Olmayan Bir Değişkene Başvurmak
Bir değişken aracılığıyla bir çalışma kitabına veya çalışma sayfasına başvurduğunuzda bir Otomasyon Hatası oluşabilir, ancak değişken artık etkin değildir.
1234567891011 | Alt TestOtomasyonu()Dize Olarak Dim strFileÇalışma Kitabı Olarak Dim wb'dosyayı aç ve çalışma kitabı değişkenini ayarlastrFile = Application.GetOpenFilenamewb = Workbooks.Open(strFile) ayarla'Çalışma kitabını kapatwb.Kapat'çalışma kitabını etkinleştirmeyi deneyinwb.EtkinleştirAlt Bitiş |
Yukarıdaki kodu çalıştırdığımızda otomasyon hatası alacağız. Bunun nedeni, bir çalışma kitabı açıp o çalışma kitabına bir değişken atamış olmamızdır. Daha sonra çalışma kitabını kapattık ancak sonraki kod satırında kapalı çalışma kitabını etkinleştirmeye çalışıyoruz. Değişken artık aktif olmadığı için bu hataya neden olur.
Bir çalışma kitabını etkinleştirmek istiyorsak, önce çalışma kitabını açmamız gerekiyor!
Bellek Aşırı Yüklemesi
Bu hata bazen bir döngünüz varsa ve döngü sırasında bir nesneyi temizlemeyi unutursanız da oluşabilir. Ancak, yalnızca bazen ortaya çıkabilir, diğerleri değil - bu hatanın bu kadar can sıkıcı olmasının nedenlerinden biri de budur.
Örneğin aşağıdaki bu kodu alın:
1234567891011121314151617 | Alt InsertPicture()Dim i Tamsayı OlarakNesne Olarak Dim shpi = 1 ila 100 içinÇalışma Sayfaları ile ("Sayfa1")'nesne değişkenini ayarlaSet shp = .OLEObjects.Add(ClassType:="Forms.Image.1", Link:=False, DisplayAsIcon:=False, Left:=.Cells(i, "A").Left, Top:=.Cells( i, "A").Üst, Genişlik:=264, Yükseklik:=124)İle bitmekshp ile.Object.PictureSizeMode = 3'resmi yükle.Object.Picture = LoadPicture("C:\data\image" & i & ".jpg").Object.BorderStyle = 0.Object.BackStyle = 0İle bitmeksonraki benAlt Bitiş |
Değişken bir Nesne olarak bildirilir ve ardından AYARLAMAK Anahtar kelime, nesneye bir görüntü atamak için kullanılır. Nesne daha sonra bir görüntü ile doldurulur ve aynı anda gerçekleşen bazı biçimlendirmelerle Excel sayfasına eklenir. Ardından, Excel sayfasına 100 resim eklemek için koda bir döngü ekleriz. Bu bazen bir otomasyon hatasına neden olur, ancak bazen olmaz - sinir bozucu, değil mi?
Bu sorunun çözümü, nesneyi şu şekilde ayarlayarak döngü içindeki nesne değişkenini temizlemektir. HİÇBİR ŞEY - bu, belleği boşaltacak ve hatayı önleyecektir.
12345678910111213141516171819 | Alt InsertPicture()Dim i Tamsayı OlarakNesne Olarak Dim shpi = 1 ila 100 içinÇalışma Sayfaları ile ("Sayfa1")'nesne değişkenini ayarlaSet shp = .OLEObjects.Add(ClassType:="Forms.Image.1", Link:=False, DisplayAsIcon:=False, Left:=.Cells(i, "A").Left, Top:=.Cells( i, "A").Üst, Genişlik:=264, Yükseklik:=124)İle bitmekshp ile.Object.PictureSizeMode = 3'resmi yükle.Object.Picture = LoadPicture("C:\data\image.jpg").Object.BorderStyle = 0.Object.BackStyle = 0İle bitmek'nesne değişkenini temizleshp = Hiçbir şey olarak ayarlasonraki benAlt Bitiş |
DLL Hataları ve Windows Güncelleme
Bazen hata oluşur ve VBA kodu içinde yapılabilecek hiçbir şey yoktur. Kullanılan DLL'leri yeniden kaydettirmek, Windows'umuzun güncel ve son çare olarak olduğundan emin olmak, bazen bu hatayı gidermek için işe yarayabilecek tek şey olarak bir Kayıt Denetimi yapmak.
Bu hatayı önlemenin iyi bir yolu, aşağıdakileri kullanarak hata tuzaklarının yerinde olduğundan emin olmaktır. Hatada Git veya Hatada Devam Et Sonraki rutinler.