• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

Beraber Kullanılan Sayı ve Metin Formatı

Katılım
5 Ocak 2009
Mesajlar
1,586
Excel Vers. ve Dili
2003 Türkçe
Selam Arkadaşlar,
Bir Textbox içine bir malzemenin stok kodunu belirli formatlarda girmek istiyorum.
format şu şekilde olacak;
ilk 3 sabit karakter sayı olacak. Ondan sonraki karakterlerden 1 ile 4'ü Metin olacak. metinden sonraki karakterlerden 1 ile 4'ü sayı olacak.

Örnek (S= sayıdır, M=Metindir)

SSSMS
SSSMSS
SSSMSSS
SSSMSSSS

SSSMMS
SSSMMSS
SSSMMSSS
SSSMMSSSS

SSSMMMS
SSSMMMSS
SSSMMMSSS
SSSMMMSSSS

SSSMMMMS
SSSMMMMSS
SSSMMMMSSS
SSSMMMMSSSS

Bu formatların haricinde (mesela; 399ABCDEF veya 4012AB123 veya 255XYZ4A) girildiği zaman uyarı verecek.

Bunu nasıl yapabilirim? Aşağıdaki gibi denedim, yapamadım.
Yardımcı olabilirseniz çok sevinirim

Kod:
If Format(Me.TextBox1, "###$#") = Me.TextBox1 Then
MsgBox "Format Doğru"
ElseIf Format(Me.TextBox1, "###$##") = Me.TextBox1 Then
MsgBox "Format Doğru"
ElseIf Format(Me.TextBox1, "###$###") = Me.TextBox1 Then
MsgBox "Format Doğru"
ElseIf Format(Me.TextBox1, "###$####") = Me.TextBox1 Then
MsgBox "Format Doğru"
Else
MsgBox "Format Yanlış"
End If
 
1.mesajımdaki sorumun cevabını şu şekilde çözüldü;

Kod:
Dim deg As Object
Dim stokkod As String

Set deg = CreateObject("VBScript.Regexp")
If Me.dataveri2 = "" Then GoTo atla
stokkod = UCase(Me.dataveri2)


deg.Pattern = "^[0-9]{3}[A-Z]{1,4}[0-9]{1,4}$"
If deg.test(stokkod) = False Then
MsgBox "Bu Bir Stok Kodu Değildir!", vbCritical
Cancel = True
GoTo atla
End If

Peki,
"001ABC5678" şeklindeki değeri nasıl "001 ABC 5678" şeklinde ayırabilirim?
Tabi bu bazen 001AB56 şekilnde de olabiliyor.
Yardımcı olabilirseniz çok sevinirim.
 
şöyle deneyin:

Kod:
deg.Pattern = "^[0-9]{3} ?[A-Z]{1,4} ?[0-9]{1,4}$"
 
" " karakterinden sonra gelen "?" karakteri " " karakterini opsiyonel yapıyor.
 
şöyle bir kod bir kenarda PATTERN test etmek için kullanılabilir:

Kod:
Sub RegEx_Test()

    Dim testMetin As String
    
    testMetin = "001 ABC 5678"
    
    With CreateObject("VBScript.Regexp")
        .Pattern = "^[0-9]{3} ?[A-Z]{1,4} ?[0-9]{1,4}$"
        MsgBox .test(testMetin)
        'veya VBE'de "immediate" penceresine yazdırmak için:
        'Debug.Print .test(testMetin)
    End With

End Sub
 
Sayın mancubus,

Kod:
MsgBox deg.Replace(deger, "$1 $2 $3")
şeklinde ayırabiliyorum.

sizin son gönderdiğiniz "Debug.Print" nedir? ne işe yarar?

Ayrı bir sorum olacak;
Diyelim bir metin içinde istemediğim yasaklı karakterler olsun. mesela ? , 5, 0 _ . gibi.
regexp ile bunları kontrol edip, yasaklı ve yasaksızları ayırıp bulabilir miyiz?
mesela; erg?u5n için yasaklı ?5 yasaksız ergun.
?g?ul.-e0r için yasaklı ??._0 yasaksız guler.
 
Geri
Üst