Forum

Forum (https://www.ms-office.gr/forum/)
-   Excel - Ερωτήσεις / Απαντήσεις (https://www.ms-office.gr/forum/excel-erotiseis-apantiseis/)
-   -   [VBA] Διαγραφή δεδομένων με βάση λίστα. (https://www.ms-office.gr/forum/excel-erotiseis-apantiseis/2099-diagrafi-dedomenon-me-basi-lista.html)

anestaki 07-10-12 18:54

Σπύρο παρουσιάζει και πάλι το ίδιο πρόβλημα
=IF(#ΑΝΑΦ!="";T3;#ΑΝΑΦ!) και =IF(AND(#ΑΝΑΦ!="";#ΑΝΑΦ!="");"End of List";T3&" "&#ΑΝΑΦ!)
βγάζει #ΑΝΑΦ! Στα κελιά που διαγράφουμε.

Spirosgr 07-10-12 21:47

1 Συνημμένο(α)
Γιώργο φυσικό είναι να βγάζει #ΑΝΑΦ
Εφ' όσον διαγράφουμε περιοχές που "παίρνουν" οι τύποι
Πρέπει λοιπόν να τους ξαναχτίσουμε
Ονόμασε T1=mycell1 και U1=mycell2
Πέρασε από την αρχή αυτόν τον κώδικα στο Module διαγράφοντας όλα τα άλλα.

Κώδικας:

Sub CountandDelete()
    Dim i As Integer, Button2 As Shape
    If MsgBox("Το κείμενό σου", _
              vbYesNo + vbQuestion + vbDefaultButton2) <> vbYes Then
        Exit Sub
    End If
    Application.ScreenUpdating = False
    i = Range("Αρχείο! b" & Rows.Count).End(xlUp).Row
    If i > 3 Then Range("Αρχείο! A4:aq" & i).Delete Shift:=xlUp
    i = Range("Χρεώσεις! b" & Rows.Count).End(xlUp).Row
    If i > 2 Then Range("Χρεώσεις! A3:ah" & i).Delete Shift:=xlUp
    i = Range("Κατανομή! b" & Rows.Count).End(xlUp).Row
    If i > 2 Then Range("Κατανομή! A3:s" & i).Delete Shift:=xlUp
    Range("mycell1").FormulaR1C1 = "=iferror(IF(R[2]C[-18]="""",R[1]C,R[2]C[-18]),"""")"
    Range("mycell2").FormulaR1C1 = _
    "=iferror(IF(AND(R[2]C[-19]="""",R[2]C[-16]=""""),""End of List"",R[2]C[-1]&"" ""&R[2]C[-16]),"""")"
    Range("Κατανομή! t3:u500").Formula = Range("Κατανομή! t1:u1").Formula
    MsgBox ("Όλες οι εντολές  ολοκληρώθηκαν με επιτυχία!"), vbInformation, "SpirosgrInfo"
End Sub

Έχει τσεκαριστεί και λειτουργεί κανονικά
επίσης στον προηγούμενο κώδικα αντέγραφες το T1 και U1 σε T3 και U2 (αντί U3) οπότε και οι τύποι έπαιρναν από άλλες μεριές
ΥΓ
Ξέχασα στον κώδικα την γραμμή που διαγράφει το κουμπί
Πέρασέ την πριν το τελευταίο msgbox

Spirosgr 08-10-12 08:03

Τελικά για καλύτερα αποτελέσματα μπορείς να βάλεις αυτό
όπου έχουν χρησιμοποιηθεί οι κωδικές ονομασίες των φύλλων
ώστε και να αλλάξει κάποιος το όνομα του φύλλου να μην επηρεάζει τον κώδικα
Ονόμασε πίσω από την vba το φύλλο Αρχική ....shStart
Ακόμα έχουν ονομαστεί οι περιοχές T3:T500 & U3:U500
Για να λειτουργήσει η διαγραφή του κουμπιού πρέπει το φύλλο αρχική να είναι ξεκλειδωμένο

Κώδικας:

Sub CountandDelete()
    Dim i As Integer
    If MsgBox("Το κείμενό σου", _
              vbYesNo + vbQuestion + vbDefaultButton2) <> vbYes Then
        Exit Sub
    End If
    Application.ScreenUpdating = False
    i = ShArchive.Range("b" & Rows.Count).End(xlUp).Row
    If i > 3 Then ShArchive.Range("A4:aq" & i).Delete Shift:=xlUp
    i = xreosis.Range("b" & Rows.Count).End(xlUp).Row
    If i > 2 Then xreosis.Range("A3:ah" & i).Delete Shift:=xlUp
    i = katanomi.Range("b" & Rows.Count).End(xlUp).Row
    If i > 2 Then katanomi.Range("A3:s" & i).Delete Shift:=xlUp
    katanomi.Range("rngFormula1").FormulaR1C1 = "=iferror(IF(R[2]C[-18]="""",R[1]C,R[2]C[-18]),"""")"
    katanomi.Range("rngFormula2").FormulaR1C1 = "=iferror(IF(AND(R[2]C[-19]="""",R[2]C[-16]=""""),""End of List"",R[2]C[-1]&"" ""&R[2]C[-16]),"""")"
    shStart.Shapes(Application.Caller).Delete
    MsgBox ("Όλες οι εντολές  ολοκληρώθηκαν με επιτυχία!"), vbInformation, "SpirosgrInfo"
End Sub


anestaki 08-10-12 14:50

Καλησπέρα Σπύρο και σε όλους
Μόλις άνοιξα και βλέπω ότι έκανες πολύ δουλεία στα δυο τελευταία ποστ.
Μόλις τελειώσω με το φαγητό θα τα δω.
Με την πρώτη ματιά μου φαίνετε λίγο δύσκολο να κατανοήσω τι ακριβώς κάνουν και πως.
Θα προσπαθήσω, θα μου πάρει λίγη ώρα.
Ευχαριστώ και πάλι.
Γιώργος

anestaki 23-10-12 19:55

Σπύρο δεν σας ξέχασα αλλά με την αλλαγή πάροχου έχω αρκετά προβλήματα με την σύνδεση σε ευχαριστώ πολύ και πάλι.


Η ώρα είναι 17:47.

Ms-Office.gr - ©2000 - 2026, Jelsoft Enterprises Ltd.


Search Engine Optimization by vBSEO 3.3.2