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

Makro nur ausführen wenn bestimmte Zellen ausgefül

Forumthread: Makro nur ausführen wenn bestimmte Zellen ausgefül

Makro nur ausführen wenn bestimmte Zellen ausgefül
30.05.2018 14:15:52
arek
Hallo zusammen,
ich habe folgendes Makro bzw. Button, welches mir eine Kopie vom Reiter "F1" eines Excelsheets erstellt und diesen in einem Ordner abspeichert...Desweiteren werden bestimmte Excelzellen in eine Datei auf dem Desktop übertragen.
Jetzt möchte ich aber noch folgendes erreichen:
Wenn der Button gedrückt wird, soll erstmal überprüft werden, ob in den Zellen EK6,ES6,EK8 und ES8 Zahlenwerte vorhanden sind. Wenn dies nicht der Fall ist, soll das oben beschriebene Makro nicht ausgeführt werden und stattdessen eine Fehlermeldung kommen, die den Inhalt hat, dass diese Zellen ausgefüllt werden müssen.
Könnt ihr mir hier weiterhelfen? Hier noch mein Makro:
Option Explicit
' Button drücken und Excelsheet erstellen
Private Sub CommandButton1_Click()
CommandButton1.BackColor = RGB(255, 135, 0)
Dim sWBName As String
Dim SubPathName As String
Dim NewWBName As String
Dim sh As Shape, lX As Long
GetMoreSpeed True
SubPathName = "\" & Format(Cells(1, 1), "MMMM YYYY") & "\"
NewWBName = Me.Name & "_" & Cells(1, 1).Text & ".xlsx"
UsedRange.Copy
MakeSureDirectoryPathExists (ThisWorkbook.Path & SubPathName)
Workbooks.Add
With ActiveWorkbook
With .Worksheets(1)
.Name = Me.Name
.Cells(1, 1).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
.Cells(1, 1).PasteSpecial Paste:=xlPasteFormats
.Cells(1, 1).PasteSpecial Paste:=xlPasteColumnWidths
' Diagramme auch übernehmen
On Error Resume Next
For Each sh In Me.Shapes
If Left(sh.Name, 6) = "Chart " Then
sh.Copy
.PasteSpecial Format:="Bild (GIF)", Link:=False, DisplayAsIcon:=False
Do While Err.Number  0
Application.Wait (Now + TimeValue("0:00:01"))
Err.Clear
.PasteSpecial Format:="Bild (GIF)", Link:=False, DisplayAsIcon:=False
Loop
lX = lX + 1
.Shapes(lX).Left = sh.Left
.Shapes(lX).Top = sh.Top
End If
Next sh
On Error GoTo 0
Application.CutCopyMode = False
.Range("IM11,IM19,IM24,IM29,IM35").Copy
Call subSaveIM11
End With '
Application.DisplayAlerts = False
Do While .Worksheets.Count > 1
.Worksheets(2).Delete
Loop
Application.DisplayAlerts = True
sWBName = ThisWorkbook.Path & SubPathName & NewWBName
.SaveAs sWBName
.Close
End With
Application.CutCopyMode = False
MsgBox "Daten gespeichert unter" & vbCrLf & _
sWBName, vbOKOnly + vbInformation
GetMoreSpeed False
End Sub

Sub subSaveIM11()
Dim wkbOverview As Workbook
Dim loLetzte As Long
Set wkbOverview = Application.Workbooks.Open(Filename:="C:\Users\arek\Desktop\Beispiel.xlsx")
With wkbOverview.Worksheets("Overview")
loLetzte = .Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0).Row
.Cells(loLetzte, 1).PasteSpecial Paste:=xlPasteValues, Transpose:=True
Application.CutCopyMode = False
wkbOverview.Close savechanges:=True
End With
End Sub
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro nur ausführen wenn
30.05.2018 14:35:45
Rudi
Hallo,
Schema:
 If WorksheetFunction.Count(Range("ek6,es6,ek8,es8")) = 4 Then
'mach dies
Else
'mach jenes
End If

Gruß
Rudi
AW: Makro nur ausführen wenn
30.05.2018 15:01:32
arek
Hi Rudi,
vielen Dank für deine Antwort! Wo muss sich das genau einsetzen in meinen Code? Könntest du mir das noch sagen? Außerdem wird in deinem Beispiel nun geprüft, ob in den Zellen der Wert 4 enthalten ist, oder? Ich möchte jedoch das ganze verallgemeinern und das oben beschriebene Makro erst dann laufen lassen, wenn hier überall Zahlenwerte eingetragen sind...
Nochmals danke!!
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Makro nur ausführen, wenn bestimmte Zellen ausgefüllt sind


