Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

VBA: Wenn eine von 10 Zellen leer, dann sub aufrufen
#1
Ich bin noch relativ neu in vba und finde irgendwie keine Antwort auf meine Frage.

Ich habe ein Steuerelement in einer Tabelle, die alle Datumswerte in festgelegten Zellen um einen Tag verringert. 

Das spuckt (verständlicherweise) einen Fehler aus, wenn eine der Zellen leer ist. "leer" -1 geht halt nicht. Daher würde ich gern, dass am Anfang der Sub geprüft wird, ob eine der Zellen leer ist. Wenn ja, soll die Sub aufgerufen werden, die in die festen Zellen das heutige Datum einfügt.

Wie muss dann die If Bedingung aussehen?

Gibt es dafür elegantere Lösungen?
Antworten Top
#2
Hi

A1 bis A10 ist teils leer.
Teste mal das.
Code:
On Error Resume Next
Range("A1:A10").SpecialCells(xlCellTypeBlanks).Value = Date

'weiter dein Code
'?????
Gruß Elex
Antworten Top
#3
@Elex: Danke für deine Antwort! Ich sehe, dass Sie gut gemeint war. Sie hilft mir aber leider nicht weiter.
 
Wie ich sagte: "...bin noch relativ neu in vba...".

Trotzdem, beziehungsweise genau deswegen, möchte ich keinen Code verwenden, den ich teilweise nicht verstehe. 

Code:
On Error Resume Next
Range("A1:A10").SpecialCells(xlCellTypeBlanks).Value = Date

Was genau macht "On Error Resume Next"? Alle Fehler Abfangen?

Ich möchte ja nicht alle Fehler abfangen, sondern nur den einen, wenn eine Zelle leer ist. 

Sonst sehe ich die Gefahr, dass andere Fehler falsch abgefangen werden an der Stelle. Bedeutet: schlechter Code.

Code:
Range("A1:A10")

Da wird ein Bereich Überprüft? Ich erlaube es mir wieder mich selbst zu Zitieren: "...festgelegten Zellen...". Ich sprach nie von einem Bereich.

Code:
SpecialCells(xlCellTypeBlanks).Value = Date

Ist "SpecialCells" ein Excel eigener Befehl? Wenn ja, was macht der?

"=Date" weist der Zelle Date zu? Wenn ja: Das möchte ich nicht, sondern: (wieder Zitiere ich meinen ersten Beitrag)

"...soll die Sub aufgerufen werden, die in die festen Zellen das heutige Datum einfügt."

Aus dem Satz geht hervor, dass ich Bereits eine Sub habe, die das mit dem heutigen Datum macht.


Ich möchte nicht Code schreiben, der so kurz wie möglich ist, sondern Code der sehr leicht von einem Excel Anfänger verstanden werden kann. Deswegen ja Excel. Code der wenig Kommentare braucht, weil er selber spricht. 

Ich denke ich werde eine eigene Sub schreiben, die jede Zelle einzeln prüft und mir dann das passende Ergebnis zurück gibt. Ist meiner Meinung nach das Nachhaltigste an der Stelle.
Ich bitte um problemorientierte Antworten. Nicht lö·sungs·ori·en·tiert.
Antworten Top
#4
Moin,

hast du dir schon die Onlinehilfe zu den von dir angesprochenen Fragestellungen angesehen? Die sind eigentlich Recht aussagekräftig.

Nur zur Ergänzung, ich würde immer auf On Error Resume Next verzichten. Das unterdrückt die Fehlerbehandlung. Besser ist es, sich über mögliche Fehler im klaren zu sein und diese zu beseitigen. 

Im konkreten Fall kann es Vorkommen, dass es keine leeren Zellen im Bereich gibt. .SpecialCells gibt dir dann nothing zurück und der Versuch, auf die .Value- Eigenschaft zuzugreifen erzeugt einen Fehler. Statt diesen zu unterdrücken wäre es besser vorher auf Nothing zu prüfen.

Zusätzlich sei hier noch angemerkt, das xlCelltypeBlanks keine Zellen beinhaltet, die nicht in der UsedRange liegen, auch wenn explizit ein größerer Bereich angegeben wurde.

