YazılarOtomasyon Atölyesi

SolidWorks Makro Hataları ve Çözümleri: 9 Yaygın Durum

Makro hata veriyor, hiçbir şey yapmıyor ya da yanlış sonuç üretiyor. Sahada en çok karşılaşılan dokuz makro hatasının gerçek sebebi ve kalıcı çözümü.

  • 9 dk okuma
Bu Yazıda

"Makro çalışmıyor" cümlesini duyduğumda ilk sorduğum şey şu oluyor: hata mı veriyor, yoksa hiçbir şey mi yapmıyor? İkisi tamamen farklı problemler ve karıştırıldıklarında saatler kaybediliyor.

Hata veren makro aslında iyi haberdir — size nerede takıldığını söylüyor. Asıl tehlikeli olan, hiçbir şey söylemeden yanlış çıktı üreten makrodur. Bu yazıda sahada en çok karşılaştığım dokuz durumu, gerçek sebeplerini ve kalıcı çözümlerini sırayla anlatacağım. Kod yok — ne olduğunu ve ne yapmanız gerektiğini konuşuyoruz.

Makronun temellerini SolidWorks makro nedir, çalıştırma yollarını makro nasıl çalıştırılır yazısında anlatmıştım. Burada tamamen sorun giderme var.

Hata ayıklama sürecini temsil eden illüstrasyon
Hata veren makro iyi haberdir; sessiz kalan makro kötü
01 / 13

Önce ikiye ayırın: gürültülü hata mı, sessiz hata mı

Bir makro üç şekilde "çalışmayabilir":

  1. Bir hata mesajıyla durur. VBA düzenleyicisi açılır, sorunlu satır sarıyla işaretlenir. En kolay tür.
  2. Çalışır ama hiçbir şey yapmaz. Hata yok, çıktı da yok. Kullanıcı makronun çalıştığını sanır.
  3. Çalışır ama yanlış şey yapar. En pahalısı. Yanlış çıktı üretim hattına gider.

İkinci ve üçüncü durum, makroların sahadaki asıl problemi. Sebep neredeyse her zaman aynı: SolidWorks API'sindeki birçok çağrı, başarısız olduğunda hata fırlatmaz — sessizce "olmadı" anlamına gelen bir değer döndürür. Makro bunu kontrol etmezse bir sonraki satıra geçer ve olmayan bir seçim üzerinde işlem yapmaya kalkar.

Otomasyonda en pahalı hata çöken kod değil, sessizce yanlış çıktı üreten koddur. Çöken kodu fark edersiniz; yanlış çıktı üretime gider.

Bu yüzden sorun giderirken ilk hedefimiz hep aynı: sessiz hataları gürültülü hatalara çevirmek.

02 / 13

"Object variable or With block variable not set"

En sık gördüğünüz hata bu olacak. Anlamı basit: kod, var olmayan bir şeyi kullanmaya çalışıyor.

Gerçek sebebi genellikle üç şeyden biri:

  • Hiç belge açık değil. Makro aktif belgeyi istedi, karşılığında hiçbir şey aldı.
  • Bir seçim başarısız oldu ve kod seçilmiş nesneyi kullanmaya kalktı.
  • Aranan özellik (feature) o modelde yok.

Kalıcı çözüm: Her makronun ilk işi, aktif belgenin var olup olmadığını kontrol etmek olmalı. Yoksa kullanıcıya anlaşılır bir mesaj gösterip durmalı. Bu üç satırlık alışkanlık, sahada karşılaşacağınız hataların büyük kısmını baştan keser.

03 / 13

Makro çalışıyor ama hiçbir şey olmuyor

Klasik senaryo: parça için yazılmış bir makroyu teknik resim açıkken çalıştırıyorsunuz. Makro aktif belgeyi alıyor, ama o belge beklediği türde değil. Aradığı özellikleri bulamıyor, hiçbir seçim tutmuyor, sessizce sonlanıyor.

Kalıcı çözüm: Makronun başında belge türünü de doğrulayın. "Bu makro yalnızca parça dosyalarında çalışır" diyen tek bir uyarı, kullanıcının on dakikasını kurtarır.

Bunu bir alışkanlık haline getirin: her makro iki soruyla başlasın — belge var mı ve doğru türde mi.

