1 sayfadan 1. sayfa

LibreOffice Macro library içinde Excel VBA kodu çalışmıyor

İletiTarih: 27 Ağu 2019, 12:08
mert
Merhabalar,

Libreoffice Calc hücrelerini makro ile formatlamak için aşağıdaki VBA kodunu kullanıyorum.

Kod: Tümünü seç
Option VbaSupport 1
Sub hucreleri_formatla()
Selection.NumberFormat = "#.###,00;0;;;@"  'Sifirlari gizleyen duzgun sayi formati
End Sub


Ancak bu kodlara her dosyadan erişmek istiyorum. Yani her dosyaya tek tek bu kodu eklemek yerine Libreoffice MyMacros altındaki kütüphanelere(EKRAN GÖRÜNTÜSÜ EKLEDİM) ekleyerek her dosyadan erişmek uygun oluyor. Ancak bu alana eklediğim VBA kodları Option VBASupport 1 uyumluluk bildirimini girsem de hata veriyor. Her bir dosya içine ayrı ayrı eklersem çalışıyor.

MyMacros altındaki kütüphanelerde bu kodu çalıştırmak için bir yol var mıdır.
Bu kodun Libre Basic karşılığını araştırdım ancak bulamadım ve modifiye de edemedim.

Her iki türlü de yardım edebilecek arkadaşlara şimdiden teşekkür ederim.
mert

Re: LibreOffice Macro library içinde Excel VBA kodu çalışmıyor

İletiTarih: 09 Eyl 2019, 22:33
Hamurcu
@mert,

LibreOffice ile MS Office %100 uyumlu değildir özellikle macro ve VB konusunda.

Yakın zamanda LİbreOffice Basic Programlama konusunda Türkçe içerikli dokümanlar hazırlayıp yayınlayacağım.

Forum'dan duyurusunu yaparım.

O zamana kadar çalıştırmak istediğin komutları yine forumda sorabilirsin elimden geldiğince destek olurum.

Ancak bir ricam olacak kesinlikle Excel'de şu kodu yazdım al bunu LibreOffice'e çevir gibi bir talep olmasın.

Temel algoritmalar ve komut farklılıklarını elbette anlatabilirim ama ondan ötesini sizin yapmanız gerekir.

Re: LibreOffice Macro library içinde Excel VBA kodu çalışmıyor

İletiTarih: 17 Eyl 2019, 16:46
mert
Yanıtınız için teşekkür ederim.
Libreoffice makroları konusundaki örneklere gerçekten çok ihtiyaç var. Bu konuda çok yönlü örnekler yapabilirseniz
oldukça faydalı olur. Çünkü yurtdışı kaynaklarında bile güzel örnekler bulamıyorum.

Buraya verdiğim VBA örneğini çalıştıramayınca Libreoffice Calc makro kaydet yoluyla oluşturduğum kodu düzenleyerek aynı sonuca ulaşmaya çalıştım. ilginç olan kod bazen çalışıyor bazen çalışmıyor. Çalışmadığı zamanlar buna ne engel oluyor birisi hariç tespit edemedim. Dosya uzantısı .xls ise kod çalışmıyor. En azından öyle görünüyor, ods olarak kaydedince çalıştı. Yine de bazı zamanlar ods uzantılı dosyalarda da çalışmıyor. Çok ilginç!

Ancak buradaki gereklilik kodun dosya içinde(OPEN OFFICE FILE FORMAT = ods uzantısı içinde) saklanmaması, genel alan dizininde saklanarak çalıştırılması ihtiyacı var. Bu alanda da vba kodu uyumluluk bildirimi(option vbasupport 1) yazsanız da çalışmıyor.


Makro kaydet ile Libre Basic olarak oluşturduğum kodu aşağıda paylaşayım. Belki takılma sorunu çözülebilir ve ihtiyacı olan yararlanabilir.

Libreoffice Sürümüm 6

Kod: Tümünü seç
REM  *****  BASIC  *****
sub SIFIRSIZkurusluF
rem -------MAKRO KAYDET ILE YAPILDI KISMEN UZERINE KOD EKLENDI(oSel)-------------
rem define variables
dim document   as object
dim dispatcher as Object

dim oSel as object, oSheet as Object   'eklenen
rem ----------------------------------------------------------------------
rem get access to the document
oSheet=thiscomponent.getcurrentcontroller.activesheet     'aktif sayfayı oSheet değişkenine ata
oSel = ThisComponent.getCurrentSelection()   'seçili alanı oSel değişkenine ata
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = oSel ' Seçili alanı sözlük diziye ata (bu dizi nin özelliklerini bilmiyorum)


dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "NumberFormatValue"
args2(0).Value = 111        '"#.###,00;0;;;@" bu formatın karşılığı kod

dispatcher.executeDispatch(document, ".uno:NumberFormatValue", "", 0, args2())
end Sub