Viele Grüße
derHöpp
Antworten Top
#5
Zitat:Im konkreten Fall kann es Vorkommen, dass es keine leeren Zellen im Bereich gibt. .SpecialCells gibt dir dann nothing zurück und der Versuch, auf die .Value- Eigenschaft zuzugreifen erzeugt einen Fehler. Statt diesen zu unterdrücken wäre es besser vorher auf Nothing zu prüfen.
Das sieht nicht so aus, das muss man wohl "klammern" und dann kann man auf Nothing prüfen
Code:
On Error Resume Next
Set rng = rngStart.SpecialCells(xlCellTypeBlanks)
On Error Goto 0
Antworten Top
#6
Zitat:hast du dir schon die Onlinehilfe zu den von dir angesprochenen Fragestellungen angesehen?

Welche meinst du denn?
Ich bitte um problemorientierte Antworten. Nicht lö·sungs·ori·en·tiert.
Antworten Top
#7
Hi,

z.B.:

Zitat:Was genau macht "On Error Resume Next"? Alle Fehler Abfangen?
s.a. Antwort:

Zitat:Nur zur Ergänzung, ich würde immer auf On Error Resume Next verzichten.


das hier:


Zitat:Da wird ein Bereich Überprüft? Ich erlaube es mir wieder mich selbst zu Zitieren: "...festgelegten Zellen...".

auch bei beschränkten Kenntnissen wird es Dir wohl möglich sein, das anzupassen!

Zitat:Ist "SpecialCells" ein Excel eigener Befehl? Wenn ja, was macht der?
"=Date" weist der Zelle Date zu?


--> Online Hilfe!


Zitat:Aus dem Satz geht hervor, dass ich Bereits eine Sub habe, die das mit dem heutigen Datum macht.


Dann zeige die doch mal, damit man hier nicht ständig raten muß!
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top
#8
Code:
Sub DatumErhöhen()
Dim r As Long  'Variable für Zeilennummer
For r = 1 To 10 'Zeile 1 bis 10 durchlaufen
    If IsDate(Cells(r, 1)) Then Cells(r, 1) = Cells(r, 1) + 1 'wenn in Zelle(Zeile, Spalte(1)) ein Datum steht, erhöhe das um 1 Tag
Next r  'weiter
End Sub

Das ist die oldscool-Lösung. Ich glaube aber, die verstehst Du besser. Kannst sie in deinem Makro aufrufen mit "Call DatumErhöhen"

Viel Erfolg!
Antworten Top
#9
Hi 

Zitat:Da wird ein Bereich Überprüft? Ich erlaube es mir wieder mich selbst zu Zitieren: "...festgelegten Zellen...". Ich sprach nie von einem Bereich.
Richtig du sprichst von igendwo. Da hab ich mir was ausgesucht. 21 

Gib deine Zellen einfach so an. Du brauchst da keine extra Sub.
Code:
On Error Resume Next   'Fehler ignorieren an
Range("A8,B11,C4,D7").SpecialCells(xlCellTypeBlanks).Value = Date  'alle die leer sind bekommen Datum Heute
On Error GoTo 0       'Fehler ignorieren aus

'weiter dein Code
'?????

Gruß Elex
Antworten Top
#10
@BoskoBiati:
 
Zitat:--> Online Hilfe!

Deswegen bin ich ja hier. Das ist  doch ein Online-Hilfe-Forum für Excel!? Oder habe ich da was falsch verstanden? Keine*r ist hier gezwungen auf meine Fragen zu Antworten. 

Aber sinngemäß zu Antworten: "Google selber du Noob!" ist alles andere als höflich und hilfreich.

Zitat:Dann zeige die doch mal, damit man hier nicht ständig raten muß!

Mit der habe ich ja kein Problem. Warum soll ich die dann Zeigen? Meine Frage ist ja eine andere. Oder willst du Sie sehen damit du dich über meinen Code lustig machen kannst? 

Zitat:auch bei beschränkten Kenntnissen wird es Dir wohl möglich sein, das anzupassen!

Auch mit deinem beschränkten Verständnis meiner Frage wird es Dir wohl möglich sein, mir zu zeigen wie du das machen würdest. Wenn du es mir nicht zeigen willst, dann Antworte einfach nicht!

@Elvis:

Vielen Dank für deine Antwort!

Allerdings passt deine Antwort leider nicht zu meinem Ziel. Ich will, dass die Zelle gefüllt wird wenn sie leer ist. Nicht nur die Zellen um einen Tag verringern wenn ein Datum drin steht.

Zitat:Ich möchte nicht Code schreiben, der so kurz wie möglich ist, sondern Code der sehr leicht von einem Excel Anfänger verstanden werden kann. Deswegen ja Excel.

Das bedeutet, keine Schleifen und keine Variablen deren Namen nicht selber sprechen.
Ich bitte um problemorientierte Antworten. Nicht lö·sungs·ori·en·tiert.
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste