Excel VBA binlik ayracını değiştirme

Katılım
20 Kasım 2010
Mesajlar
62
Excel Vers. ve Dili
Excel 2007 - Excel 2010 TÜRKÇE
Merhabalar
Arkadaşlar biliyorum ki bu binlik ayracı hemen hemen herkes de bir problem olmuş ve bizim forumda olsun başka forumlarda olsun bu konu bir çok kez yazılmış.
Ben bir şey merak ediyorum (saçma olabilir lütfen mazur görün) ;
Sistem ayracını Denetim masası > Dil ve Bölgeden komple değiştire bildiğimiz gibi (ki bu şekilde bütün problemlerim çözülüyor yani en basitinden textboxtan excele aktaracağım sayıları (textbox1 * 1) dememe gerek kalmıyor ".value" demem yetiyor fakat oluşturduğum userform başka bilgisayarlarda da kullanılacağı için onların sistemindeki binlik ayracını da değiştirmem gerekiyor ama bunu yapamam (diğerlerinin muhasebe programları bozuluyor) neyse sisteminkini değiştire bildiğim gibi Excel VBA 'nın sistem ayracını da komple değiştirebilir miyim? yani Excel VBA 'ya bundan sonra binlik ayracı "#,##0.00" olarak değilde "#.##0,00" olarak kabul et diye bilir miyiz? Tabi ki Normal Excel sayfasında sorun olmuyor örneğin 1.000,50 diyebiliyorum ama VBA hala bunu algılayamıyor VBA'ya nokta yerine virgül, virgül yerine nokta kullan demek istiyorum..
Meramımı anlatabildim mi bilmiyorum? Yardımcı olabilir seniz çok sevinirim..
 

uzmanamele

Uzman
Uzman
Katılım
26 Eylül 2007
Mesajlar
9,421
Excel Vers. ve Dili
excel 2010
Merhaba

Bu kod işinizi görür mü?
Kod:
Sub ayrackontrol()
MsgBox "Ondalık Ayraç: " & Application.DecimalSeparator & Chr(10) & _
"Binlik Ayraç: " & Application.ThousandsSeparator
End Sub
Açılışta ayraçları kontrol eder, farklılık varsa kod ile değiştirirsiniz.

Ekte Zafer bey'in başka bir çalışması var, inceleyiniz.
 

Ekli dosyalar

Murat OSMA

Altın Üye
Altın Üye
Katılım
23 Mayıs 2011
Mesajlar
5,508
Excel Vers. ve Dili
Microsoft 365 TR-EN
Altın Üyelik Bitiş Tarihi
31-12-2028
Süleyman Bey, müsadenizle Bölgesel Dil Ayarlarını okutma ve yazma ile ilgili örnek vermek istiyorum...

Kod:
Sub Oku()
    Dim WSHShell As Object
    Set WSHShell = CreateObject("WScript.Shell")
        Cells(1, 1) = WSHShell.RegRead("HKCU\Control Panel\International\Format")
        Cells(1, 2) = WSHShell.RegRead("HKCU\Control Panel\International\iCountry")
        Cells(1, 3) = WSHShell.RegRead("HKCU\Control Panel\International\sCountry")
        Cells(1, 4) = WSHShell.RegRead("HKCU\Control Panel\International\sFormat")
        Cells(1, 5) = WSHShell.RegRead("HKCU\Control Panel\International\sGrouping")
        Cells(1, 6) = WSHShell.RegRead("HKCU\Control Panel\International\sShortDate")
        Cells(1, 7) = WSHShell.RegRead("HKCU\Control Panel\International\sDate")
        Cells(1, 8) = WSHShell.RegRead("HKCU\Control Panel\International\sDecimal")
        Cells(1, 9) = WSHShell.RegRead("HKCU\Control Panel\International\sDecimalSymbol")
        Cells(1, 10) = WSHShell.RegRead("HKCU\Control Panel\International\sDigitGroupingSymbol")
    Set WSHShell = Nothing
End Sub
Kod:
Sub Yaz()
    Dim WSHShell As Object
    Set WSHShell = CreateObject("WScript.Shell")
        WSHShell.RegWrite "HKCU\Control Panel\International\Format", "Turkish(Turkey)"
        WSHShell.RegWrite "HKCU\Control Panel\International\iCountry", "90"
        WSHShell.RegWrite "HKCU\Control Panel\International\sCountry", "Turkey"
        WSHShell.RegWrite "HKCU\Control Panel\International\sFormat", "Turkish(Turkey)"
        WSHShell.RegWrite "HKCU\Control Panel\International\sGrouping", "3;0"
        WSHShell.RegWrite "HKCU\Control Panel\International\sShortDate", "dd/mm/yyyy"
        WSHShell.RegWrite "HKCU\Control Panel\International\sDate", "."
        WSHShell.RegWrite "HKCU\Control Panel\International\sDecimal", ","
        WSHShell.RegWrite "HKCU\Control Panel\International\sDecimalSymbol", ","
        WSHShell.RegWrite "HKCU\Control Panel\International\sDigitGroupingSymbol", "."
     Set WSHShell = Nothing
End Sub
 
Katılım
20 Kasım 2010
Mesajlar
62
Excel Vers. ve Dili
Excel 2007 - Excel 2010 TÜRKÇE
Cevaplarınız için teşekkürler denedim ama olmuyor.
Örneğin
Userform da 0,025 olan bir sayıyı excele atarken 2500,000 olarak atıyor. Ayrıca bütün hepsini metin olarak görüyor. 1 ile çarptırdım mı da hatalar çıkıyor.
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,057
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Bu tip durumlarda ben replace fonksiyonunu kullanmayı tercih ederim. Örneğin,

Kod:
range("a1")=replace(textbox1,".",",")
 

Murat OSMA

Altın Üye
Altın Üye
Katılım
23 Mayıs 2011
Mesajlar
5,508
Excel Vers. ve Dili
Microsoft 365 TR-EN
Altın Üyelik Bitiş Tarihi
31-12-2028
TextBox'taki veriyi Excel'e gönderirken hangi kodu kullanıyorsunuz ?
 
Katılım
20 Kasım 2010
Mesajlar
62
Excel Vers. ve Dili
Excel 2007 - Excel 2010 TÜRKÇE
Özür dilerim hastanedeydim cevaplarınızı çok geç okudum.
Şimdi devam etmeye başladım userformuma cevaplarınız için teşekkürler değerleri excelde metin olarak kayıt edeceğim denedim sayıya dönüştürmeye gerek kalmadı.
 
Katılım
26 Ocak 2009
Mesajlar
21
Excel Vers. ve Dili
uSA
Süleyman Bey, müsadenizle Bölgesel Dil Ayarlarını okutma ve yazma ile ilgili örnek vermek istiyorum...

Kod:
Sub Oku()
    Dim WSHShell As Object
    Set WSHShell = CreateObject("WScript.Shell")
        Cells(1, 1) = WSHShell.RegRead("HKCU\Control Panel\International\Format")
        Cells(1, 2) = WSHShell.RegRead("HKCU\Control Panel\International\iCountry")
        Cells(1, 3) = WSHShell.RegRead("HKCU\Control Panel\International\sCountry")
        Cells(1, 4) = WSHShell.RegRead("HKCU\Control Panel\International\sFormat")
        Cells(1, 5) = WSHShell.RegRead("HKCU\Control Panel\International\sGrouping")
        Cells(1, 6) = WSHShell.RegRead("HKCU\Control Panel\International\sShortDate")
        Cells(1, 7) = WSHShell.RegRead("HKCU\Control Panel\International\sDate")
        Cells(1, 8) = WSHShell.RegRead("HKCU\Control Panel\International\sDecimal")
        Cells(1, 9) = WSHShell.RegRead("HKCU\Control Panel\International\sDecimalSymbol")
        Cells(1, 10) = WSHShell.RegRead("HKCU\Control Panel\International\sDigitGroupingSymbol")
    Set WSHShell = Nothing
End Sub
Kod:
Sub Yaz()
    Dim WSHShell As Object
    Set WSHShell = CreateObject("WScript.Shell")
        WSHShell.RegWrite "HKCU\Control Panel\International\Format", "Turkish(Turkey)"
        WSHShell.RegWrite "HKCU\Control Panel\International\iCountry", "90"
        WSHShell.RegWrite "HKCU\Control Panel\International\sCountry", "Turkey"
        WSHShell.RegWrite "HKCU\Control Panel\International\sFormat", "Turkish(Turkey)"
        WSHShell.RegWrite "HKCU\Control Panel\International\sGrouping", "3;0"
        WSHShell.RegWrite "HKCU\Control Panel\International\sShortDate", "dd/mm/yyyy"
        WSHShell.RegWrite "HKCU\Control Panel\International\sDate", "."
        WSHShell.RegWrite "HKCU\Control Panel\International\sDecimal", ","
        WSHShell.RegWrite "HKCU\Control Panel\International\sDecimalSymbol", ","
        WSHShell.RegWrite "HKCU\Control Panel\International\sDigitGroupingSymbol", "."
     Set WSHShell = Nothing
End Sub
Elinize sağlık kardeşim, işime yaradı. Bir de farklı bir version olsa şöyle;
- Bölgesel ayarları kontrol edecek,
- DigitGruping (,) virgül ise (.) nokta yap,
- DecimalSymbol (.) nokta ise (,) virgül yap, gibi
Macro biterken de eski haline çevirsin :)
 
Katılım
4 Kasım 2015
Mesajlar
2
Excel Vers. ve Dili
2013 TÜRKÇE
Altın Üyelik Bitiş Tarihi
16-06-2023
Cevaplarınız için teşekkürler denedim ama olmuyor.
Örneğin
Userform da 0,025 olan bir sayıyı excele atarken 2500,000 olarak atıyor. Ayrıca bütün hepsini metin olarak görüyor. 1 ile çarptırdım mı da hatalar çıkıyor.
Kullandığın format Sayı / Number mı, Para birimi mi / Currency mi? Ben text dosya oluştururken bu kodları kullandım, istediğim gibi oluyor, işi bitince eski haline dönüyor (eski hali derken sistemde ne olduğunu bilmediğimden Decimal Symbol ".", Group Digit "," olarak yaptım.
 
Üst