Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1820to1824
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Bei Fehler Anweisung durchführen

Bei Fehler Anweisung durchführen
23.03.2021 13:09:01
Alexandro
Hallo liebe Forummietglieder,
ich suche einen Code, dass bei Fehlermeldung mir bestimmte Anweisungen durchführt.
habe
On Error Resume Next ausprobiert
Dim nRow As Integer
For nRow = 4 To Cells(Rows.Count, 4).End(xlUp).Row
Cells(nRow, 3) = "nicht aktuell"
Next nRow
..leider keine Rückmeldung von Excel...Könnte mir dabei jemand helfen?,
freue mich über die Rückmeldung
natürlich ist das nicht gesamte Code...
Option Explicit
Sub Makro1()
'Neues Excel Objekt
Dim objExcel        As New Excel.Application
'Sheet Objekt der jeweiligen Exceldatei
Dim objSheet        As Object
'Hilfsvariablen
Dim iRow            As Integer
Dim strDateipfad    As String
Dim strPfad         As String
Dim strDateiname    As String
'Pfad in welchem sich die Dateien der zu
'kopierenden Zellen sich befinden auswählen
strPfad = "G:bla bla"
'Schleife welche den Zelleninhalt aller aufgelisteten
'Dateien in mehrere Zellen des Hauptprogramms schreibt
On Error Resume Next
Dim nRow As Integer
For nRow = 4 To Cells(Rows.Count, 4).End(xlUp).Row
Cells(nRow, 3) = "keine Verknüpfung"
End If
Next nRow
For iRow = 4 To Cells(Rows.Count, 4).End(xlUp).Row
'Überprüfen, ob in Spalte "Dateiname" ein solcher eingetragen ist.
'(der Arbeitsvorgang wird fortgesetzt)
If Cells(iRow, 2) = "" Then 'Wenn Zelle in Spalte B Leer dann Exit
Exit Sub
Else
strDateiname = Cells(iRow, 2)
strDateipfad = strPfad & strDateiname & ".xlsm"
'Überprüfen, ob die in der Tabelle angegebene Datei vorhanden ist.
'(der Arbeitsvorgang wird fotzgesetzt)
If Dir(strDateipfad) = "" Then
Else
objExcel.Workbooks.Open strDateipfad
Set objSheet = objExcel.Sheets("Schnittstelle")
Cells(iRow, 7) = objSheet.Cells(26, 2) ' Cells(Durchsuchte Spalte der Namen,  _
Spaltenindex) = objSheets.cells(Zeile,Spalte)
Cells(iRow, 8) = objSheet.Cells(27, 2)
End If
End If
Next iRow
End Sub
Grüße aus LA(Landshut)
Alex

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bei Fehler Anweisung durchführen
23.03.2021 13:29:33
Nepumuk
Hallo Alex,
teste mal:
Option Explicit

Public Sub Makro1()
    
    'Neues Excel Objekt
    Dim objExcel As New Excel.Application
    'Sheet Objekt der jeweiligen Exceldatei
    Dim objSheet As Worksheet
    Dim objWorkBook As Workbook
    'Hilfsvariablen
    Dim iRow As Long
    Dim strDateipfad As String
    Dim strPfad As String
    Dim strDateiname As String
    
    'Pfad in welchem sich die Dateien der zu
    'kopierenden Zellen sich befinden auswählen
    strPfad = "G:bla bla"
    'Schleife welche den Zelleninhalt aller aufgelisteten
    'Dateien in mehrere Zellen des Hauptprogramms schreibt
    
    Range(Cells(4, 3), Cells(Cells(Rows.Count, 4).End(xlUp).Row, 3)).Value = "keine Verknüpfung"
    
    For iRow = 4 To Cells(Rows.Count, 4).End(xlUp).Row
        'Überprüfen, ob in Spalte "Dateiname" ein solcher eingetragen ist.
        '(der Arbeitsvorgang wird fortgesetzt)
        If IsEmpty(Cells(iRow, 2).Value) Then 'Wenn Zelle in Spalte B Leer dann Exit
            Exit For
        Else
            strDateiname = Cells(iRow, 2).Value
            strDateipfad = strPfad & strDateiname & ".xlsm"
            'Überprüfen, ob die in der Tabelle angegebene Datei vorhanden ist.
            '(der Arbeitsvorgang wird fotzgesetzt)
            
            If Dir$(strDateipfad) <> vbNullString Then
                
                Set objWorkBook = objExcel.Workbooks.Open(strDateipfad)
                Set objSheet = objWorkBook.Worksheets("Schnittstelle")
                Cells(iRow, 7).Value = objSheet.Cells(26, 2).Value ' Cells(Durchsuchte Spalte der Namen, _
                    Spaltenindex) = objSheets.cells(Zeile,Spalte)

                Cells(iRow, 8).Value = objSheet.Cells(27, 2).Value
                
                Call objWorkBook.Close(SaveChanges:=False)
                Set objSheet = Nothing
                Set objWorkBook = Nothing
            End If
        End If
    Next iRow
    objExcel.Quit
    Set objExcel = Nothing