Schritt-für-Schritt-Anleitung

Um sicherzustellen, dass dein Makro nur ausgeführt wird, wenn bestimmte Zellen (EK6, ES6, EK8 und ES8) Zahlenwerte enthalten, kannst du den folgenden Code in dein bestehendes Makro integrieren. Füge die Überprüfung zu Beginn deiner CommandButton1_Click-Subroutine hinzu:

Private Sub CommandButton1_Click()
    ' Überprüfen, ob die Zellen Zahlenwerte enthalten
    If WorksheetFunction.Count(Range("EK6, ES6, EK8, ES8")) = 4 Then
        ' Hier kommt der bestehende Code hin
    Else
        MsgBox "Bitte fülle die Zellen EK6, ES6, EK8 und ES8 mit Zahlen aus.", vbExclamation
        Exit Sub
    End If
    ' Der restliche Code bleibt unverändert
End Sub

Dieser Code prüft, ob genau 4 Zellen ausgefüllt sind. Falls nicht, wird eine Fehlermeldung angezeigt und das Makro wird abgebrochen.


Häufige Fehler und Lösungen

  • Fehler: Zellen sind leer, aber das Makro wird trotzdem ausgeführt.

    • Lösung: Stelle sicher, dass die Überprüfung (If WorksheetFunction.Count(...) = 4) korrekt implementiert ist. Achte darauf, dass die Zellen, die du überprüfst, richtig referenziert sind.
  • Fehler: Es wird eine Fehlermeldung angezeigt, obwohl die Zellen ausgefüllt sind.

    • Lösung: Überprüfe, ob die Zellen tatsächlich Zahlenwerte enthalten und keine Textwerte. Manchmal können Zahlen als Text eingegeben werden, was die Überprüfung beeinflusst.

Alternative Methoden

Eine alternative Methode zur Überprüfung der Zellen könnte die Verwendung von IsNumeric sein, um sicherzustellen, dass alle Zellen tatsächlich numerische Werte enthalten:

If IsNumeric(Range("EK6").Value) And IsNumeric(Range("ES6").Value) And _
   IsNumeric(Range("EK8").Value) And IsNumeric(Range("ES8").Value) Then
    ' Hier kommt dein Code
Else
    MsgBox "Bitte fülle die Zellen EK6, ES6, EK8 und ES8 mit Zahlen aus.", vbExclamation
    Exit Sub
End If

Diese Methode bietet eine präzisere Überprüfung der Zellinhalte.


Praktische Beispiele

Hier ist ein einfaches Beispiel, wie dein gesamter Code aussehen könnte, nachdem die Überprüfung integriert wurde:

Private Sub CommandButton1_Click()
    If WorksheetFunction.Count(Range("EK6, ES6, EK8, ES8")) = 4 Then
        ' Bestehender Code hier
    Else
        MsgBox "Bitte fülle die Zellen EK6, ES6, EK8 und ES8 mit Zahlen aus.", vbExclamation
        Exit Sub
    End If
    ' Weitere Aktionen...
End Sub

Dieses Beispiel zeigt, wie du die Überprüfung direkt in dein Makro integrierst, bevor die Hauptlogik ausgeführt wird.


Tipps für Profis

  • Verwende Option Explicit: Um sicherzustellen, dass alle Variablen deklariert sind. Dies hilft, Fehler im Code zu vermeiden.
  • Dokumentiere deinen Code: Füge Kommentare hinzu, um die Funktionsweise deines Makros zu erklären. Dies ist besonders hilfreich, wenn du später Änderungen vornehmen möchtest.
  • Teste dein Makro gründlich: Überprüfe verschiedene Szenarien, um sicherzustellen, dass dein Makro korrekt funktioniert, auch wenn die Zellen leer sind oder falsche Werte enthalten.

FAQ: Häufige Fragen

1. Frage: Wie kann ich das Makro anpassen, wenn ich mehr als vier Zellen überprüfen möchte?
Antwort: Du kannst die Liste der Zellen in der Count-Funktion einfach erweitern, z.B. Range("EK6, ES6, EK8, ES8, A1, B1").

2. Frage: Was passiert, wenn eine Zelle einen Fehlerwert enthält?
Antwort: Der Count-Befehl zählt nur die Zellen mit numerischen Werten. Du kannst auch IsError verwenden, um sicherzustellen, dass deine Zellen keine Fehler enthalten, bevor du die Überprüfung durchführst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige