Commandbuttonları Koşullu Silme

1 2 3 4
09/02/2020, 21:55

berduş

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
09/02/2020, 21:59

feraz

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
09/02/2020, 22:09

berduş

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:22

feraz

(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
09/02/2020, 22:30

feraz

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
09/02/2020, 22:41

berduş

(09/02/2020, 22:30)feraz yazdı: daha kafam önceki silme yerinde
anlamadım?
1 2 3 4