End Sub

Gruß
Nepumuk

Anzeige
AW: Bei Fehler Anweisung durchführen
23.03.2021 14:18:11
Alexandro
Hallo Nepumuk, Danke für die Rückmeldung!
Das Programm macht bei mir so, dass jede Datei "keine Verknüpfung" enthält, sprich: in jeder Zelle ein Fehler auftritt... rein theoretisch müsste es genau anderst rum sein xD, dass alle Zellen Leer sind..aber er schreibt "keine Verknüpfung" überall hin...
Sonst: Wie kann ich das so programmieren, dass es meine vorherige Codes nicht überschreibt? Da es in den Zellen noch Werte stehen werden, wie "aktuell", "nicht aktuell" und natürlich "keine Verknüpfung".
Herzlichen Dank für die weitere Hilfe und freundliche Grüße
Alex

AW: Bei Fehler Anweisung durchführen
23.03.2021 14:22:15
Nepumuk
Hallo Alex,
das habe ich aus deinem Makro abgeschaut. Da läufst du durch die Zeilen und schreibst überall "keine Verknüpfung" rein. Also, was sind die Bedingungen bei denen das rein kommt?
Gruß
Nepumuk

Anzeige
AW: Bei Fehler Anweisung durchführen
23.03.2021 14:39:11
Alexandro
Hallo Nepumuk,
stimmmt, mein Fehler
Das Problem sieht folgender Maßen aus. Ich Habe ein Dateiordner. Auf diesen Ordner greife ich in die Dateieen auf bestimmmte Zellen und übertrage die Werte in eine bestimmte Master Datei. Da die Dateien für "alle" zugänglich sind, werden diese Dateien von vielen unterschiedlichen Personen aktualisiert usw. Also wenn ich die Masterdatei aufmache und dort sachen aktualisiere und während dessen jemand im Dateiordner die Dateien ändert, kommt es zu einem Fehler...also die Daten übertragen sich nicht...deshalb möchte ich "nicht aktuell" (früher "keine Verknüpfung") in die Nachbarzelle schreiben. Falls nichts auftaucht "aktuell" schreiben...
Hoffentlich ist es bischen verständlicher damit :)
Grüße
Alex

Anzeige
AW: Bei Fehler Anweisung durchführen
23.03.2021 14:45:53
Nepumuk
Hallo Alex,
dann macht doch die "Schleife" am Anfang des Makros keinen Sinn. Oder sehe ich das falsch?
Welcher Fehler kommt denn?
Gruß
Nepumuk

AW: Bei Fehler Anweisung durchführen
23.03.2021 16:06:40
Daniel
"Also wenn ich die Masterdatei aufmache und dort sachen aktualisiere und während dessen jemand im Dateiordner die Dateien ändert, kommt es zu einem Fehler."
dann bekommst du wahrscheinlich keinen Fehler im eigentlichen Sinn, sondern eine Rückfrage des Systems, ob die Datei schreibgeschützt geöffnet werden soll
Daher funktioniert eine Fehlerbehandlung auch nicht, weils kein Fehler ist.
die Frage ist, wie du mit dieser Situation umgehen willst.
a) Datei trotzem öffnen und die zuletzt gespeicherten Inhalte übernehmen
b) Diesen Fall erkennen und diese Datei überspringen.
im Fall a) könntest du bei Workbooks.Open einfach den Paramter: ReadOnly:=True mit hinzunehmen
dann wird die Datei immer mit Schreibschutz geöffnet und du kannst die Daten ausslesen.
im Fall b) kannst du so vorgehen:
setze den Befehl Application.DisplayAlerts = False
danach bekommst du keine Systemrückfragen mehr. Sollte dann eine Datei von einem anderen bearbeitet werden, dann wird sie schreibgeschützt geöffnet, falls nicht normal.
das könntest du mit Workbooks(...).ReadOnly (ergibt true oder false) abfragen und dann in deinem Code entsprechend reagieren.
Gruß Daniel