04 / 13

Kaydedilen makro başka modelde çalışmıyor

Makro kaydediciyle bir işlem kaydettiniz, kendi modelinizde mükemmel çalışıyor, başka bir modelde hiçbir şey yapmıyor. Bu, kaydedilmiş makroların bir numaralı zayıflığı.

Sebebi: Kaydedici, "şu yüzeyi seç" işlemini modeldeki özellik adına ya da koordinata bağlı bir seçim komutuna çevirir. O ad başka modelde yoksa ya da geometri farklıysa seçim tutmaz — ve seçim komutu hata fırlatmaz, sadece "olmadı" der.

Kalıcı çözüm: Seçime bağımlılığı kaldırın. Modeldeki nesneleri ada göre aramak yerine, belgenin kendi listesi üzerinden gezin: tüm yüzeyleri, tüm özellikleri ya da tüm bileşenleri sırayla dolaşıp aradığınız ölçütü sağlayanı bulun. Bu yaklaşım biraz daha uzun ama her modelde çalışır.

Ara çözüm olarak: seçim komutunun sonucunu kontrol edin ve başarısızsa makroyu durdurup kullanıcıyı uyarın. Yanlış sonuç üretmektense durmak her zaman daha iyidir.

Üretilen kodun denetlenmesini temsil eden illüstrasyon
Seçim tutmadığında durmak, yanlış devam etmekten iyidir
05 / 13

Makro bir diyalog penceresinde asılı kalıyor

Toplu işlem makrolarında en sık yaşanan durum. Makro klasördeki 200 dosyayı işliyor, 37. dosyada SolidWorks bir uyarı penceresi açıyor ("bu dosya farklı bir sürümde kaydedilmiş", "referans bulunamadı" gibi) ve makro cevap bekleyerek sonsuza kadar duruyor.

Kalıcı çözüm: Toplu işlem yapan makrolarda, işlem başında kullanıcı uyarılarını kapatın ve sonunda geri açın. SolidWorks'ün bunun için ayarları var: dosya açma sırasında sessiz mod, kaydetme sırasında sessiz mod ve genel uyarı bastırma.

Ama dikkat: Uyarıları kapatmak, uyarıların sebebini ortadan kaldırmaz. Bastırdığınız her uyarının yerine bir kayıt koyun — makro sonunda "şu 12 dosyada şu sorun vardı" diyen bir liste üretsin. Yoksa sessiz mod, sessiz hataya dönüşür.

06 / 13

Toplu işlemde bazı dosyalar atlanıyor

Makro 200 dosya işledi, 188'i tamam, 12'si eksik. Ve hangileri olduğunu bilmiyorsunuz.

Sebebi: Genellikle bir dosya açılamadı (kilitli, salt okunur, ağ erişimi kesildi) ya da beklenmeyen bir yapıdaydı ve makro o dosyayı atlayıp devam etti.

Kalıcı çözüm: Toplu işlem makrolarınız her zaman bir rapor üretsin. En basit hâliyle bir metin dosyası: hangi dosya işlendi, hangisi atlandı, atlanma sebebi ne. Bu alışkanlık, toplu makroları "umarım çalışmıştır" seviyesinden "ne olduğunu biliyorum" seviyesine taşır.

Toplu işlem makrolarının nasıl kurulacağını ayrı bir yazıda ele alacağım; şimdilik kural şu: döngünün her adımı kendi hatasını yakalasın ve döngü durmasın. Tek bir bozuk dosya, 199 dosyayı işlemenizi engellememelidir.

07 / 13

"Type mismatch" hatası

Beklenen türde olmayan bir değer geldi. Makro dünyasında bunun iki ana sebebi var.

Sürüm farkı. SolidWorks API'sindeki bir metot, sürümler arasında imzasını değiştirmiş olabilir. Eski bir makroyu yeni sürümde çalıştırdığınızda bu hatayı alırsınız.

Yanlış belge türü. Montaj bekleyen bir çağrıya parça verilmesi gibi.

