jo4884
Goto Top

Makro stürzt ab

Hi bin noch sehr ungeübt im umgang mit VBA Programmierung und habe folgendes Problem,
wo ich nicht mehr weiter komme.

Ich öffne ein Worddokument. In diesem Dokument ist ein Button vorhanden.
Beim klicken auf diesen Button wird eine Userform aufgerufen in der man ein Dokument (Word) auswählen kann, welches nach verschiedenen Stichworten durchsucht werden soll.
Es kann unterschieden werden zwischen .doc und .docx .
Das habe ich folgendermaßen gelöst:

If Right(Textdokument, 5) = ".docx" Then
Windows(Textdokument).Activate
Else:
If Right(Textdokument, 4) = ".doc" Then
Windows(Textdokument & " [Kompatibilitätsmodus]").Activate

Das Makro prüft Quasi von Rechts den Dateipfad und kann somit die Versionen erkennen.

Mein eigentliches Problem ist jetzt das von Zeit zu Zeit (meistens beim ersten Start des Programms) mir ein Fehler ausgegeben wird, das das angeforderte Element nicht in der Sammlung vorhanden ist (Laufzeitfehler 5941).
Wenn ich es danach noch mal ausführe funktioniert es.
Kann ich das vorher irgendwie Abfangen?

Gruß an alle

Content-ID: 141018

Url: https://administrator.de/contentid/141018

Ausgedruckt am: 26.11.2024 um 01:11 Uhr

TheEternalPhenom
TheEternalPhenom 20.04.2010 um 11:31:39 Uhr
Goto Top
Hallo jo4884,

Zu erste einmal Else mit einem dopple Punkt?
Habe ich etwas verpasst in VBA oder nur ein Übertragungsfehler?

Poste bitte einmal das gesamte Programm nicht immer ist der Fehler in der Zeile, welche VBA als verkehrt markiert zu suchen.

Dann wäre noch interessant zu wissen ob du die einzelnen Zeilen schon getestet hast.
Ich meine also jede Zeile als eigenes Makro getestet.


Und dann noch einen Tipp.

If Right(Textdokument, 5) = ".docx" Then

Versuche das Ergebnis von "Right(Textdokument, 5) " in eine Variable zu packen und dann erst die Abfrage zu gestalten. Gleiches gilt auch für den vergleichs Wert.

Ich hatte es in letter Zeit, dass genau bei solchen Zeile die Deklarierung nicht funktionierte o.ä. Probleme auftraten. Am besten die Variablen dann auch noch gleich deklarieren.

Gruß

duffman521
jo4884
jo4884 20.04.2010 um 12:14:21 Uhr
Goto Top
Also ich denk mal das die Formatierung wieder Falsch ist, Sorry.
An sich funktioniert es ja. Nur ab und zu gibt er mir diesen Fehler aus.
Private Sub Stichwortsuche_Click()
' Makro sucht Schlüsselwörter  
'  
 Dim y As Integer

If TextBox1.Value <> "" Then                                     
      Documents.Open FileName:=Textdokument, ReadOnly:=False    
              
    If Right(Textdokument, 5) = ".docx" Then       
       Windows(Textdokument).Activate           
          
        Dim oDoc As Document
        Set oDoc = ThisDocument
        
        Set rDoc = ThisDocument                                     
        a = rDoc.Tables(1).Rows.Count                               
        For i = 2 To a                                             
            b = Left(rDoc.Tables(1).Cell(i, 1).Range.Text, _
            Len(rDoc.Tables(1).Cell(i, 1).Range.Text) - 2)
            c = Left(rDoc.Tables(1).Cell(i, 2).Range.Text, _
            Len(rDoc.Tables(1).Cell(i, 2).Range.Text) - 2)
           
  
        Selection.HomeKey Unit:=wdStory
        Selection.Find.ClearFormatting
        With Selection.Find
            .Text = (b)                                 
            .Replacement.Text = ""  
            .Forward = True
            .Wrap = wdFindStop
            .Format = False
            .MatchCase = False
            .MatchWholeWord = True
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
        End With
      
        Do While Selection.Find.Execute
          Selection.Comments.Add Range:=Selection.Range, Text:=(c) 
   
          y = y + 1
        Loop
        Next
          
          
    Else:
        If Right(Textdokument, 4) = ".doc" Then                                 
           Windows(Textdokument & " [Kompatibilitätsmodus]").Activate  
            
            Set rDoc = ThisDocument
            a = rDoc.Tables(1).Rows.Count                             
            For i = 2 To a
                b = Left(rDoc.Tables(1).Cell(i, 1).Range.Text, _
                Len(rDoc.Tables(1).Cell(i, 1).Range.Text) - 2)          
                c = Left(rDoc.Tables(1).Cell(i, 2).Range.Text, _
                Len(rDoc.Tables(1).Cell(i, 2).Range.Text) - 2)         
           
            Selection.HomeKey Unit:=wdStory                
            Selection.Find.ClearFormatting
            With Selection.Find
                .Text = (b)                                         
                .Replacement.Text = ""  
                .Forward = True
                .Wrap = wdFindStop
                .Format = False
                .MatchCase = False
                .MatchWholeWord = True
                .MatchWildcards = False
                .MatchSoundsLike = False
                .MatchAllWordForms = False
            End With
      
            Do While Selection.Find.Execute
            Selection.Comments.Add Range:=Selection.Range, Text:=(c)        
             y = y + 1
            Loop
            Next
                       
                Else: MsgBox "Falsches Dateiformat"  
                      Windows(Textdokument).Close             
           End If 
      End If
   
Else:
     
End If
End Sub

Private Sub Textdokument_auswählen_Click()
' Textdatei wählen.  
 
    Dim fd As FileDialog

    Set fd = Application.FileDialog(msoFileDialogFilePicker)

    With fd
        .AllowMultiSelect = False
        If (VerzeichnisUnused) Then
            .InitialFileName = Textdokument.Path & "\"   
            VerzeichnisUnused = False
        End If
        
        If .Show = -1 Then
            Datei = True
                    
            Textdokument = .SelectedItems(1)
            TextBox1.Value = Textdokument

        Else
        End If
    End With
    Set fd = Nothing
End Sub


[Edit] Mal versuchsweise in Codetags gesetzt. [/Edit]
TheEternalPhenom
TheEternalPhenom 20.04.2010 um 12:35:22 Uhr
Goto Top
Du sagst ab und zu.

Wann genau?

Kannst du die Fehlermeldung provozieren?

Kommt die Meldung zum Beispiel nur, wenn dein *.Docx Datei genutzt wird, Sonderzeichen im Dateinamen sind oder dieser zulange ist?


Ich schau mir mal das Makro an ob ich vllt. etwas sehe. 4 Augen sehen bekanntlich mehr als 2 Stück.
jo4884
jo4884 20.04.2010 um 13:21:06 Uhr
Goto Top
Also provozieren kann ich die Fehlermeldung nicht.
Meistens kommt sie wenn das Programm zum ersten mal nach einem Programmneustart läuft.
An den Dateien kann es Glaube ich nicht liegen, denn zum testen verwende ich immer die beiden
gleichen Dateien.
Wenn ich nach der Fehlermeldung auf Debuggen oder Beenden klicke und die selbe Datei erneut aufruf,
dann funktioniert es.