Anzeige
AW: Bei Fehler Anweisung durchführen
24.03.2021 07:08:37
Alexandro
Hallo Daniel,
Danke für die tolle und sehr sehr ausführliche Rückmeldung! Meine Situation ist mehr die b) Variante.
Du hast völlig Recht, es kommt kein eigentlicher Fehler, sondern Rückfrage, dass die Datei schreibgeschützt ist.
Ich möchte nun bei solchen Fählen in die Nachbarzeile ein "nicht aktuell" hinschreiben sonst "aktuell".
ich habe es mit deinem Rat probiert, allerdings, macht es mir nur die erste Datei "nicht aktuell", obwohl theoretisch wiederum nicht stimmt und muss "aktuell" sein...
Anbei mein Code dazu, und fett markiert was ich eingefügt habe...
Hoffentlich lässt es sich was tun
Frendliche Grüße
Alex
Option Explicit
Sub Makro1()
'Neues Excel Objekt
Dim objExcel        As New Excel.Application
'Sheet Objekt der jeweiligen Exceldatei
Dim objSheet        As Object
'Hilfsvariablen
Dim iRow            As Integer
Dim strDateipfad    As String
Dim strPfad         As String
Dim strDateiname    As String
'Pfad in welchem sich die Dateien der zu
'kopierenden Zellen sich befinden auswählen
strPfad = "G:\TEAM\KKI\TU\TUE\Zusammenarbeit\Alex\PSP Elemente\"
'Schleife welche den Zelleninhalt aller aufgelisteten
'Dateien in mehrere Zellen des Hauptprogramms schreibt
For iRow = 4 To Cells(Rows.Count, 4).End(xlUp).Row
'Überprüfen, ob in Spalte "Dateiname" ein solcher eingetragen ist.
'(der Arbeitsvorgang wird fortgesetzt)
If Cells(iRow, 2) = "" Then 'Wenn Zelle in Spalte B Leer dann Exit
Exit Sub
Else
strDateiname = Cells(iRow, 2)
strDateipfad = strPfad & strDateiname & ".xlsm"
'Überprüfen, ob die in der Tabelle angegebene Datei vorhanden ist.
'(der Arbeitsvorgang wird fotzgesetzt)
If Application.DisplayAlerts = True Then
'Wenn true: d.h die Datei wird gerade bearbeitet usw. dann schreibe in die zeile 3, bei allen  _
dateien die gerade bearbeitet werden in die nachbarzelle "nicht aktuell" sonst setze "aktuell"
Cells(iRow, 3) = "nicht aktuell"
Application.DisplayAlerts = False
Else: Cells(iRow, 3) = "aktuell"
If Dir(strDateipfad) = "" Then
Else
objExcel.Workbooks.Open strDateipfad
Set objSheet = objExcel.Sheets("Schnittstelle")
Cells(iRow, 7) = objSheet.Cells(26, 2) ' Cells(Durchsuchte Spalte der Namen,  _
Spaltenindex) = objSheets.cells(Zeile,Spalte)
Cells(iRow, 8) = objSheet.Cells(27, 2)
Cells(iRow, 9) = objSheet.Cells(28, 2)
Cells(iRow, 10) = objSheet.Cells(29, 2)
Cells(iRow, 11) = objSheet.Cells(30, 2)
Cells(iRow, 12) = objSheet.Cells(31, 2)
End If
End If
End If
Next iRow
End Sub


Anzeige
AW: Bei Fehler Anweisung durchführen
24.03.2021 09:31:54
Daniel
Hi
Application.DisplayAlerts darfst du nicht abfragen.
Das ist doch nur die Einstellung, wie mit Systemrückfragen umgegangen werden soll und die hast du selber gesetzt.
Du musst prüfen, ob die von dir mit Workbooks.Open geöffnete Datei die Eigenschaft "ReadOnly" gleich True oder gleich False hat.
Also im Prinzip so:
Application.DisplayAlerts = false
Workbooks.Open(Pfad&Datei)
If Workbooks(Datei).ReadOnly = True then
Code für Schreibgeschützt
Else
code für nicht schreibgeschützt
End if
Application.DisplayAlerts = True
Gruß Daniel

