textbox veri kontrolü - koordinat verisi format sorunu

Katılım
8 Aralık 2013
Mesajlar
9
Excel Vers. ve Dili
2016 Türkçe
Kullanıcı textbox içine koordinat değeri girecek. Yapılması gereken giriş şu şekilde olmalı: 39.414141,29.515151
Program bu şekilde girilmeyen hiçbir veriye müsaade etmesin istiyorum. Virgül yerine boşluk kullanılsa da işimi görür. Yani giriş bu şekilde de olabilir: 39.414141 29.515151
Format metoduyla iki saat haşır neşir oldum ancak çözemedim. Yardımcı olabilecek var mı?
 

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
Bence bu tip bir kontrole girmeyin. Çok sayıda kod yazmak gerekir ve muhtemelen bir açıkta kalır. Bunun yerine iki koordinat içinde resimdeki gibi iki ayrı textbox kullanmanızı öneririm. Mutlaka tek textbox kullanacağım derseniz kontrolleri textboxun exit olayına ya da bu koordinatları kullanacağınız kodların en başına yazın. Aradaki boşluk ya da virgül kontrolü için instr, koordinatları almak içinde split fonksiyonlarını kullanabilirsiniz.

251110
 
Katılım
8 Aralık 2013
Mesajlar
9
Excel Vers. ve Dili
2016 Türkçe
Bir pazar sabahı dört saatimi yedi ama sonunda istediğim kodlara ulaştım. RegEx ile yapılıyormuş. Belki sizin de işinize yarar. \ parantezden sonra nokta virgül gibi karakterleri kullanabiliyoruz. Gerisi koddan anlaşılıyor zaten.
Kod:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Dim koordinat As String
    Dim reg As Object
    
    Set reg = New RegExp
    koordinat = Me.TextBox1.Text
    
    '               39.419433  ,29.994388  buradan referans al
    reg.Pattern = "[1-9][0-9]\.[0-9][0-9][0-9][0-9][0-9][0-9]\,[1-9][0-9]\.[0-9][0-9][0-9][0-9][0-9][0-9]"
        If reg.Test(koordinat) = False Then
            MsgBox "Koordinat değerini belirtilen formata uygun şekilde girin!"
            Cancel = True
        ElseIf Len(koordinat) > 19 Then
            MsgBox "Koordinat değeri belirtilen uzunluktan fazla olamaz!"
            Cancel = True
        End If
End Sub
 

veyselemre

Özel Üye
Katılım
9 Mart 2005
Mesajlar
3,647
Excel Vers. ve Dili
Pro Plus 2021
pattern i aşağıdaki gibi de kullanabilirsiniz.
[1-9]{1}\d{1}\.{1}\d{1,6}[\,\s]{1}[1-9]{1}\d{1}\.{1}\d{1,6}
 
Katılım
6 Mart 2024
Mesajlar
109
Excel Vers. ve Dili
Excel 2010 TR & Excel 2016 TR
iki ayrı textbox kullanmanızı öneririm
Ayrı ayrı TextBox Kullanılacağın da Alternatif kodlar

Rich (BB code):
Private Sub Koordinat01_Change()
Dim a
a = Replace(Koordinat01, ",", "")
a = Replace(a, ".", "")

If IsNumeric(a) = False Then
  Koordinat01.Value = "00.000000"
ElseIf a < 10 Then
  Koordinat01 = "00.00000" & a * 1
ElseIf a < 100 Then
  Koordinat01 = "00.0000" & a * 1
ElseIf a < 1000 Then
  Koordinat01 = "00.000" & a * 1
ElseIf a < 10000 Then
  Koordinat01 = "00.00" & a * 1
ElseIf a < 100000 Then
  Koordinat01 = "00.0" & a * 1
ElseIf a < 1000000 Then
  Koordinat01 = "00." & a * 1
ElseIf a < 10000000 Then

If Len(Koordinat01) = 8 Then
  Koordinat01 = "00." & a * 1
End If

If Mid(a, 1, 2) = "00" Then
  Koordinat01 = Mid(a, 2, 2) & "." & Right(a, 6)
End If

ElseIf a < 100000000 Then

If Mid(a, 1, 1) = "0" Then
  Koordinat01 = Mid(a, 2, 2) & "." & Right(a, 6)
End If

ElseIf a < 1000000000 Then

If Len(Koordinat01) > 9 Then
  Koordinat01 = Mid(a, 1, 2) & "." & Mid(a, 3, 5) & Right(a, 1)
End If

End If

End Sub

Private Sub Koordinat01_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If KeyAscii < Asc(0) Or KeyAscii > Asc(9) Then
        KeyAscii = 0
        Beep
    End If
End Sub

Private Sub UserForm_Activate()
Koordinat01.Value = "00.000000"
End Sub
 
Üst