Τα έγγραφα που έχουν συνημμένα πρότυπα καθυστερούν πολύ να ανοίξουν στο Word 2002 και Word 2003

Σφάλμα #: 40741 (Windows SE)σφάλμα #: 8981 (OfficeQFE)σφάλμα #: 6144 (OfficeQFE)σφάλμα #: 7363 (OfficeQFE)

Συμπτώματα

Όταν ανοίγετε ένα έγγραφο του Microsoft Word (* .doc) αρχείο, το έγγραφο ενδέχεται να διαρκέσει περισσότερο, και στη συνέχεια αναμένεται να ανοίξετε. Για παράδειγμα, το έγγραφο μπορεί να διαρκέσει 5 έως 10 λεπτά για να ανοίξει.

Αιτία

Αυτό το σύμπτωμα μπορεί να προκύψει, εάν το έγγραφο έχει ένα πρότυπο συνδεδεμένο ή συνδέεται και μία από τις ακόλουθες συνθήκες είναι αληθής:
  • Το συνημμένο πρότυπο, το φάκελο ή το κοινόχρηστο στοιχείο δεν υπάρχει.
  • Το συνημμένο πρότυπο έχει μετακινηθεί.
  • Το συνημμένο πρότυπο έχει μετονομαστεί.
Όταν λείπει ένα πρότυπο του Word, τα Windows XP θα προσπαθήσει να εντοπίσει το πρότυπο λείπει πολλές φορές. Η διαδικασία εντοπισμού ενός προτύπου που λείπουν ενδέχεται να χρειαστεί περισσότερος χρόνος για να ανοίξετε ένα έγγραφο του Word.

Θα χρειαστεί περισσότερος χρόνος για να ανοίξετε το έγγραφο όταν είστε συνδεδεμένοι σε δίκτυο σε σύγκριση με όταν είστε αποσυνδεδεμένοι από το δίκτυο.

Προτεινόμενη αντιμετώπιση

Για να επιλύσετε αυτό το ζήτημα σε έναν υπολογιστή με εγκατεστημένα τα Windows XP, χρησιμοποιήστε μία από τις ακόλουθες μεθόδους που είναι κατάλληλη για την περίπτωσή σας:

Μέθοδος 1: Επισύναψη του προτύπου από μια νέα θέση

Ανοίξτε το έγγραφο στο Microsoft Word. Περιμένετε έως ότου το έγγραφο είναι ανοιχτό. Όταν το έγγραφο είναι ανοιχτό, να επισυνάψετε το πρότυπο από τη νέα θέση. Ή, μπορείτε να αλλάξετε το πρότυπο στο καθολικό πρότυπο Normal.dot. Για να επισυνάψετε το πρότυπο, ακολουθήστε τα εξής βήματα:
  1. Στο μενού Εργαλεία , κάντε κλικ στο κουμπί πρότυπα και πρόσθετα.
  2. Στο παράθυρο διαλόγου πρότυπα και πρόσθετα , κάντε κλικ στο κουμπί " Επισύναψη".
  3. Στο πλαίσιο διαλόγου " Επισύναψη προτύπου ", επιλέξτε το πρότυπο που θέλετε και, στη συνέχεια, κάντε κλικ στο κουμπί Άνοιγμα.
  4. Στο παράθυρο διαλόγου πρότυπα και πρόσθετα , κάντε κλικ στο κουμπί " OK".

Επιστροφή στην κορυφή

Μέθοδος 2: Χρησιμοποιήστε μια προσαρμοσμένη εφαρμογή της Visual Basic για να αλλάξετε το συνημμένο πρότυπο στο καθολικό πρότυπο (Normal.dot) όταν ανοίγει ένα νέο έγγραφο