Anzeige
AW: Bei Fehler Anweisung durchführen
24.03.2021 10:40:50
Alexandro
Hallo Daniel,
Danke dir für die rasche Rückmeldung!
ich habe den Code in die Datei mit Schreibgeschützten Sachen reingefügt und das kamm raus...
Sub makro ()
Dim pfad As String
pfad = "G:\TEAM\KKI\TU\TUE\Zusammenarbeit\Alex\PSP Elemente\"
Application.DisplayAlerts = False
Workbooks.Open (pfad & "0711.X35404.033.04" & ".xlsm")
If Workbooks("0711.X35404.033.04").ReadOnly = True Then
Blattschutz
Else
BlattschutzAufheben
End If
Application.DisplayAlerts = True
End Sub
Sorry, für die Dummen fragen, habe nur bischen Ahnung über VBA.
Was macht der Code jetzt?
Ich möchte ja nur, dass meine Masterdatei mir ausspuckt, ob die Werte in den Dateien, die schreibgeschützt sind, aktuell oder nicht aktuell sind. Sprich: wenn jemand in der schreibgeschützten Datei was reinschreibt und ich in diesem Moment meine Masterdatei ausführe, soll er mir zeigen, dass die Werte aus dieser Datei nicht aktuell sind.
Hoffe, es ist etwa verständlicher für dich )
Für mich allerdings überhaupt kein Plan wie ich vorgehen soll xD
Danke für deine Hilfsbereitschaft!
Freundliche Grüße
Alex

Anzeige
AW: Bei Fehler Anweisung durchführen
24.03.2021 11:57:46
Daniel
Jetzt wird das Makro "Blattschutz" ausgeführt, wenn die Datei mit Überschreibschutz geöffnet wurde, weil sie Zeitgleich von jemand anderem geöffnet ist,
und das Makro "Blattschutzafheben" wird ausgeführt, wenn die Datei normal (ohne Überschreibschutz) geöffnet wurde.
Gruß Daniel

AW: Bei Fehler Anweisung durchführen
23.03.2021 14:16:41
Daniel
Hi
bei On Error Resume Next bekommst du auch keine Fehlerrückmeldung.
nach diesem Befehl wird bei einem Fehler einfach mit dem nächsten Programmschritt weiter gemacht.
lediglich die SystemVariable ERR wird bei einem Fehler mit der Fehlernummer befüllt (ohne Fehler 0)
das könnte man ggf abfragen.
Aber in der Regel ist On Error Resume Next nicht geeignet für generelle Fehlerbehandlungen.
das setzt man eher gezielt an bestimmten Stellen ein, wenn man genau weiß, was und warum ein Fehler passieren kann, man aber zu faul ist, eine Saubere Abfrage zu programmieren.
bspw du willst ein bestimmtes Blatt löschen. Es kann aber sein, dass dieses Blatt nicht vorhanden ist, dann würde ein Löschversuch einen Fehler verursachen.
Statt aufwendig abzufragen, ob das blatt vorhanden ist, löscht man es dann einfach mit
on error resume Next
Sheets("xxx").Delete
On error goto 0

aber wie gesagt, das sind so sonderfälle, die vorherige Abfrage ob der Fehler auftreten kann ist natürlich immer die saubere Lösung.
Beschreib mal genauer, was du vor hast, bzw wo und warum der Fehler auftreten kann und was dann passieren soll.
Gruß Daniel