Kalıcı çözüm: Sürüm farkı şüpheniz varsa, o metodun güncel dokümantasyondaki imzasını kontrol edin. Makroyu birden fazla SolidWorks sürümünde kullanacaksanız, sürüm numarasını başta okuyup ona göre dallanan bir yapı kurmak gerekir — ama açıkçası bu noktaya geldiyseniz makronun sınırına yaklaşmışsınız demektir.

08 / 13

Makro yavaş çalışıyor

Tek parçada anlık, 50 parçalık montajda dakikalar. Bu genellikle bir hata değil, bir tasarım sorunu.

En sık sebep: Makro, her küçük değişiklikten sonra modeli yeniden kuruyor (rebuild). Yeniden kurma pahalı bir işlemdir; 20 parametre değiştiriyorsanız her birinden sonra değil, hepsi yazıldıktan sonra bir kez yapılmalı.

İkinci sebep: Ekran güncellemesi. Makro çalışırken SolidWorks her adımı ekrana çiziyorsa, süre ciddi biçimde uzar. Toplu işlemlerde ekran güncellemesini kapatmak tek başına ciddi hızlanma sağlar.

Üçüncü sebep: Gereksiz dosya açma. Aynı dosyayı döngü içinde tekrar tekrar açıp kapatmak yerine, bir kez açıp işi bitirmek.

Süre ölçümünü temsil eden illüstrasyon
Yavaşlığın kaynağı genelde hata değil, gereksiz yeniden kurma
09 / 13

Makro başkasının bilgisayarında çalışmıyor

Sizde çalışıyor, meslektaşınızda çalışmıyor. Sebep neredeyse her zaman ortamla ilgili, kodla değil.

Olası sebepler ve çözümleri:

BelirtiSebepÇözüm
Buton var, hiçbir şey olmuyorMakro yolu farklıOrtak klasör, herkeste aynı yol
Açılırken hataEksik VBA referansıReferansı kaldırın ya da geç bağlama kullanın
Güvenlik uyarısıMakro güvenlik ayarıBT ile konuşun; ayarı zorlamayın
Farklı sonuçFarklı şablon/ayarŞablon ve birim ayarlarını standardize edin

Son satır en sinsi olanı: iki bilgisayarda farklı belge şablonu veya birim sistemi kullanılıyorsa, aynı makro farklı sonuç üretebilir. Ekip makrolarında şablon standardizasyonu, kodun kendisi kadar önemli.

Ortak klasör kurulumunu makro nasıl çalıştırılır yazısında anlattım.

10 / 13

Makro doğru çalışıyor ama sonuç yanlış

En zor teşhis edilen durum. Hata yok, çıktı var, ama çıktı yanlış.

En sık sebepler:

  • Birim karışıklığı. SolidWorks içeride metre kullanır; makro milimetre yazdığını sanır. Sonuç bin kat sapar ve bazen gözle fark edilmez.
  • Yanlış konfigürasyon aktif. Makro, o an aktif olan konfigürasyon üzerinde çalışır. Kayıt sırasında hangi konfigürasyonun aktif olduğu koda yazılmaz.
  • Sıralama varsayımı. Kod, listedeki nesnelerin belirli bir sırada geleceğini varsayıyor. O sıra garanti değildir.

Kalıcı çözüm: Makronun ürettiği çıktıyı doğrulayan bir kontrol adımı ekleyin. Kulağa fazladan iş gibi gelir ama şu basit hâli bile yeterli: makro işini bitirdiğinde birkaç kritik değeri okuyup beklenen aralıkta mı diye baksın, değilse uyarsın.

11 / 13

Kalıcı çözüm: makroyu baştan sağlam yazmak

Yukarıdaki dokuz durumun sekizi, üç alışkanlıkla baştan önlenebilir:

1. Her makro iki kontrolle başlasın. Belge var mı, doğru türde mi. Değilse anlaşılır bir mesajla dur.

2. Her API çağrısının sonucu kontrol edilsin. Seçim tuttu mu, dosya açıldı mı, kayıt başarılı mı. Sessiz başarısızlığı gürültülü hataya çevirmenin tek yolu bu.

3. Toplu işlemler rapor üretsin. Ne işlendi, ne atlandı, neden. Rapor olmadan toplu makro, kara kutudur.

Bu üç alışkanlığın nasıl uygulanacağını ve kaydedilmiş kodun nasıl sağlamlaştırılacağını SolidWorks makro nedir yazısında adım adım anlattım.

