tam olarak teknik alt yapısı nasıldır bilmiyorum ama for each mantığı her nesne yada eleman için tek tek kontrol ediyor sildiğinde geriye kalan tüm elemanların sıralaması bir azalıyor dolayısıyla artık 2. eleman 1. eleman olmuş oluyor. bir sonraki elemana gidince yani 2. elemana -eskiden 2. olan artık 1., 3. olan da artık 2. olduğu için - eski 3. elemana gidip 2.yi atlamış oluyor.
aslında döngü doğru çalışıyor ama her silmede elemanlar bir sıra kaydığı için atlamış oluyor
Abey dögüylede denemiştim olmamıştı alttaki gibi örneğin bundada aynı durum olmuştu.Gariplik var abey gariplik
For i = .count to to 0 step -1
Feraz bey anladığımı söyleyeyim amacınız 2 mor buton dışında kalan bütün butonları sildirmek değil mi?
Başka bir şey yapacak mı?
Public Function butonYap()
Dim db As dao.Database
Dim rs As dao.Recordset
Dim sqlStr As String
Dim frm As Form
Dim yeni As Control
Dim i As Integer, say As Integer, ii As Integer
Dim silinmemesiGerekenler
Dim scr As Object
Dim toop As Integer
Dim scrSil() As String
Set scr = CreateObject("Scripting.Dictionary")
silinmemesiGerekenler = Array("btn1", "btn2")
DoCmd.OpenForm "Form1", acDesign
Set frm = Forms("Form1")
sqlStr = "SELECT * FROM Tablo1"
Set db = CurrentDb
Set rs = db.OpenRecordset(sqlStr)
'' On Error Resume Next
With Forms("Form1")
For i = LBound(silinmemesiGerekenler) To UBound(silinmemesiGerekenler)
scr.Add silinmemesiGerekenler(i), ""
Next
x = 0
donguBos = 0
For Each con In .Controls
If Not scr.exists(con.Name) Then
donguBos = 1
ReDim Preserve scrSil(x)
scrSil(x) = con.Name
x = x + 1
End If
Next
If donguBos = 0 Then
MsgBox "silinecek nesne yok"
GoTo 111
End If
For x = LBound(scrSil) To UBound(scrSil)
DeleteControl frm.Name, scrSil(x)
Next x
111
End With
' On Error GoTo 0
'''' Err.Clear
rs.MoveFirst
say = 1
Do Until rs.EOF
If scr.exists(rs(0).Value) Then
toop = 500 + 700 * ((say - 0.6) \ 4)
Set yeni = CreateControl(frm.Name, acCommandButton, Left:=iLft, Top:=toop)
yeni.Caption = rs!aa
yeni.Name = "Button" & say
yeni.Height = 500
Set yeni = Nothing
iLft = 13 + 2085 * (say Mod 4)
say = say + 1
End If
rs.MoveNext
Loop
DoCmd.OpenForm "Form1", acNormal
Forms("Form1").Form.Requery
Set yeni = Nothing
Set frm = Nothing
Set scr = Nothing
End Function
(09/02/2020, 22:09)berduş yazdı: 2 mor buton dışında kalan bütün butonları sildirmek değil mi?
evet ve tablo1 deki verileride buton olarak forma eklemek.Yani tablo1 de nekadar veri varsa onların adıyla buton olacak morlar kalacak
Siyah yeri ekleyincede son verdiğiniz kod çalıştı abey teşekkürleri borç bilirim ve daha kafam önceki silme yerinde
Do Until rs.EOF
If Not scr.exists(rs(0).Value) Then