Η Microsoft παρέχει παραδείγματα προγραμματισμού μόνο για επεξήγηση, χωρίς καμία εγγύηση, είτε σιωπηρή είτε ρητή. Αυτό περιλαμβάνει, ενδεικτικά, τις σιωπηρές εγγυήσεις εμπορευσιμότητας ή καταλληλότητας για συγκεκριμένο σκοπό. Αυτό το άρθρο προϋποθέτει ότι είστε εξοικειωμένοι με τη γλώσσα προγραμματισμού που παρουσιάζεται, καθώς και με τα εργαλεία που χρησιμοποιούνται για τη δημιουργία διαδικασιών και τον εντοπισμό σφαλμάτων σε αυτές. Οι μηχανικοί υποστήριξης της Microsoft μπορούν να σας εξηγήσουν τη λειτουργικότητα μιας συγκεκριμένης διαδικασίας. Ωστόσο, δεν θα τροποποιήσουν αυτά τα παραδείγματα για να παράσχουν πρόσθετες λειτουργίες, ούτε θα δημιουργήσουν διαδικασίες για να καλύψουν τις συγκεκριμένες απαιτήσεις σας.

Χρησιμοποιήστε μια προσαρμοσμένη λύση για να αλλάξετε το συνημμένο πρότυπο στο καθολικό πρότυπο (Normal.dot) όταν ανοίγει ένα νέο έγγραφο.

Σημείωση Βεβαιωθείτε ότι η ασφάλεια μακροεντολών έχει οριστεί σε μεσαίο ή χαμηλό.

