Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA: Bereiche löschen in externer Mappe

VBA: Bereiche löschen in externer Mappe
23.01.2015 09:34:06
Dieter(Drummer
Guten Morgen, VBA Spezialisten,
Im folgenden Makro wird eine anderes Worbook aufgerufen und in 30 Sheets sollen bestimmte, nicht zusammnen hängende Bereiche gelöscht werden (Makro: Stueck_Marker", die keine Formel enthalten. Das funktioniert bis Sheet "VeraV03" perfekt. Ab dem Sheet "VeraV04" geht es nicht mehr und das Makro ist beendet mit dem Fehlerhinweis:
"Laufzeitfehler '9':, Index außerhalb des gültigen Bereichs. Mit Button "Debuggen" aktiviert".
Was ist falsch an dem Makro?
  • Option Explicit
    'Teile übernommen, aus Makro: Herber's Forum, von Erich G., 02.10.2012 21:05:02
    'Werte im Bereich löschen, OHNE Formeln zu löschen
    Sub Stueckloeschen_MG()
    Workbooks.Open Filename:="C:\Mx\Mg-2016.xlsm"
    Sheets("VeraBsV01").Activate 'Tab aktivieren
    With Application
    .ScreenUpdating = False
    .Calculation = xlCalculationManual
    End With
    Dim raZelle As Range 'Nur 1x angeben, am Anfang des Makros
    Call Stueck_Marker 'Aufruf für Markierungsbereich
    Sheets("VeraV02").Activate
    Call Stueck_Marker  'Aktivierung der Stück-Zellen im Tab
    Sheets("VeraV03").Activate
    Call Stueck_Marker
       Sheets("VeraV04").Activate 'Ab hier passiert nicht mehr
    Call Stueck_Marker
    Sheets("VeraV05").Activate
    Call Stueck_Marker
    Sheets("VeraV06").Activate
    Call Stueck_Marker
    Sheets("VeraV07").Activate
    Call Stueck_Marker
    Sheets("VeraV08").Activate
    Call Stueck_Marker
    Sheets("VeraV09").Activate
    Call Stueck_Marker
    Sheets("VeraV10").Activate
    Call Stueck_Marker
    Sheets("VeraV11").Activate
    Call Stueck_Marker
    Sheets("VeraV12").Activate
    Call Stueck_Marker
    Sheets("VeraV13").Activate
    Call Stueck_Marker
    Sheets("VeraV14").Activate
    Call Stueck_Marker
    Sheets("VeraV15").Activate
    Call Stueck_Marker
    Sheets("VeraV16").Activate
    Call Stueck_Marker
    Sheets("VeraV17").Activate
    Call Stueck_Marker
    Sheets("VeraV18").Activate
    Call Stueck_Marker
    Sheets("VeraV19").Activate
    Call Stueck_Marker
    Sheets("VeraV20").Activate
    Call Stueck_Marker
    Sheets("VeraV21").Activate
    Call Stueck_Marker
    Sheets("VeraV22").Activate
    Call Stueck_Marker
    Sheets("VeraV23").Activate
    Call Stueck_Marker
    Sheets("VeraV24").Activate
    Call Stueck_Marker
    Sheets("VeraV25").Activate
    Call Stueck_Marker
    Sheets("VeraV26").Activate
    Call Stueck_Marker
    Sheets("VeraV27").Activate
    Call Stueck_Marker
    Sheets("VeraV28").Activate
    Call Stueck_Marker
    Sheets("VeraV29").Activate
    Call Stueck_Marker
    Sheets("VeraV30").Activate
    Call Stueck_Marker
    With Application
    .ScreenUpdating = True
    .Calculation = xlCalculationAutomatic
    End With
    End Sub
    

    '
    
    Sub Stueck_Marker
    () Dim raZelle As Range 'Löschbereich For Each raZelle In ActiveSheet.Range _ ("B16:L45,B49:L77,B81:L111,B115:L144,B148:L178,B182:L211,B215:L245," _ & "B249:L279,B283:L312,B316:L346,350:379,B383:L413") If Not (IsEmpty(raZelle) Or raZelle.HasFormula) Then If raZelle.MergeCells Then If raZelle.Address = raZelle.MergeArea(1).Address Then _ raZelle.MergeArea.ClearContents Else raZelle.ClearContents End If End If Next raZelle Range("A2").Select 'Markierung aufheben End Sub

  • Mit der Bitte um Hilfe.
    Gruß,
    Dieter(Drummer)

    22
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Datum
    Anwender
    Anzeige
    AW: VBA: Bereiche löschen in externer Mappe
    23.01.2015 10:09:39
    hary
    Moin Dieter
    Ohne gross zu testen was "Stueck_Marker" wirklich macht.
    Evtl. brauchst du kein Activate.
    Mal so aus Jux und Doleranz geschrieben.
    Sub Aufruf()
    Dim wks As Worksheet
    For Each wks In ActiveWorkbook.Worksheets
    If wks.Name Like "VeraV*" Then
    Select Case Right(wks.Name, 2) * 1
    Case 1 To 30
    Stueck_Marker wks.Name 'uebergabe des Blattnamens an das Makro
    End Select
    End If
    Next
    End Sub
    Sub Stueck_Marker(wksName As String)
    '--- als Bsp.
    Worksheets(wksName).Range("A1:C10").Interior.Color = vbRed
    End Sub
    

    gruss hary

    AW: Danke Hary, Ich habs getetstet, aber
    23.01.2015 11:56:44
    Dieter(Drummer)
    in deinem Makro fehlt, das das erste Sheet für die Löschungen "VerBsV01" heißt und die Folge Sheets "VeraV01" bis "VeraV30" sind. Im folgenden Makro, jetzt von mir angepasst, bleibt das Makro "Stueck_Marker2" hier hängen: "Worksheets(wksName).Range".
    Freue mich, wenn Du das noch hin bekommst.
    'von Hary, 23.01.2016
    'Test2
    Sub Aufruf()
    Dim wks As Worksheet
    
  • Workbooks.Open Filename:="C:\Mx\Mx-RabVeraMg-2016.xlsm" Sheets("VeraBsV01").Activate 'Tab aktivieren For Each wks In ActiveWorkbook.Worksheets If wks.Name Like "VeraV*" Then Select Case Right(wks.Name, 2) * 1 Case 1 To 30 Stueck_Marker2 wks.Name 'uebergabe des Blattnamens an das Makro End Select End If Next End Sub

  • 'Hary
    Sub Stueck_Marker2(wksName As String)
    '--- als Bsp.
    Worksheets(wksName).Range
    For Each raZelle In ActiveSheet.Range _
    ("B16:L45,B49:L77,B81:L111,B115:L144,B148:L178,B182:L211,B215:L245," _
    & "B249:L279,B283:L312,B316:L346,350:379,B383:L413")
    If Not (IsEmpty(raZelle) Or raZelle.HasFormula) Then
    If raZelle.MergeCells Then
    If raZelle.Address = raZelle.MergeArea(1).Address Then _
    raZelle.MergeArea.ClearContents
    Else
    raZelle.ClearContents
    End If
    End If
    Next raZelle
    End Sub
    

    Anzeige
    AW: Danke Hary, Ich habs getetstet, aber
    23.01.2015 12:13:24
    hary
    Moin Dieter
    Bist du im Einzelschritt mal durchgegangen was in, Worksheets(wksName).Range, wksname enthaelt?
    evtl. so
    Sub Stueck_Marker2(wksName As String)
    '--- als Bsp.
    For Each raZelle In Worksheets(wksName).Range _
    usw.
    

    Ohne Nachbau der zu oeffnenden Mappe kann ich es nicht testen.
    gruss hary

    AW: Hary, 2 Testdateien
    23.01.2015 13:04:42
    Dieter(Drummer)
    Hier sind mal 2 Testdateien (ZIP), mit Daten (löschen NUR die Stückzahlen) aber mit deinem von mir angepassten Makro. Ich habe die Sheets "VeraBsV01", "VeraV01" bis "VeraV05" (Originaldatei geht bis "VeraV30")drin gelassen, da sonst die Datei zu groß für den Herber Server ist.
    Danke für deine weiter Hilfe.
    Gruß,
    Dieter(Drummer)
    https://www.herber.de/bbs/user/95203.zip

    Anzeige
    AW: Hary, 2 Testdateien
    23.01.2015 13:06:52
    hary
    Moin
    Komme aber erst Morgenfrueh dazu.
    Bin gerade am Rinderfond kochen.
    gruss hary

    AW: Hary, Kein Problem ...
    23.01.2015 13:16:17
    Dieter(Drummer)
    Freue mich auf deine Rückmweldung.
    Gruß,
    Dieter(Drummer)

    AW: Teste nu mal
    24.01.2015 06:50:57
    hary
    Moin Dieter
    Auf dein Bsp. bezogen geht das so. Pfad anpassen.
    Sub Aufruf()
    Dim wks As Worksheet
    Workbooks.Open Filename:="C:\a\dieter\TestMappe1.xlsx" '--Pfad anpassen
    For Each wks In ActiveWorkbook.Worksheets
    If wks.Name Like "VeraV*" Or wks.Name = "VeraBsV01" Then
    Select Case CLng(Right(wks.Name, 2))
    Case 1 To 30
    Stueck_Marker2 wks.Name 'uebergabe des Blattnamens an das Makro
    End Select
    End If
    Next
    End Sub
    Sub Stueck_Marker2(wksName As String)
    Dim raZelle As Range
    Dim Bereich As Range
    '--- als Bsp.
    Set Bereich = Worksheets(wksName).Range _
    ("B16:L45,B49:L77,B81:L111,B115:L144,B148:L178,B182:L211,B215:L245," _
    & "B249:L279,B283:L312,B316:L346,350:379,B383:L413")
    Bereich.SpecialCells(xlCellTypeConstants).ClearContents
    End Sub
    

    gruss hary

    Anzeige
    AW: Danke Hary, ich teste und melde mich
    24.01.2015 09:36:35
    Dieter(Drummer)
    Moin Hary,
    erstmal Danke für Deine Hilfe.
    Ich teste es und melde mich später, da ich erstmal Schnee wegschaufeln muss:-).
    Bis später und Gruß,
    Dieter(Drummer)

    AW: Habs getestet und ein Fehler ...
    24.01.2015 13:19:14
    Dieter(Drummer)
    Danke Hary für Hilfe.
    Es wird ein Felerhinweis angezeigt, in der Zeile "Next raZelle" im Makro. Es kommt der Hinweis, "Next ohne For" und das Makro bleibt ohne Wirkung. Sonst taucht bisher kein weiterer Fehler auf.
  • 
    Sub Stueck_Marker2(wksName As String)
    Dim raZelle As Range
    Dim Bereich As Range
    '--- als Bsp.
    Set Bereich = Worksheets(wksName).Range _
    ("B16:L45,B49:L77,B81:L111,B115:L144,B148:L178,B182:L211,B215:L245," _
    & "B249:L279,B283:L312,B316:L346,350:379,B383:L413")
    If Not (IsEmpty(raZelle) Or raZelle.HasFormula) Then
    If raZelle.MergeCells Then
    If raZelle.Address = raZelle.MergeArea(1).Address Then _
    raZelle.MergeArea.ClearContents
    Else
    raZelle.ClearContents
    End If
    End If
    Next raZelle
    End Sub
    

  • Gruß,
    Dieter(Drummer)

    Anzeige
    AW: Habs getestet und ein Fehler ...
    24.01.2015 13:26:14
    hary
    Moin
    Da hast du die Codes aber gemischt. Bei dem von mir geposten Code ist raZelle ueberfluessig(hab ich nicht geloescht)
    Mit "set Bereich" schnapp ich den Bereich in einem Rutsch und mit Bereich.SpecialCells(xlCellTypeConstants).ClearContents
    werden nur die Werte geloescht, in Zellen ohne Formeln. So hab ich deinen Code verstanden.
    Wozu "MergeCells" du drin stehen hast weiss ich nicht, in der Bsp.-Mappe sind keine verbunden Zellen.
    gruss hary

    AW: Habs getestet und ein Fehler ...
    24.01.2015 13:36:04
    Gerd
    Hallo Dieter,
    so könnte es laufen. Ob es so Sinn macht, ist eine andere Frage.
    Sub Stueck_Marker2(wksName As String)
    Dim raZelle As Range
    Dim Bereich As Range
    '--- als Bsp.
    Set Bereich = Worksheets(wksName).Range _
    ("B16:L45,B49:L77,B81:L111,B115:L144,B148:L178,B182:L211,B215:L245," _
    & "B249:L279,B283:L312,B316:L346,350:379,B383:L413")
    For Each raZelle In Bereich
    If Not (IsEmpty(raZelle) Or raZelle.HasFormula) Then
    If raZelle.MergeCells Then
    If raZelle.Address = raZelle.MergeArea(1).Address Then _
    raZelle.MergeArea.ClearContents
    Else
    raZelle.ClearContents
    End If
    End If
    Next raZelle
    End Sub
    
    Gruß Gerd

    Anzeige
    AW: Danke Gerd ...
    24.01.2015 13:38:22
    Dieter(Drummer)
    für Deine Hilfe. Es funktioniert jetzt.
    Gruß und ein schönes Wochenende,
    Dieter(Drummer)

    AW: Danke Hary!
    24.01.2015 13:36:21
    Dieter(Drummer)
    Es läuft jetzt perfekt! Ganz herzlichen Dank für Deine Hilfe.
    Wünsche Dir ein schönes Wochenende und werde mich bemühen, das Forum nicht so sehr zu strapazieren ;-).
    Gruß, Deter(Drummer)

    AW: Danke Hary!
    24.01.2015 13:43:44
    hary
    Moin Dieter
    "das Forum nicht so sehr zu strapazieren ;-)."
    Dann geh Schneeschippen. ;-))
    Welchen Code nutz du jetzt?
    Bei deinem (Zelle fuer Zelle) roedelt mein Com ziemlich lange.
    gruss hary

    AW: Hary, Du hattest Recht ...
    24.01.2015 13:52:09
    Dieter(Drummer)
    Dein Code läuft prima! Ich habe es gerade nochmal getestet und er läuft ohne Fehler.
    Ich werde natürlich das excellente Forum weiter "nerven" ;-).
    Nochmal herzlichen Dank und
    Gruß,
    Dieter(Drummer)
    Diesen Code von Dir nutze ich jetzt:
    Hary 24.1.2015
    Sub Aufruf()
    Dim wks As Worksheet
    Workbooks.Open Filename:="C:\a\dieter\TestMappe1.xlsx" '--Pfad anpassen
    For Each wks In ActiveWorkbook.Worksheets
    If wks.Name Like "VeraV*" Or wks.Name = "VeraBsV01" Then
    Select Case CLng(Right(wks.Name, 2))
    Case 1 To 30
    Stueck_Marker2 wks.Name 'uebergabe des Blattnamens an das Makro
    End Select
    End If
    Next
    End Sub
    

    
    Sub Stueck_Marker2(wksName As String)
    Dim raZelle As Range
    Dim Bereich As Range
    '--- als Bsp.
    Set Bereich = Worksheets(wksName).Range _
    ("B16:L45,B49:L77,B81:L111,B115:L144,B148:L178,B182:L211,B215:L245," _
    & "B249:L279,B283:L312,B316:L346,350:379,B383:L413")
    Bereich.SpecialCells(xlCellTypeConstants).ClearContents
    End Sub
    

    Anzeige
    AW: Hary, Dein Makro ist blitzschnell
    24.01.2015 14:07:47
    Dieter(Drummer)
    Ich bin einfach nur begeistert!
    Noch ein schönes Wochenende und Danke.
    Gruß,
    Dieter(Drummer)

    ..ich habs geahnt......
    23.01.2015 14:00:39
    robert
    ...........

    AW: ..ich habs geahnt......
    23.01.2015 14:38:52
    hary
    Moin Robert
    Bitte kein Rentnerkrieg am Gartenzaun. ;-))) LOL
    Ich sehe dass, fuer mich, als Uebung in VBA.
    Ohne Fragen , wuesste ich nicht woran ich ueben sollte.
    Daher loese ich auch einfache Fragen,jetzt schon ohne testen aus dem Kopf.
    Gib mir eine Chance.
    Gruss hary

    Was, Hary, ohne Fragen keine Ideen? Da ...
    23.01.2015 21:04:10
    Luc:-?
    …gibt's doch so viel, was einem so einfallen kann… ;-]
    Gruß + schöWE euch allen, Luc :-?
    Besser informiert mit …

    Anzeige
    @hary
    23.01.2015 21:28:22
    robert
    Hi,
    das bezog sich nicht auf Deine Antwort, sondern auf das Mammutprojekt vom "Drummer",
    welches anscheinend nie fertig wird und meiner persönlichen Meinung schon
    weit über eine "Hilfestellung" hinausgeht.Schau dir mal einige Beiträge von Dieter an :-]
    Ich hoffe, es herrscht hier Meinungsfreiheit.
    Gruß
    robert

    AW: @robert @ Luc
    24.01.2015 05:54:51
    hary
    Moin ihr beide
    Robert, ich versteh dich schon. War ja auch mit ;-)
    Luc, dat is wie zu Hause. Wie man den Staubsauger fuer mein Auto nutzt weiss ich, aber fuer die Nutzung in der Wohnung brauch ich immer die Frage meiner Frau: Wozu ist das Ding da und was kann man damit machen.
    Nu is aber gut. ;-))
    gruss hary

    Anzeige
    AW: @Robert
    24.01.2015 09:40:48
    Dieter(Drummer)
    Guten Morgen,
    ist es wirklich notwendig, dass Sie, Robert, so destruktive Anmerkungen in einem so qualifizierten Forum verbreiten müssen? Dies ist doch ein Forum, in dem man Fragen kann und wer Hilfe geben kann und will, meldet sich. Wer nicht helfen kann oder nicht will, hält sich eben zurück. Jeder Leser des Forums kann ja auch aus den Fragen und Antworten einen für sich interessanten Teil evtl. gebrauchen. Auch das ist Hilfe für Leser und Helfer.
    Leider reicht meine PC Leistung nicht aus, um das Wort „Destruktiv“ in 30 Sheets einzufügen und dann in allen 30 Sheets dieses in „Konstruktiv“ zu ändern! Aber selbst wenn es ginge, wie soll ich dann per Makro dieses negative Wort in ein positives Wort ändern? Sie wissen, durch ihr mitlesen meiner Fragen, dass ich mit VBA Schleifen nicht weiter komme. Ich bemühe mich, es zu verstehen, aber das ist eben nicht so einfach!
    Ich bin aber sicher, dass man „Destruktiv“ in „Konstruktiv“ ändern kann!
    In diesem Sinne, einen guten und konstruktiven Tag.
    Gruß, Dieter(Drummer)
    Anzeige

    307 Forumthreads zu ähnlichen Themen

    Anzeige
    Anzeige
    Anzeige
    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige