| Access - Ερωτήσεις / Απαντήσεις Access + VBA... Εδώ δεν υπάρχουν όρια! |
![]() |
| | Εργαλεία Θεμάτων | Τρόποι εμφάνισης |
|
#1
| |||
| |||
|
Φίλοι μου γειά σας, Έχω δημιουργήσει μια βάση δεδομένων για διαχείρηση ιατρικών περιστατικών, μέσω της οποίας θα ήθελα να εξάγωνται τα δεδομένα απο την φόρμα στην βάση δεδομένων σε ένα πρότυπο αρχείο Word (Template). Αυτό το έχω επιτύχει μερικώς διότι αφενώς αν και κατάφερα με την βοήθεια του φόρουμ να κάνω εξαγωγή των δεδομένων στην Word, εντούτις δεν γνωρίζω με ποιο τρόπο θα μπορούσαν τα δεδομένα αυτά να πάνε και να "καθίσουν" το κάθετι στην θέση που πρέπει, όπως δηλαδή και το πρότυπο. Δηλαδή, το Όνομα στο ανάλογο κουτάκι, το Επώνυμο στην θέση του κλπ, κλπ. Για διευκόλυνση σας, επισυνάπτω ένα συμπιεσμένο φάκελο μέσα στον οποίο θα βρείτε αφενώς την βάση και τα όσα έχω καταφέρει μέχρι στιγμής, και αφετέρου και το πρότυπο Word αρχείο. Για να λειτουργήσει όμως η εξαγωγή δεδομένων θα πρέπει εφόσον αποσυμπιέσετε τον φάκελο, στην συνέχεια να δημιουργήσετε ένα νέο φάκελο με όνομα "Test" στον C:/, και μέσα σε αυτόν ένα άλλο φάκελο με όνομα "Docs", και έπειτα και ένα τρίτο μέσα στον δεύτερο με όνομα "CustDocuments. Εύχομαι κάποιος να μπορεί να βοηθήσει και ευχαριστώ εκ προτέρων |
|
#2
| |||
| |||
|
Καλησπέρα Γιώργο, Δες το συνημμένο. Σου ζητώ συγνώμη για την βιαστική μου απάντηση. |
|
#3
| |||
| |||
|
Καλησπέρα φίλε μου Γιώργο, Δεν ξέρω πως να σε ευχαριστήσω. Ειλικρηνά με έχεις βοηθήσει αμέριστα και σε ευχαριστώ και πάλι φίλε μου. Θα προσπαθήσω να προσαρμώσω στην αληθινή βάση τα όσα με δίδαξες στο παράδειγμα σου (Vba) και εάν παραστεί ανάγκη θα επανέλθω, Σε κάθε περίπτωση σε ευχαριστώ πολύ |
|
#4
| |||
| |||
|
Γειά σου Γιώργο και πάλι, Κατά αρχήν ευχαριστώ και πάλι διότι το παράδειγμα που μου έδωσες δουλεύει αλλά απο ότι πρόσεξα είνα Read Only και δεν μπορεί ο χρήστης να κάνει αλλαγές σε αυτό. Ωστόσο, επανέρχομαι στο θέμα εφόσον έχω δοκιμάσει να κάνω τις προσαρμογές στην πραγματική βάση και έχω το εξής θέμα και θα εκτιμήσω εάν μπορείς να προσαρμόσουμε λίγο τον κώδικα έτσι ώστε: 1. Θα ήθελα να έχω το πρότυπο αποθηκευμένο σε ένα φάκελο στον C:\ και εφόσον πατήσουμε την εντολή για την εκτέλεση του κώδικα να μπορεί να δημιουργεί ένα νέο αρχείο Word.doc αυτόματα το οποίο να μήν χρειάζεται να ανοίγει το File Dialog ττου Windows και να καθορίζεται χειροκίνητα η θέση αποθήκευσης του αρχείου.Να προκαθορίσουμε δηλαδή την θέση αποθήκευσης αυτών των αρχείων ας πούμε όπως το C:\WordFiles\Documents 2. Να μην χρειάζεται να γράφω χειροκίνητα το όνομα αποθήκευσης του νέου αρχείου αλλά να διαβάζει αυτόματα το όνομα απο το πεδίο [FileName] που είναι στην φόρμα. Αυτό θα με διευκόλυνε πολύ 3. ΕΦόοσν δημιουργεί το αρχείο και αποθυκευθεί με το όνομα που θα πάρει απο την φόρμα αυτόματα, θα ήθελα να ανοίγει έτσι ώστε να μπορεί ο χρήστης να κάνει τις προσθήκες που επιθυμεί σε αυτό, και εφόοσον ολοκληρώνει την εργασία του και αποθηκεύσει τα όσα έκανε να επανέρχομαι στην φόρμα Access. 4. Ολοκληρόνωντας το σκεπτικό διαχείρησης θα ήθελα με κάποιο τρόπο σε μια δεύτερη φόρμα να μπορώ να βλέπω τα αποθυκευμένα αρχεία για κάθε πελάτη και να έχει την δυνατότητα ο χρηστης να επιλέγει όποιο θέλει και να το ανοίγει μέσω μιας εντολής. Τώρα, σε αυτό το σημείο αντιλαμβάνομαι ότι πρέπει να υπάρχει ένας πίνακας στην βάση στον οποίο θα πρέπει να αποθκεύονται όλα τα πιο πάνω δεδομένα πελάτη, δηλαδή [ID], [CustomerNo], [DateAdded],[WordName],[FullPath].Επίσης το ορθό κατά την άποψη μου είναι εφόσον ανοίξει η εν λόγο Φόρμα πρωτίστως να μπορεί να γίνεται ένας έλεγχος εάν τα αρχεία στην πιο πάνω διαδρομή που είναι αποθηκευμένα, αντιστοιχούν με τα δεδομένα του πίνακα αυτού έτσι ώστε, αφενώς εάν κάποιο αρχείο έχει διαγραφεί (για οποιοδήποτε λόγο) απο τον φάκελο, να πρέπει να διαγράφεται και αυτομάτως απο τον πίνακα έτσι ώστε η λίστα με τα αρχεία κάθε πελάτη να είναι η πραγματική και να μην υπάρχουν αποθηκευμένες εγραφές στον πίνακα που στο τέλος να αντιστοιχούν σε αρχεία που δεν υπάρχουν. Τώρα, η αλήθεια είναι ότι έχω προσπαθήσει να κάνω όλα τα πιο πάνω και μάλιστα στο έχω επιτύχει μέχρι το σημείο 3, αλλά με τα ακόλουθα προβλήματα (επισυνάπτω και τον κώδικα) α) Κατάφερα να δημιουργείται το αρχείο που θέλω και να αποθυκεύεται αυτόματα στην διαδρομή (Path) που θέλω β) Κατάφερα να δίνω αυτόματα όνομα αρχείου απο μια φόρμα που έχει κάποιο σχετικό πεδίο Τα προβλήματα όμως που αντιμετωπίζω έιναι: 1) Εφόοσον δημιουργηθεί το αρχείο και αποθυκευθεί, δεν μου το εμφανίζει αυτόματα παρά μόνον βλέπω στο Task Bar ότι έχει ανοίξει αλλά δεν βλέπω παρά μόνον εάν επιλέξω το εικονίδιο απο το Task Bar. Στο σημείο αυτό να αναφέρω ότι ο κώδικας κτυπά εκεί που έχω υπογραμμίσει 2) Αν και κατάφερα να βλέπω σε πίνακα και εν τέλη σε μια φόρμα τα αρχεία κάθε πελάτη εντούτις δεν μπόρεσα να βρώ τρόπο εφόσον κάποιο αρχείο έχει διαγραφεί απο τον φάκελο, να διαγράφεται και απο τον πίνακα. Παραθέτω τον κώδικα που έχω φτιάξει με βάση το δικό σου περίπου σκεπτικό και θα εκτιμήσω κάθε δυνατή βοήθεια. .................................................. .................................................. ..................................... Option Compare Database Option Explicit Private wd As Object, wdDoc As Object .................................................. .................................................. ................ Private Sub cmdExtractAndFillWDCells_Click() Dim wdDoc As Object, ctl As Access.Control, TablePoints, wdFilePath As String wdFilePath = wdFilePath & "C:\MEDISOFT\Docs\CustDocuments\" & Me.[WdTagName] & ".doc" Me.WdFullPath = wdFilePath Me.WdBaseName = Format(Now, "dd-mm-yyyy_hh:mm") ExtractNewWordDocument wdFilePath If Dir(wdFilePath, vbDirectory) = vbNullString Then MsgBox "Could not create Word Document!", vbExclamation Exit Sub End If Set wdDoc = GetObject(wdFilePath) With wdDoc.Tables(1) For Each ctl In Me.Section(0).Controls If TypeOf ctl Is Access.TextBox Then If IsNumeric(Left(ctl.Tag & "", 1)) Then TablePoints = Split(ctl.Tag, ",") If UBound(TablePoints) = 1 Then .Cell(TablePoints(0), TablePoints(1)).Range.Text = Nz(ctl, vbNullString) End If End If End If Next End With 'In case of Second table used 'With wdDoc.Tables(2) ' For Each ctl In Me.Section(0).Controls ' If TypeOf ctl Is Access.TextBox Then ' If IsNumeric(Left(ctl.Tag & "", 1)) Then ' TablePoints = Split(ctl.Tag, ",") ' If UBound(TablePoints) = 1 Then ' .Cell(TablePoints(0), TablePoints(1)).Range.Text = Nz(ctl, vbNullString) ' End If ' End If 'End If 'Next 'End With wdDoc.Save With wdDoc.Application .Visible = True .WindowState = 1 End With AppActivate wdDoc.Name Set wdDoc = Nothing End Sub .................................................. .................................................. .................................... Function ExtractNewWordDocument(PathToEctract As String) Dim rs As DAO.Recordset Dim rs2 As DAO.Recordset2 Dim AtFile As DAO.Field2 Set rs = CurrentDb.OpenRecordset("tblWordDoc") rs.MoveFirst Set rs2 = rs.Fields("WdDocument").Value rs2.MoveFirst Set AtFile = rs2.Fields("FileData") AtFile.SaveToFile PathToEctract rs2.Close rs.Close End Function .................................................. .................................................. .................................................. ......... Private Sub Form_Load() Me.txtCount = DCount("[ID]", "tblWDPaths", "[CustomerNo]= Forms!WordPaths.CustomerNo") If MsgBox("Êáôá÷þñçóç íÝïõ áñ÷åßïõ MS Word?", vbYesNo Or vbQuestion, "Áñ÷åßá Word") = vbYes Then DoCmd.GoToRecord , , acNewRec 'This If Me.txtCount = 0 Then Me.Serial = 1 Else Me.Serial = Me.txtCount + 1 End If Me.WdTagName = Forms!DashboardDR.LogCustID & "_" & Me.Serial & "_" & Forms!DashboardDR.LoggedName Me.cmdExtractAndFillWDCells.Enabled = True Else DoCmd.CancelEvent 'DoCmd.Close End If End Sub Τελευταία επεξεργασία από το χρήστη γιώργοςΚ : 10-06-17 στις 13:33. |
|
#5
| |||
| |||
|
Καλησπέρα Γιώργο, Συγνώμη για την καθυστέρηση. Πριν ξεκινήσεις φτιάξε την παρακάτω διαδρομή στον δίσκο c: “C:\WordFiles\Documents\Customers” Κάνε αποσυμπίεση στον c:\ Δες την συνημμένη βάση, είναι μια διαφορετική προσέγγιση στα ζητούμενα σου. Πιστεύω να βοήθησα. Για οτιδήποτε είμαι στην διάθεση σου. Ευχαριστώ. |
|
#6
| |||
| |||
|
Καλησπέρα φίλε Γιώργο, σε ευχαριστώ που μπήκες στον κόπο και αφιέρωσες τον χρόνο σου για να ετοιμάσεις το αρχει που μου έστειλες. Ωστόσο, θα το μελετήσω κάποια στιγμή αύριο και αν υπάρχει κάποιο θέμα θα επανέλθω. Σε ευχαριστώ και πάλι. |
|
#7
| |||
| |||
|
Γειά σου Γιώργο και πάλι, Έχω ανοίξει το αρχείο που έστειλες (και σε ευχαριστώ και πάλι) και προσπαθώ να καταλάβω πως δουλεύει, ή αν θέλεις με πιά λογική δουλεύει. Συγκεκριμένα δεν έχω καταλάβει τι κάνει ή ποιά η σκοπιμότητα της φόρμας frmListCustomers και το συγκεκριμένο κουμπί που περιλαμβάνει. Θα σε έβαζα σε διαδικασία εάν μου επεξηγούσες λίγο το σκεπτικό? Σε ευχριστώ πολύ φίλε μου |
|
#8
| |||
| |||
|
Καλησπέρα Γιώργο, Η σκοπιμότητα της λίστας των πελατών είναι ότι μπορείς να ανοίξεις πολλές καρτέλες πελατών. Τώρα η μεγάλη διαφορά που έχει σε ότι περιγράφεις εσύ παραπάνω είναι ότι δεν χρειάζετε να κρατάμε τα αρχεία (διαδρομές αρχείων) στην βάση και να γεμίζουμε την βάση. Δεν διαφωνώ με τον τρόπο που περιγράφεις παραπάνω. Όταν δημιουργείς ένα νέο πελάτη δημιουργείται και ένας φάκελος για τα αρχεία του στην διαδρομή «“C:\WordFiles\Documents\Customers” » και όνομα φακέλου το id του πελάτη. Κάθε φορά που κάνεις μια εκτύπωση, το αρχείο που δημιουργείτε από το πρότυπο αποθηκεύεται στον φάκελο του πελάτη, αν για κάποιο λόγο δεν βρει τον φάκελο του πελάτη τον δημιουργεί ξανά. Όσο αναφορά το παράδειγμα το μόνο δεσμευτικό είναι ότι όλα τα αρχεία ανεξαρτήτου τύπου (.doc,.pdf,…) πρέπει να είναι σε ένα φάκελο ανά πελάτη και ο φάκελος αυτός να έχει όνομα δεσμευτικό ως προς τον πελάτη (πχ Customer_ID). Για οποιαδήποτε απορία η διευκρίνηση είμαι στην διάθεση σου. |
|
#9
| |||
| |||
| Παράθεση:
Καλησπέρα Γιώργο, Η σκοπιμότητα της λίστας των πελατών είναι ότι μπορείς να ανοίξεις πολλές καρτέλες πελατών. Πως δηλαδή μπορώ να ανοίξω διαφορετικές καρτέλες πελατών φίλε μου? Εχω δοκιμάσει να κάνω διπλό κλίκ σε ολα τα πεδία και σε διάφορους πελάτες, δεν ανοίγει κάτι (?) Εκτός αν εννοείς ότι μέσω αυτή της φόρμας μπορώ να δώ υπό μορφή λίστας όλους τους πελάτες, σε αυτό ναι, συμφωνώ! Φιλικά |
|
#10
| |||
| |||
|
Καλημέρα Γιώργο, Για να ανοίξεις μια καρτέλα πελάτη σε νέο παράθυρο θα πρέπει να κάνεις διπλό κλικ στην κεφαλίδα της γραμμής (μαύρο βελάκι) από την λίστα πελατών. Ευχαριστώ. |
![]() |
« Προηγούμενο Θέμα
|
Επόμενο Θέμα »
| |
| ||||
| Θέμα | Δημιουργός | Forum | Απαντήσεις | Τελευταίο Μήνυμα |
| Εξαγωγή δεδομένων σε πίνακα στην word | γιώργοςΚ | Access - Ερωτήσεις / Απαντήσεις | 33 | 20-10-14 14:17 |
| Εξαγωγή εγγραφής σε word | agantos | Access - Ερωτήσεις / Απαντήσεις | 16 | 18-04-12 15:54 |
| Εξαγωγή και αποθήκευση δεδομένων φόρμας σε word | nasos23 | Access - Ερωτήσεις / Απαντήσεις | 1 | 15-03-12 09:10 |
| Εξαγωγή πίνακα σε ascii file | stavros | Access - Ερωτήσεις / Απαντήσεις | 13 | 07-12-09 19:05 |
Η ώρα είναι 15:56.



Αλλαγή σε γραμμικό τρόπο