Ve şunu da söyleyeyim: bu üç alışkanlığı uygulamaya başladığınızda makronuz büyür, karmaşıklaşır ve bakımı zorlaşır. O noktada sorulacak soru artık "makroyu nasıl düzeltirim" değil, "bu iş makro olmaktan çıktı mı" olur. Cevabı makro, API ve add-in arasındaki fark yazısında.

12 / 13

Sık Sorulan Sorular

SolidWorks makrom hata veriyor, nereden başlamalıyım? Önce hatanın türünü ayırın: mesajla duruyor mu, hiçbir şey yapmıyor mu, yoksa yanlış sonuç mu üretiyor? Mesajla duruyorsa VBA düzenleyicisinin işaretlediği satır sorunu doğrudan gösterir. Hiçbir şey yapmıyorsa neredeyse her zaman belge açık değildir ya da yanlış türdedir.

"Object variable or With block variable not set" hatası ne demek? Kod var olmayan bir nesneyi kullanmaya çalışıyor demektir. En yaygın üç sebebi: hiç belge açık olmaması, bir seçimin başarısız olması ve aranan özelliğin o modelde bulunmaması.

Kaydettiğim makro neden başka modelde çalışmıyor? Makro kaydedici, seçimleri o anki modeldeki özellik adlarına veya koordinatlara bağlar. Başka modelde o ad ya da geometri olmadığı için seçim tutmaz. Kalıcı çözüm, ada göre seçim yerine belgenin nesne listesini gezip ölçüte uyanı bulmaktır.

Makro toplu işlemde bir pencerede takılıp kalıyor, ne yapmalıyım? İşlem başında SolidWorks'ün kullanıcı uyarılarını sessiz moda alın, sonunda geri açın. Bastırdığınız her uyarı için makronun sonunda bir rapor satırı üretmeyi ihmal etmeyin; aksi hâlde sessiz mod sessiz hataya dönüşür.

Makrom neden yavaş çalışıyor? En yaygın sebep, her parametre değişikliğinden sonra modelin yeniden kurulmasıdır; yeniden kurma tüm değişiklikler yazıldıktan sonra bir kez yapılmalıdır. İkinci sebep ekran güncellemesinin açık kalmasıdır — toplu işlemlerde kapatmak ciddi hızlanma sağlar.

Makro benim bilgisayarımda çalışıyor, başkasında çalışmıyor. Neden? Genellikle ortam farkıdır: makro dosyasının yolu, eksik bir VBA referansı, makro güvenlik ayarı veya farklı belge şablonu. Ekip makrolarında ortak klasör ve şablon standardizasyonu, kodun kendisi kadar önemlidir.

Makro hata vermiyor ama yanlış sonuç üretiyor, sebebi ne olabilir? En sık üç sebep: birim karışıklığı (SolidWorks içeride metre kullanır), yanlış konfigürasyonun aktif olması ve nesne listesinin belirli bir sırada geleceğinin varsayılması. Çözüm, makronun sonuna kritik değerleri kontrol eden basit bir doğrulama adımı eklemektir.

13 / 13

Özet

Makro sorun gidermenin özü tek cümlede toplanıyor: sessiz hatayı gürültülü hataya çevirin. Hata veren makro size yol gösterir; sessizce yanlış çalışan makro, yanlış parçanın üretilmesine kadar fark edilmez.

Her makroyu iki kontrolle başlatın, her API çağrısının sonucunu kontrol edin ve toplu işlemlerde rapor üretin. Bu üç alışkanlık, bu yazıdaki dokuz problemin sekizini daha ortaya çıkmadan çözüyor.

Bu yazı şu rehberin parçasıSolidWorks Otomasyonu — Makro, API ve Eklenti — Baştan Sona RehberMakro mu, API mi, add-in mi? Hangi işin hangi katmanla çözüleceğini, hangi dilin seçileceğini ve nereden başlanacağını tek sayfada topladım.İlgili projeSolidWorks Add-in GeliştirmeKamyon/treyler dorseleri arka kapı çerçevesini otomatikleştiren SolidWorks yazılımı — VBA makrodan C# Add-in'e.

Kaynaklar

PaylaşLinkedIn