MS-Office-Forum

Zurück   MS-Office-Forum > Microsoft Office > Microsoft Excel
Registrieren Forum Hilfe Alle Foren als gelesen markieren

Banner und Co.

Antworten
Ads
Themen-Optionen Ansicht
Alt 08.09.2017, 11:44   #1
Norris
Neuer Benutzer
Neuer Benutzer
Standard VBA - Laufzeitfehler '13'

Hallo liebe Community,

ich hoffe, dass ihr mir weiterhelfen könnt.

Zum Vorwort: Ich habe mir eine Excelfile aufgebaut in der man durch Optionsfelder einzelne Tabellen sichtbar macht.
Um nun beim Speichern nicht alle Daten zu übernehmen und die Dateigröße zu verkleinern, wird die entsprechende Tabelle (durch vorher gewähltes Optionsfeld) als PDF abgespeichert. Dies geschieht über eine Befehlsschaltfläche mittels Makro.

Habe mir den Code zum Teil aus dem Netz raus gesucht und selber noch ergänzt. Beim Testen hat alles funktioniert, allerdings wird seit dem Anklicken des letzten Optionsfeldes der Fehlercode "Laufzeitfehler '13' " dauerhaft wiedergegeben. In einer anderen Datei mit dem selben Code funktioniert noch alles und am Code der ersten Datei wurde nichts verändert.

Hier der Auszug welcher als Laufzeitfehler markiert wird.

Code:

 varDateiname = Application.GetSaveAsFilename(InitialFileName:=Sheets("Auswahl").Range("B39").Value & "_" & Sheets("Auswahl").Range("B38").Value & "_" & Sheets("Auswahl").Range("B40").Value, filefilter:="PDF-Datei (*.pdf),*.pdf")
Jemand eine Idee woran es liegen könnte?
Und zur Vollständigkeit noch der ganze Code.

Code:

Sub Makro_speichern()

  Dim varDateiname As Variant
     ChDir ""
     ChDrive "L:RENNSPORTComp 3 way2 Way EXR"
     varDateiname = Application.GetSaveAsFilename(InitialFileName:=Sheets("Auswahl").Range("B39").Value & "_" & Sheets("Auswahl").Range("B38").Value & "_" & Sheets("Auswahl").Range("B40").Value, filefilter:="PDF-Datei (*.pdf),*.pdf")

     If TypeName(varDateiname) = "String" Then 
         If Sheets("A-EA").Visible = True Then
         Sheets("A-EA").Select
         Else
         If Sheets("A-EA-SCH").Visible = True Then
         Sheets("A-EA-SCH").Select
         Else
         If Sheets("A-A").Visible = True Then
         Sheets("A-A").Select
         Else
         If Sheets("A-A-SCH").Visible = True Then
         Sheets("A-A-SCH").Select
         Else
         If Sheets("A-S").Visible = True Then
         Sheets("A-S").Select
         Else
         If Sheets("A-S-SCH").Visible = True Then
         Sheets("A-S-SCH").Select
         Else
         If Sheets("EA-EA").Visible = True Then
         Sheets("EA-EA").Select
         Else
         If Sheets("EA-EA-SCH").Visible = True Then
         Sheets("EA-EA-SCH").Select
         Else
         If Sheets("EA-S").Visible = True Then
         Sheets("EA-S").Select
         Else
         If Sheets("EA-S-SCH").Visible = True Then
         Sheets("EA-S-SCH").Select
         Else
         If Sheets("G-S").Visible = True Then
         Sheets("G-S").Select
         Else
         If Sheets("G-S-SCH").Visible = True Then
         Sheets("G-S-SCH").Select
         End If
         End If
         End If
         End If
         End If
         End If
         End If
         End If
         End If
         End If
         End If
         End If
         ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        varDateiname, Quality:= _
        xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
        OpenAfterPublish:=True
         End If
End Sub
Bisschen Offtopic:
Da ich bislang noch weit am Anfang von VBA bin, habe ich auch nur das Wissen anwenden können, welches ich mir schon angeeignet habe.

Daher noch zwei weitere Fragen.

-Ist die Umsetzung mit dem Sheets().Visible eine geeignete Lösung, oder wäre da etwas anderes sinnvoller?

-Und beim Speicherpfad ist "L:RENNSPORTComp 3 way2 Way EXR" hinterlegt, allerdings öffnet sich das "Speichern unter" Fenster im Ordner ":L". Geht das nicht bis zum Zielordner?
Norris ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 08.09.2017, 12:30   #2
Chirin
MOF User
MOF User
Standard

a. ich finde die krasse Verschachtelung der If-Schleifen sehr verwirrend. Ggf. kannst du versuchen if-else zu nutzen oder das anders übersichtlicher zu machen? Vielleicht wird dir damit auch schon mehr zum Fehler klar, wo das Problem liegen könnte.
Edit: Im Code fällt mir auf, dass du immer die Sichtbaren Sheets auswählst. Und davon alle.

Mein Tipp:
Lasse alle Sheets durchlaufen, wähle die sichtbaren aus. (ggf. musst du die Namen in einem Array zwischenspeichern)

b. Kannst du die Fehlermeldung zu dem Laufzeitfehler mitschicken? Das erleichtert die Fehlersuche.

c. ChDrive "L:RENNSPORTComp 3 way2 Way EXR" hier fehlen noch ein paar Backslashes würde ich meinen. Check das noch mal. (Kannst dir den Ordnerpfad direkt aus deinem Windows Explorer kopieren.)

__________________

Grüße, Chirin.

