Εμφάνιση ενός μόνο μηνύματος
  #4  
Παλιά 10-06-17, 12:48
γιώργοςΚ Ο χρήστης γιώργοςΚ δεν είναι συνδεδεμένος
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2007, Ms-Office 2013
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 02-04-2013
Περιοχή: Κύπρος
Μηνύματα: 738
Προεπιλογή

Γειά σου Γιώργο και πάλι,

Κατά αρχήν ευχαριστώ και πάλι διότι το παράδειγμα που μου έδωσες δουλεύει αλλά απο ότι πρόσεξα είνα 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.
Απάντηση με παράθεση