Για να δημιουργήσετε την προσαρμοσμένη λύση Microsoft Visual Basic 6, ακολουθήστε τα εξής βήματα:
  1. Ανοίξτε ένα νέο έργο Standard.exe.
  2. Σε μια φόρμα χρήστη, προσθέστε τα ακόλουθα στοιχεία:
    • Μια λίστα
    • Δύο πλαίσια κειμένου
    • Τέσσερα κουμπιά εντολών
    • Δύο ετικέτες
  3. Ορίστε μια αναφορά σε δέσμες ενεργειών χρόνου εκτέλεσης της Microsoft (Scrun.dll).
  4. Αντιγράψτε και επικολλήστε τον παρακάτω κώδικα σε μια φόρμα χρήστη:
    Option Explicit
    Private Const BIF_RETURNONLYFSDIRS = 1
    Private Const BIF_DONTGOBELOWDOMAIN = 2
    Private Const MAX_PATH = 260
    Private Declare Function SHBrowseForFolder Lib "shell32" _
    (lpbi As BrowseInfo) As Long
    Private Declare Function SHGetPathFromIDList Lib "shell32" _
    (ByVal pidList As Long, _
    ByVal lpBuffer As String) As Long
    Private Declare Function lstrcat Lib "kernel32" Alias "lstrcatA" _
    (ByVal lpString1 As String, ByVal _
    lpString2 As String) As Long

    Private Type BrowseInfo
    hWndOwner As Long
    pIDLRoot As Long
    pszDisplayName As Long
    lpszTitle As Long
    ulFlags As Long
    lpfnCallback As Long
    lParam As Long
    iImage As Long
    End Type

    Public fso As New FileSystemObject
    Dim fld As Folder

    Private Sub cmdEnd_Click()
    End
    End Sub

    Private Sub cmdSource_Click()
    ' Opens a Treeview control that displays the directories in a computer.

    Dim lpIDList As Long
    Dim sBuffer As String
    Dim szTitle As String
    Dim tBrowseInfo As BrowseInfo

    szTitle = "This is the title"
    With tBrowseInfo
    .hWndOwner = Me.hWnd
    .lpszTitle = lstrcat(szTitle, "")
    .ulFlags = BIF_RETURNONLYFSDIRS + BIF_DONTGOBELOWDOMAIN
    End With

    lpIDList = SHBrowseForFolder(tBrowseInfo)
    If (lpIDList) Then
    sBuffer = Space(MAX_PATH)
    SHGetPathFromIDList lpIDList, sBuffer
    sBuffer = Left(sBuffer, InStr(sBuffer, vbNullChar) - 1)
    frmFSO.txtSearch.Text = sBuffer
    End If
    End Sub

    Private Sub cmdTarget_Click()

    ' Opens a Treeview control that displays the directories in a computer.

    Dim lpIDList As Long
    Dim sBuffer As String
    Dim szTitle As String
    Dim tBrowseInfo As BrowseInfo

    szTitle = "This is the title"
    With tBrowseInfo
    .hWndOwner = Me.hWnd
    .lpszTitle = lstrcat(szTitle, "")
    .ulFlags = BIF_RETURNONLYFSDIRS + BIF_DONTGOBELOWDOMAIN
    End With

    lpIDList = SHBrowseForFolder(tBrowseInfo)

    If (lpIDList) Then
    sBuffer = Space(MAX_PATH)
    SHGetPathFromIDList lpIDList, sBuffer
    sBuffer = Left(sBuffer, InStr(sBuffer, vbNullChar) - 1)
    End If
    End Sub

    Private Sub Command1_Click()
    Dim nDirs As Long, nFiles As Long, lSize As Currency
    Dim sDir As String, sSrchString As String
    Dim nTime
    Dim ntime2
    Dim nOk As Integer
    Dim fileNumber As Integer
    Dim oWord As Object
    Dim strServer As String
    Set oWord = CreateObject("Word.Application")
    strServer = txtOldServer.Text
    nTime = Time()
    fileNumber = FreeFile

    List1.Clear

    Open "C:\ChangeTemplate.log" For Append As #fileNumber
    Write #fileNumber, "Start:" & " " & nTime
    Close #fileNumber

    'Enter the top-level directory to start the search.
    sDir = txtSearch.Text

    'Enter the type of files, such as *.doc for Word documents
    sSrchString = "*.doc"

    MousePointer = vbHourglass

    'The label shows the current subfolder being searched.
    Label1.Caption = "Searching Folder: " & vbCrLf & UCase(sDir) & "..."
    lSize = FindFile(sDir, sSrchString, nDirs, nFiles, strServer, oWord)
    MousePointer = vbDefault
    ntime2 = Time()
    'Opens text file to show the stop time and the total numbers of
    'files that were found.
    Open "C:\ChangeTemplate.log" For Append As #fileNumber
    Write #fileNumber, "Stop:" & " " & ntime2 & " " & _
    "Time to Complete the Changes: " & _
    Format(ntime2 - nTime, "nn:ss") & vbCrLf _
    & Str(nFiles) & " files found in" & Str(nDirs) & _
    " directories"
    Close #fileNumber
    ' Debug.Print "Stop:" & " " & ntime2
    Label1.Caption = "Done"
    If Label1.Caption = "Done" Then Command2.Enabled = True
    MsgBox "Done"
    oWord.Quit
    Set oWord = Nothing
    End Sub

    Private Function FindFile(ByVal sFol As String, sFile As String, _
    nDirs As Long, nFiles As Long, strOServer As String, oWrd As Object) _
    As Currency
    Dim tFld As Folder, tFil As File, FileName As String
    Dim strFileName As String
    Dim fileNumber As Integer

    On Error GoTo Catch

    Set fld = fso.GetFolder(sFol)
    FileName = Dir(fso.BuildPath(fld.Path, sFile), vbNormal Or _
    vbHidden Or vbSystem Or vbReadOnly)
    While Len(FileName) <> 0
    FindFile = FindFile + FileLen(fso.BuildPath(fld.Path, FileName))
    nFiles = nFiles + 1
    List1.AddItem fso.BuildPath(fld.Path, FileName) ' Load ListBox
    strFileName = fld.Path & "\" & FileName
    '==

    ChangeTemplate strFileName, strOServer, oWrd
    FileName = Dir() ' Get next file
    DoEvents
    Wend
    Label1 = "Searching " & vbCrLf & fld.Path & "..."
    nDirs = nDirs + 1

    If fld.SubFolders.Count > 0 Then
    For Each tFld In fld.SubFolders
    DoEvents
    FindFile = FindFile + FindFile(tFld.Path, sFile, nDirs, nFiles, _
    strOServer, oWrd)
    Next
    End If
    Exit Function

    Catch: FileName = ""

    If Err.Number = 76 Then
    MsgBox "This is not a valid path statement" & vbCrLf & _
    "The program will end!"
    End
    End If
    Debug.Print Err.Description
    fileNumber = FreeFile

    'Writes the error description and number to the log file.
    Open "C:\ChangeTemplate.log" For Append As #fileNumber
    Write #fileNumber, Err.Description & " " & Err.Number
    Close #fileNumber
    Resume Next
    End Function

    Private Sub Command2_Click()
    'Use this to view the log file.
    Shell "notepad.exe c:\ChangeTemplate.log", 1
    End Sub

    Σε μια τυπική λειτουργική μονάδα, προσθέστε τον ακόλουθο κώδικα:
    Sub ChangeTemplate(SourceFile As String, strServer As String, objWord As Object)
    Dim dlgTemplates As Dialog
    Dim strTemp As String
    Dim strpath As String
    Dim objtemplate As String
    Dim dlgTemplate As Object
    Dim x As Integer
    Dim fNumber As Integer
    Dim objDoc As Object

    fNumber = FreeFile

    objWord.Visible = False
    strTemp = SourceFile

    'This function determines if the document is password protected or Read Only.
    If OpenDocument(objWord, strTemp) = True Then
    'This assumes that there is only one document opened. It may have to be adjusted
    'to look for additional document being opened.
    Set objDoc = objWord.Documents(1)
    'Dialogs 87 is the Templates and Addins dialog
    Set dlgTemplates = objWord.Dialogs(87)
    objtemplate = objWord.Dialogs(87).Template

    'parse out the server name from the fullname of the attached template

    If Mid(objtemplate, 2, 1) = ":" Or Left(objtemplate, 2) = "\\" Then
    x = InStr(3, objtemplate, "\")
    strTemp = Mid(objtemplate, 3, x - 3)
    'if the parse name is the same as the stated server then
    'change the attached template to the Normal

    If strTemp = strServer Then
    objDoc.AttachedTemplate = "Normal.dot"
    'write to a log file the file name and location
    Open "C:\ChangeTemplate.log" For Append As #fNumber
    Write #fNumber, "Document: " & objDoc.fullName & _
    "Attached template changed to Normal.dot"
    Close #fNumber
    End If
    End If

    'After the template is changed, the document is saved and closed.

    objDoc.Save
    objDoc.Close
    Else
    'Enter into the log file files that are not opened.
    Open "C:\ChangeTemplate.log" For Append As #fNumber
    Write #fNumber, "Document: " & SourceFile & " not opened! it's
    Read Only or Password Protected"
    Close #fNumber
    End If

    End Sub
    Function OpenDocument(ByRef objWord As Object, ByVal sDoc As String) As Boolean
    'Arguments:
    ' objWord - a valid Word Application object.
    ' sDoc - the complete path and file name of the document to open in Word.
    '
    'Opens the document specified by the sDoc variable.
    'This function returns True if the document is opened and is read/write.
    'Else, this function returns False if the document cannot be opened
    'or if the document is opened read-only because of the "read-only recommended" setting
    'in the document.
    'Therefore only if this function returns True if you try to modify the document.
    'If False is returned, log the sDoc into a text file and alert the user
    'of the list of file(s) that could not be processed by the batch routine.
    On Error GoTo EH
    Dim oDoc As Object
    Set oDoc = objWord.Documents.Open( _
    FileName:=sDoc, _
    ReadOnly:=False, _
    PasswordDocument:="?#nonsense@$", _
    WritePasswordDocument:="?#nonsense@$")
    If oDoc.ReadOnly = True Then
    OpenDocument = False
    Else
    OpenDocument = True
    End If
    CleanUp:
    On Error Resume Next
    Set oDoc = Nothing
    Exit Function

    EH:
    'There was an error opening the file. Return False
    OpenDocument = False
    Resume CleanUp
    End Function


Επιστροφή στην κορυφή

Μέθοδος 3: Δημιουργήστε μια Microsoft μακροεντολή Visual Basic for Applications (VBA) που διέρχεται από όλα τα έγγραφα σε ένα φάκελο και να αλλάζει το παλιό όνομα διακομιστή με το νέο όνομα διακομιστή

Η Microsoft παρέχει παραδείγματα προγραμματισμού μόνο για επεξήγηση, χωρίς καμία εγγύηση, είτε σιωπηρή είτε ρητή. Αυτό περιλαμβάνει, ενδεικτικά, τις σιωπηρές εγγυήσεις εμπορευσιμότητας ή καταλληλότητας για συγκεκριμένο σκοπό. Αυτό το άρθρο προϋποθέτει ότι είστε εξοικειωμένοι με τη γλώσσα προγραμματισμού που παρουσιάζεται, καθώς και με τα εργαλεία που χρησιμοποιούνται για τη δημιουργία διαδικασιών και τον εντοπισμό σφαλμάτων σε αυτές. Οι μηχανικοί υποστήριξης της Microsoft μπορούν να σας εξηγήσουν τη λειτουργικότητα μιας συγκεκριμένης διαδικασίας. Ωστόσο, δεν θα τροποποιήσουν αυτά τα παραδείγματα για να παράσχουν πρόσθετες λειτουργίες, ούτε θα δημιουργήσουν διαδικασίες για να καλύψουν τις συγκεκριμένες απαιτήσεις σας.

Η ακόλουθη μακροεντολή διέρχεται από όλα τα έγγραφα σε ένα φάκελο και να αλλάζει το παλιό όνομα διακομιστή με το νέο όνομα διακομιστή για τη θέση των προτύπων. Η μακροεντολή αυτή λειτουργεί μόνο αν η διαδρομή για τα πρότυπα είναι το ίδιο.
Sub Test()   Dim strFilePath As String 
Dim strPath As String
Dim intCounter As Integer
Dim strFileName As String
Dim OldServer As String
Dim NewServer As String
Dim objDoc As Document
Dim objTemplate As Template
Dim dlgTemplate As Dialog

OldServer = "<\\rsnj01\vol1>"
NewServer = "<\\rsnyc1p\vol3>"
strFilePath = InputBox("What is the folder location that you want to use?")
If Right(strFilePath, 1) <> "\" Then strFilePath = strFilePath & "\"
strFileName = Dir(strFilePath & "*.doc")
Do While strFileName <> ""
Set objDoc = Documents.Open(strFilePath & strFileName)
Set objTemplate = objDoc.AttachedTemplate
Set dlgTemplate = Dialogs(wdDialogToolsTemplates)
strPath = dlgTemplate.Template
If LCase(Left(strPath, 13)) = LCase(OldServer) Then
objDoc.AttachedTemplate = NewServer & Mid(strPath, 14)
End If
strFileName = Dir()
objDoc.Save
objDoc.Close
Loop
Set objDoc = Nothing
Set objTemplate = Nothing
Set dlgTemplate = Nothing

End Sub


Επιστροφή στην κορυφή

Μέθοδος 4: Δημιουργήστε μια μακροεντολή VBA που διέρχεται από όλα τα έγγραφα σε ένα φάκελο και να αλλάζει το παλιό όνομα διακομιστή με το καθολικό πρότυπο (Normal.dot)

Η Microsoft παρέχει παραδείγματα προγραμματισμού μόνο για επεξήγηση, χωρίς καμία εγγύηση, είτε σιωπηρή είτε ρητή. Αυτό περιλαμβάνει, ενδεικτικά, τις σιωπηρές εγγυήσεις εμπορευσιμότητας ή καταλληλότητας για συγκεκριμένο σκοπό. Αυτό το άρθρο προϋποθέτει ότι είστε εξοικειωμένοι με τη γλώσσα προγραμματισμού που παρουσιάζεται, καθώς και με τα εργαλεία που χρησιμοποιούνται για τη δημιουργία διαδικασιών και τον εντοπισμό σφαλμάτων σε αυτές. Οι μηχανικοί υποστήριξης της Microsoft μπορούν να σας εξηγήσουν τη λειτουργικότητα μιας συγκεκριμένης διαδικασίας. Ωστόσο, δεν θα τροποποιήσουν αυτά τα παραδείγματα για να παράσχουν πρόσθετες λειτουργίες, ούτε θα δημιουργήσουν διαδικασίες για να καλύψουν τις συγκεκριμένες απαιτήσεις σας.

Η ακόλουθη μακροεντολή διέρχεται από όλα τα έγγραφα σε ένα φάκελο και να αλλάζει το παλιό όνομα διακομιστή με το καθολικό πρότυπο (Normal.dot).

Σημείωση Εάν είναι ένα έγγραφο προστατεύεται με κωδικό πρόσβασης σε κάθε περίπτωση, το πρότυπο δεν θα αλλάξει και ο κωδικός θα αποτύχει.
Sub Test()


Dim strFilePath As String

Dim strPath As String

Dim intCounter As Integer

Dim strFileName As String

Dim OldServer As String

Dim objDoc As Document

Dim objTemplate As Template

Dim dlgTemplate As Dialog

Dim nServer As Integer



'hardcode the name of the old server.



OldServer = "{enter the name of the Old Server}"

nServer = Len(OldServer)

strFilePath = InputBox("What is the folder location that you want to use?")



If Right(strFilePath, 1) <> "\" Then strFilePath = strFilePath & "\"

strFileName = Dir(strFilePath & "*.doc")

Do While strFileName <> ""

Set objDoc = Documents.Open(strFilePath & strFileName)

Set objTemplate = objDoc.AttachedTemplate

Set dlgTemplate = Dialogs(wdDialogToolsTemplates)

strPath = dlgTemplate.Template



If LCase(Left(strPath, nServer)) = LCase(OldServer) Then

objDoc.AttachedTemplate = NormalTemplate

End If



strFileName = Dir()

objDoc.Save

objDoc.Close

Loop



Set objDoc = Nothing

Set objTemplate = Nothing

Set dlgTemplate = Nothing



End Sub


Επιστροφή στην κορυφή

Μέθοδος 5: Μετονομασία του διακομιστή, το κοινόχρηστο στοιχείο ή το φάκελο με το αρχικό του όνομα

Εάν ο διακομιστής, το κοινόχρηστο στοιχείο ή το φάκελο που περιέχει το πρότυπο έχει μετακινηθεί ή μετονομαστεί, μετονομάστε το διακομιστή, το κοινόχρηστο στοιχείο ή το φάκελο με το αρχικό του όνομα.


Εάν το ΠΑΛΙΌ διακομιστή δεν υπάρχει πλέον, μπορείτε να δημιουργήσετε καταχώρηση DNS με ΠΑΛΙΌ όνομα διακομιστή. Αφού η ΠΑΛΙΆ εγγραφή DNS όνομα διακομιστή, μπορείτε να δημιουργήσετε την ίδια δομή φακέλων που παρατίθενται στο πρότυπο διαδρομή και να αντιγράψετε το πρότυπο σε αυτόν το φάκελο. Επιστροφή στην κορυφή

Κατάσταση

Η Microsoft έχει επιβεβαιώσει ότι πρόκειται για ένα ζήτημα των προϊόντων της Microsoft που παρατίθενται στην ενότητα "Ισχύει για".
Ιδιότητες

Αναγνωριστικό άρθρου: 830561 - Τελευταία αναθεώρηση: 17 Ιαν 2017 - Αναθεώρηση: 1

Σχόλια