// Dear maintainer:
// Once you are done trying to 'optimize' this routine, and have realized what a terrible mistake that was,
// please increment the following counter as a warning to the next guy:
// total_hours_wasted_here = 42

Geändert von Chirin (08.09.2017 um 12:34 Uhr).
Chirin ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 08.09.2017, 13:44   #3
Norris
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

So, Fehler ist gefunden.... Es lag nicht an dem VBA Code, sondern in einer Formel. Excel hat so den Bezug für den Speichernamen nicht finden können, da er sich nur auf die Spalte anstatt die genaue Zelle beziehen konnte (Zahl hat gefehlt).

Danke für deine schnelle Antwort, Chirin.

Allerdings frage ich mich zu "a.": Ich habe doch if-else verwendet

Das Problem ist eben, dass nicht alle sichtbaren Sheets verwendet werden.

Es gibt insgesamt 29 Sheets,
davon sind drei Stück dauerhaft unsichtbar,
zwei Stück dauerhaft sichtbar
und mit dem ausgewähltem Optionsfeld (12 Kombinationen) kommen zwei Sheets sichtbar dazu.
Somit sind vier Stück sichtbar. Davon darf aber immer nur eins verwendet werden. (Ja ist bisschen verwirrend )

Zu c.: Nein, die Backslashs sind alle vorhanden, die hat er beim Kopieren nicht mit übernommen Zumindest kann ich es hier im Forum nicht darstellen.
Auf jeden Fall geht er nur bis zum Ordner "L:" vor.

Gruß Patrick
Norris ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 08.09.2017, 19:08   #4
rastrans
MOF Koryphäe
MOF Koryphäe
Standard

Hallo,

was Chirin dir vermutlich sagen möchte, das deine vielen IF einfach zu viel sind. Und bei Änderungen wirst du vermutlich selbst merken, das es kaum handbar ist.

Ich denke, du möchtest ein sichtbares Arbeitsblatt selektieren, und dabei ist die Reihenfolge der Prüfung, ob das Sheet sichtbar ist, wichtig.

Ok, das macht mein Code nun auch. Wenn du die Reihenfolge ändern möchtest, ein Worksheet dazu oder löschen möchtest, oder den Namen ändern, brauchst du bei mir nur eine Zeile ändern. Dort, wo die Konstante c_Blattnamen gesetzt wird.

Und ja, die Backslash werden im Forum nur angezeigt, wenn man zwei hintereinander macht. Ist beim Code kopieren blöd, da der Code ja nur ein \ benötigt!

Grüsse
rastrans
Code:

Sub Makro_speichern()
    Const c_Blattnamen = "A-EA A-EA-SCH A-A A-A-SCH A-S A-S-SCH EA-EA EA-EA-SCH EA-S EA-S-SCH G-S G-S-SCH"
    Dim varDateiname As Variant
    Dim straBlattname() As String
    
    ChDir ""
    ChDrive "L:RENNSPORTComp 3 way2 Way EXR" 'BackSlash nicht vorhanden. Kann das Forum nur bedingt...
    varDateiname = Application.GetSaveAsFilename(InitialFileName:=Sheets("Auswahl").Range("B39").Value & "_" & Sheets("Auswahl").Range("B38").Value & "_" & Sheets("Auswahl").Range("B40").Value, filefilter:="PDF-Datei (*.pdf),*.pdf")

    If TypeName(varDateiname) = "String" Then
        straBlattname = Split(c_Blattnamen)
        For i = 0 To UBound(straBlattname)
            If Sheets(straBlattname(i)).Visible = True Then
                Sheets(straBlattname(i)).Select
                Exit For
            End If
        Next
        ActiveSheet.ExportAsFixedFormat _
            Type:=xlTypePDF, _
            Filename:=varDateiname, _
            Quality:=xlQualityStandard, _
            IncludeDocProperties:=True, _
            IgnorePrintAreas:=False, _
            OpenAfterPublish:=True
    End If
End Sub

__________________

There are 10 different types of people in the world. Those who understand the binary system and those who not.

Da für die Helfer der einzige Lohn eine Rückmeldung ist, wäre ein kurzes Feedback wünschenswert.
Auch sehen andere User, die ein ähnliches Problem haben, inwiefern die Lösung zur Beseitigung des Problems beigetragen hat.
Übrigens : Hilfreiche und positive Beiträge kann man auch bewerten!

Geändert von rastrans (08.09.2017 um 19:11 Uhr).
rastrans ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Ads
Antworten


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Besucher: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge anzufügen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist An.
Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:26 Uhr.


Partner und Co.
Access-Paradies -Alles rund um die Datenbank Microsoft Access -Code -Programme-Tools -Tipps   Kostenlose Tipps & Tricks, Downloads und Programme   www.kulpa-online.com - Tipps - Tricks - Tutorials - Meinungen - Downloads uvm...   vb@rchiv · Willkommen in der Welt der VB Programmierung   Access-Garhammer - Hier finden Sie jede Menge Beispiel-Datenbanken zu Access und mehr ...   mcseboard.de   Die Top Seite für Excel-VBA-Makros uvm.

Powered by: vBulletin Version 3.6.2 (Deutsch)
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

Copyright ©2000-2018 MS-Office-Forum. Alle Rechte vorbehalten.
Copyright ©Design: Manuela Kulpa ©Rechte: Günter Kramer
Eine Verwendung der Inhalte in anderen Publikationen, auch auszugsweise,
ist ohne ausdrückliche Zustimmung der Autoren nicht gestattet.