Soru Kaydet Butonundaki Tekrar Eden Kodları Nasıl Kısaltabilirim.

Katılım
29 Mart 2013
Mesajlar
144
Excel Vers. ve Dili
office 2010

Örnek olarak yüklediğim excelde Sayfa2 de küçük bir tablo ve 1 adet userformum var.
Userformda kaydet butonu kodları koşula göre çalışıyor ve işimi görüyor ancak her koşul durumunda aynı kodları ufak tefek değiştirip alta tekrar yazıyorum.
Acaba tek kod gibi, tekrarlamadan yazmak mümkün müdür?

Not: Kaydet kodları arasına durumu yazdım.
Şimdiden teşekkür ederim.
 

volki_112

Altın Üye
Katılım
29 Eylül 2023
Mesajlar
187
Excel Vers. ve Dili
2019 Türkçe
Altın Üyelik Bitiş Tarihi
13-12-2029

Örnek olarak yüklediğim excelde Sayfa2 de küçük bir tablo ve 1 adet userformum var.
Userformda kaydet butonu kodları koşula göre çalışıyor ve işimi görüyor ancak her koşul durumunda aynı kodları ufak tefek değiştirip alta tekrar yazıyorum.
Acaba tek kod gibi, tekrarlamadan yazmak mümkün müdür?

Not: Kaydet kodları arasına durumu yazdım.
Şimdiden teşekkür ederim.
Kod:
Private Sub CommandButton1_Click()
    Dim x As Long
    Dim veri(1 To 2, 1 To 2) As Variant ' [Ad, Meyve] bilgilerini saklayacak
    
    ' Kullanıcıdan alınan verileri diziye aktar
    veri(1, 1) = txtad1.Value
    veri(1, 2) = txtmeyve1.Value
    veri(2, 1) = txtad2.Value
    veri(2, 2) = txtmeyve2.Value

    ' İlk boş satırı bul
    x = 2
    Do While Sheets("Sayfa2").Range("A" & x).Value <> ""
        x = x + 1
    Loop
    
    ' Dizi içindeki verileri sayfaya yaz
    Dim i As Integer
    For i = 1 To 2
        If veri(i, 1) <> "" Then ' Eğer ad boş değilse ekle
            Sheets("Sayfa2").Range("A" & x).Value = txtno.Value
            Sheets("Sayfa2").Range("B" & x).Value = veri(i, 1)
            Sheets("Sayfa2").Range("C" & x).Value = veri(i, 2)
            x = x + 1 ' Bir sonraki boş satıra geç
        End If
    Next i
End Sub
Ne Değişti?
✅ For döngüsü yerine Do While ile ilk boş satırı tek seferde bulduk.
✅ Girdi verilerini bir diziye aldık ve döngü içinde kontrol ederek gereksiz kod tekrarını önledik.
✅ Kolayca genişletilebilir—yeni txtad3, txtad4 eklenirse sadece diziyi büyütmek yeterli.

Böylece daha daha az kodla, daha okunaklı ve daha ölçeklenebilir bir VBA makrosu elde ettik!
 
Katılım
29 Mart 2013
Mesajlar
144
Excel Vers. ve Dili
office 2010
Volki_112 tek tek açıklayarak yazmışsın çok teşekkür ederim. Gerçekten çok faydalı oldu.

Peki eğer txtrenk1 ve txtrenk2 eklersem kodu aşağıdaki gibi değiştiriyorum fakat hata veriyor acaba neden

Dim x As Long
Dim veri(1 To 2, 1 To 2, 1 To 2) As Variant ' [Ad, Meyve, Renk] bilgilerini saklayacak

' Kullanıcıdan alınan verileri diziye aktar
veri(1, 1) = txtad1.Value
veri(1, 2) = txtmeyve1.Value
veri(1, 3) = txtrenk1.Value

veri(2, 1) = txtad2.Value
veri(2, 2) = txtmeyve2.Value
veri(2, 3) = txtrenk2.Value


' İlk boş satırı bul
x = 2
Do While Sheets("Sayfa2").Range("A" & x).Value <> ""
x = x + 1
Loop

' Dizi içindeki verileri sayfaya yaz
Dim i As Integer
For i = 1 To 3
If veri(i, 1) <> "" Then ' Eğer ad boş değilse ekle
Sheets("Sayfa2").Range("A" & x).Value = txtno.Value
Sheets("Sayfa2").Range("B" & x).Value = veri(i, 1)
Sheets("Sayfa2").Range("C" & x).Value = veri(i, 2)
Sheets("Sayfa2").Range("D" & x).Value = veri(i, 3)
x = x + 1 ' Bir sonraki boş satıra geç
End If
Next i


End Sub
 
Son düzenleme:
Üst