Εμφάνιση ενός μόνο μηνύματος
  #5  
Παλιά 09-10-11, 22:01
kapetang Ο χρήστης kapetang δεν είναι συνδεδεμένος
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 18-06-2010
Μηνύματα: 3.737
Προεπιλογή

Καλησπέρα στην παρέα

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

Στη ΒΔ ,που επισυνάπτω, υπάρχει μία απλή προσέγγιση του ζητούμενου με κώδικα.
Ο κώδικας είναι προσαρμοσμένος στη συγκεκριμένη περίπτωση και συνεπώς δε μπορεί να εφαρμοστεί γενικά.
Η μέθοδος που εφαρμόστηκε είναι απλή.
Τα πεδία που θέλουμε να μη εμφανίζονται, μαζί με τις ετικέτες τους, αποκρύπτονται και ο χώρος που καταλαμβάνουν μοιράζεται στα υπόλοιπα.

Στη φόρμα «Data» έχω προσθέσει, για κάθε πεδίο, ένα πλαίσιο ελέγχου, ώστε στην έκθεση να εμφανίζονται μόνο τα πεδία με τσεκαρισμένο πλαίσιο ελέγχου.
Στην έκθεση έβαλα τον παρακάτω κώδικα:
Κώδικας:
Private Sub Λεπτομέρεια_Format(Cancel As Integer, FormatCount As Integer)
    Dim c As Access.Control, iLeft As Long, iPer As Long
    Dim iALL As Long, sum As Long, iNoV As Long

    'Απόκρυψη πεδίων και των αντίστοιχων ετικετών
    For Each c In Forms("data").Controls
        If TypeOf c Is CheckBox Then
            If Not c.Value Then
                Me.Controls(c.Tag).Visible = False
                Me.Controls(c.Tag & "_Ετικέτα").Visible = False
                sum = sum + Me.Controls(c.Tag).Width
                iNoV = iNoV + 1
            End If
            iALL = iALL + 1
        End If
    Next

    'Αρχικές τιμές προσδιορισμού της θέσης των ορατών πεδίων
    iLeft = 57
    Select Case iALL - iNoV
    Case 1
        iPer = 0
    Case 2
        iPer = sum / 2
    Case Else
        iPer = sum / (iALL - iNoV - 1) + 10
    End Select

    For Each c In Me.Section(0).Controls
        If TypeOf c Is TextBox Then
            If c.Visible Then
                c.Move iLeft
                Me.Controls(c.Name & "_Ετικέτα").Move iLeft
                iLeft = iLeft + c.Width + iPer
            End If
        End If
    Next

End Sub
Για να λειτουργήσει ο κώδικας:
1. Στα πλαίσια ελέγχου η ιδιότητα «Ετικέτα» (Tag) θα πρέπει να έχει τιμή το όνομα του πεδίου στην έκθεση (πχ afm).
2. Το όνομα των ετικετών της έκθεσης θα είναι ίσο με το όνομα του αντίστοιχου πεδίου ακολουθούμενο από τη συμβολοσειρά «_Ετικέτα» (πχ afm_Ετικέτα).

Φιλικά /Γιώργος
Συνημμένα Αρχεία
Τύπος Αρχείου: mdb ReportFlex.mdb (416,0 KB, 143 εμφανίσεις)
Απάντηση με παράθεση