Anzeige
AW: Bei Fehler Anweisung durchführen
25.03.2021 09:53:01
Alexandro
Hallo,
Danke für die Mühe!
habe was neues ausprobiert, aber es funkt trotzdem nicht. Fett markiert ist das Neue, was ich reingefügt habe, ich wollte blöß, dass der Code mir die geöffneten Dateien auspuckt, macht aber so, als ob alle Dateien im Verzeichnis aufgemacht sind...
vlt. könntest du mir damit weiterhelfen...
Freue mich über jede Hilfe!
Freundliche Grüße
Alex
Option Explicit
Sub Makro() 'Automatisierung der PSP Elemente, aktuell, nicht aktuell, keine Verknüpfung
'Neues Excel Objekt
Dim objExcel        As New Excel.Application
'Sheet Objekt der jeweiligen Exceldatei
Dim objSheet        As Object
'Hilfsvariablen
Dim iRow            As Integer
Dim strDateipfad    As String
Dim strPfad         As String
Dim strDateiname    As String
'Pfad in welchem sich die Dateien der zu
'kopierenden Zellen sich befinden auswählen
strPfad = "G:\TEAM\KKI\TU\TUE\Zusammenarbeit\Alex\PSP Elemente\"
'Schleife welche den Zelleninhalt aller aufgelisteten
'Dateien in mehrere Zellen des Hauptprogramms schreibt
For iRow = 4 To Cells(Rows.Count, 4).End(xlUp).Row
'Überprüfen, ob in Spalte "Dateiname" ein solcher eingetragen ist.
'(der Arbeitsvorgang wird fortgesetzt)
If Cells(iRow, 2) = "" Then 'Wenn Zelle in Spalte B Leer dann Exit
Exit Sub
Else
strDateiname = Cells(iRow, 2)
strDateipfad = strPfad & strDateiname & ".xlsm"
'Überprüfen, ob die in der Tabelle angegebene Datei vorhanden ist.
'(der Arbeitsvorgang wird fotzgesetzt
If Dir(strDateipfad) = "" Then
Else
objExcel.Workbooks.Open strDateipfad
Set objSheet = objExcel.Sheets("Schnittstelle")
Cells(iRow, 7) = objSheet.Cells(26, 2) ' Cells(Durchsuchte Spalte der Namen,  _
Spaltenindex) = objSheets.cells(Zeile,Spalte)
Cells(iRow, 8) = objSheet.Cells(27, 2)  ' (7 to 27) / (26 to 46)
Cells(iRow, 9) = objSheet.Cells(28, 2)
Cells(iRow, 10) = objSheet.Cells(29, 2)
Cells(iRow, 11) = objSheet.Cells(30, 2)
Cells(iRow, 12) = objSheet.Cells(31, 2)
Cells(iRow, 13) = objSheet.Cells(32, 2)
Cells(iRow, 14) = objSheet.Cells(33, 2)
Cells(iRow, 15) = objSheet.Cells(34, 2)
Cells(iRow, 16) = objSheet.Cells(35, 2)
Cells(iRow, 17) = objSheet.Cells(36, 2)
Cells(iRow, 18) = objSheet.Cells(37, 2)
Cells(iRow, 19) = objSheet.Cells(38, 2)
Cells(iRow, 20) = objSheet.Cells(39, 2)
Cells(iRow, 21) = objSheet.Cells(40, 2)
Cells(iRow, 22) = objSheet.Cells(41, 2)
Cells(iRow, 23) = objSheet.Cells(42, 2)
Cells(iRow, 24) = objSheet.Cells(43, 2)
Cells(iRow, 25) = objSheet.Cells(44, 2)
Cells(iRow, 26) = objSheet.Cells(45, 2)
Cells(iRow, 27) = objSheet.Cells(46, 2)
End If
          On Error Resume Next
If Workbooks.Open(strDateiname & ".xlsm") Then
Cells(iRow, 3) = "nicht aktuell"
Else
Cells(iRow, 3) = ""
End If
On Error GoTo 0
End If
Next iRow
End Sub


Anzeige
AW: Bei Fehler Anweisung durchführen
25.03.2021 10:05:36
Daniel
Das hatten wir doch schon geklärt.
Weil das kein Fehler ist sondern eine Rückfrage, hat ein "On Error" keine Wirkung.
Außerdem solltest du beim Programmieren ein bisschen mitdenken und dir überlegen, was bewirkt welcher Befehl und in welcher Reihenfolge müssen diese angeordnet werden.
Mit einfach nur gefundene Codeschnipsel untereinander kopieren funktioniert das nicht.
Gruß Daniel

AW: Bei Fehler Anweisung durchführen
25.03.2021 10:44:40
Alexandro
Hallo Daniel,
Danke für deinen Beitrag. Sorry, ich bin leider kein Excel-Spezialist, und versuche einfach das Beste zu machen.
Ich sehe in der Sache, das man sich die Codeschnipselei als Normalbürger macht, absolut keine Schande. Das man nicht so gut die Programmiersprachen beherrscht und bescheiden VBA kann ist auch keine Sünde.
WorldWideWEb ist ja dafür da, die Infos zu holen/geben und miteinander zu kommunizieren.
Grüße
Alex

AW: Bei Fehler Anweisung durchführen
25.03.2021 15:46:38
Daniel
das sollte einen nicht davon abhalten, zu verstehen was man da macht.
vor allem weil wir das ja schon geklärt hatten.
bei kostenloser Hilfe ist halt auch immer ein bisschen Eigeninitiative gefordert und das Bemühen darum, die Sache zu verstehen.
(zumindest ticken ich und die meisten anderen Antworter hier im Forum so)
Gruß Daniel

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige