If then makros excel

Wie kann ich in einem Excel Makro (VBA) so etwas schreiben?
wenn der Wert kleiner als 00:11 und grösser als 00:00, dann …

Ich habe so ausprobiert aber es geht nicht:

Dim i
Const spalte4 = 4
For i = Cells(Rows.Count, spalte).End(xlUp).Row To 1 Step -1
If Cells(i, spalte4).Value („00:00“) Then Cells(i, spalte4 - 2).Clear
End If
Next i

Was mache ich falsch?

Hallo tweety,

Wie kann ich in einem Excel Makro (VBA) so etwas schreiben?
wenn der Wert kleiner als 00:11 und grösser als 00:00, dann

Ich habe so ausprobiert aber es geht nicht:

mein Problem ist „aber es geht nicht“ ist mir viel zu vieldeutig, ich hab da schon alles erlebt.

Beschreib bitte genauer was geschieht, bzw. nicht geschieht.

Wenn ein eine Fehlermeldung kommt dann sage welche Nummer und was sie besagt und in welcher Codezeile.

Eine Fehlermeldung könnte ich mir anhand des Codes vorstellen, denn Spalte 0 gibt es nicht.

Und bitte, poste komplett selbst laufenden Code (auch wenn er wegen irgendwas nicht in Ordnung ist).

D.h., ich, wir sehen welche Werte welche Variablen haben, was bedeutet globale Variablen mußt du für den Democode im Code festlegen.

Somit können wir deinen Code anlysieren.

Jetzt kommt noch, wenn der Code in Ordnung sein sollte liegt es evtl. an deinen Daten, die haben wir nicht.

Also schick die Mappe mit rapidshare ( FAQ:2606 ) hoch oder wegen datenschutz, eine Beispielmappe wo dein Makro auch nicht läuft, wichtig ist der Fehler bleibt erhalten.

Gruß
Reinhard

Hallo Reinhard

Ich habe die Tabelle mit dem Code hochgeladen im
http://www.file-upload.net/download-2485563/Login_lo…

Der Teil des Codes, der nicht funktioniert ist auskommentiert (grün geschrieben) und ist am Ende des Codes.

Ich habe die Name der Mitarbeiter geändert im MA oder Agent.

Danke

LG Tweety

Hallo tweety,

Ich habe die Tabelle mit dem Code hochgeladen im
http://www.file-upload.net/download-2485563/Login_lo…

Ich habe die Name der Mitarbeiter geändert im MA oder Agent.

*hmmh* hier biste sicher *glaub* aber wenn du Mappen präsentierst checke ab ob jeder Empfänger lesen darf wo du arbeitest und was du da für eine Txxxxx Nummer hast.
Ich meine Datei-Eigenschaften…

Dein Code hat ähem Verkürzungsmöglichkeiten, aber erst ab Morgen, die Heia lockt stark.

Tipp, ich finds gut daß du Option Explicit in dem einen Modul einsetzet, machs aber besser bei allen, geht über Extras—Optionen—Variablendeklariation erforderlich.
Gilt halt erst nur für neue Dateien, aber machs, es ist gut.

Zu deinem Fehler zwei Dinge

zum Einen um eine Codezeile „umzubrechen“ gewöhn dir bitte an, an der Bruchstelle nach dem letzten Buchstaben ein Leerzeichen zu machen, dann den Unterstrich, dann noch ein Leerzeichen, dann erst Enter.

So mache ich das und mir ist völlig gleich ob evtl. ein Leerzeichen unnötig ist, denn so klappt es immer, Punkt.

Jetzt das zweite Ding, entweder ist es die Lösung deines Problems oder man muß weiterprüfen, zumindest ist es ein Fehler der weg muß.

Du schreibst
If Irgendwas Or If Wasanderes Then machdas
Das geht so nicht, schreibs so:
If Irgendwas Or Wasanderes Then machdas

Gruß
Reinhard

Moin, Tweeety,

Ich habe so ausprobiert aber es geht nicht:

es geht nicht? Das heißt auf Deutsch: Der Compiler meldet einen Syntaxfehler.

 if or \_
if then
 ...
 end if

Was mache ich falsch?

Du iffelst zuviel :wink:

Gruß Ralf

Hallo Reinhard

Ich habe die Tabelle mit dem Code hoch geladen im
http://www.file-upload.net/download-2487426/Login_lo…

Der Teil des Codes, der nicht funktioniert ist auskommentiert
(grün geschrieben) und ist am Ende des Codes.

Ich habe auch ein Problem mit dem AutoFill, da ich diese Code mit Makro Aufzeichnung hin gekriegt habe und das Range ist statisch anstatt dynamisch.

Range(„c65536“).Select
Selection.End(xlUp).Select
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = „=IF(RC[-3]=R[-1]C[-3],RC[-2]-R[-1]C[-1],“""")"
Selection.NumberFormat = „hh:mm:ss;@“
Selection.AutoFill Destination:=Range(„D3:smiley:37“), Type:=xlFillDefault
Range(„D3:smiley:37“).Select
Range(„D3“).Select

Danke

LG Tweety

Hallo Tweety, Reinhard,

bei dem Versuch von Tweety schrieb sie

Dim i
Const spalte4 = 4
For i = Cells(Rows.Count, spalte).End(xlUp).Row To 1 Step -1
If Cells(i, spalte4).Value ("00:00") Then Cells(i, spalte4 - 2).Clear
End If
Next i

Ich weiss nicht ob es eine Eigenart von VBA ist … aber sie versucht einen String zu vergleichen! Auch frage ich mich gerade was man hier eingeben muss damit die Spalte nicht gelöscht wird!
So wie ich es deute, ist es sicher eine Zeitangabe. Tweety möchte auf >0 und kleiner 11 prüfen. Das ergibt keinen Sinn. Gebe ich eine 08 ein, erfülle ich die Bedingung. Gebe ich eine 12 ein, erfülle ich auch die Bedingung, da einmal 0 :s

Aber nun gut Tweety wird schon seinen Grund haben. Kommen wir zurueck zum Thema …

Reinhard, du selber solltest wissen das man das so nicht macht *gg* Eleganter waere es die Daten beim : zu splitten, beide in eine Zahl umzuwandeln und dann zu vergleichen! Ok das waere dann insgesammt 4 Prüfungen( Vordere und hintere Zahl, jemals zwei mal)

Sicher könnte man das mit einem IF Konstrukt machen. Eleganter ist hier aber eine Select Case Klausel, weil bei eine Fehleingabe soll sicherlich reagiert werden und dem Anwender darauf hingewiesen werden, was falsch war.

Pauschal unter VB6 ohne zu testen könnte es so ausschauen

Dim Z1 As Byte, Z2 As Byte, Fehler As Byte
Dim Value() As String
Dim T As String
T = "00:12"
Value = Split(T, ":")
Select Case True
 Case UBound(Value) = 1
 Fehler = 0
 Case UBound(Value) \> 1
 Fehler = 1
 Case UBound(Value) = 0 And Z2 \> 0
 'aktion ausführen, Bedingung erfüllt
 Case Z1 \>= 0 And Z2 =0 and Z2\>0 or Z1\>=0 and Z2

Ich hoffe, ich habe keinen Denkfehler drinnen :wink:

MfG Alex

Moin, Tweety,

Der Teil des Codes, der nicht funktioniert ist auskommentiert
(grün geschrieben) und ist am Ende des Codes.

der könnte so aussehen:

 Const spalte4 = 4
 For i = Cells(Rows.Count, spalte).End(xlUp).Row To 1 Step -1
 If Cells(i, spalte4).Value ("00:00") Then Cells(i, spalte4 - 2).Clear
 Next i

Was soll der Code denn tun? Jetzt stimmt zwar die Syntax, allerdings wird nun die Spalte 2, die den Login protokolliert, geleert. Wozu mag das gut sein?

Gruß Ralf

Hallo Drambeldier, Reinhard und Anno

Ich danke euch für eure Tips und Hinweise.

Ich habe so gelöst, dass alle leere Zelle in der Spalte D mit Wert 500 gefüllt werden und die Formatierung der Spalte D Standard gelassen habe, dann folgende Code (von eure Tips)

Const spalte4 = 4
For i = Cells(Rows.Count, spalte).End(xlUp).Row To 1 Step -1
If Cells(i, spalte4).Value

Moin, Tweety,

ungeachtet dessen, dass ich immer noch nicht weiß, was Du da treibst: Wenn Du nach dem THEN erst in der nächsten Zeile weiterschreibst, dann wird ein Block bis zum nächsten EndIf begonnen. Damit lassen sich Anweisungen zu Gruppen zusammenfassen:

 Const spalte4 = 4
 For i = Cells(Rows.Count, spalte).End(xlUp).Row To 1 Step -1
 If Cells(i, spalte4).Value 
Ganz nebenbei: Der HTML-tag _pre_ sorgt dafür, dass die Einrückungen erhalten bleiben.

Gruß Ralf

Hallo Ralf

Danke für deinen Hinweis. In meinem Code ist keine neue Zeile nach Then, sie wurde eingefügt als ich den Code im Forum einkopiert habe.

Ich versuche 2 Tabellen so zu gestallten, damit ich sie vergleichen kann.
Die 2 Tabellen stammen vom 2 verschieden Tools und sie sind sehr unterschiedlich. Eine Tabelle ist der Plan, wie die Agenten arbeiten müssen (Soll Zeiten). Es beinhaltet Start Zeit, Ende Zeit, Start Lunch und Ende Lunch.
In der andere Tabelle, die ich jetzt bearbeite enthält die Ist Zeiten, wann die Agenten da waren, allerdings beinhaltet jede Login und Logout und ich brauch nur Start Schicht, Start Lunch, Ende Lunch und Ende Schicht.

Nächste Sorge oder Frage, weißt du wie kann man eine Formel ziehen lassen (autofill), wenn die Liste jedes Mal unterschiedlich lange ist?

Was meinst du mit „ Der HTML-tag pre sorgt dafür, dass die Einrückungen erhalten bleiben“?

Sorry Deutsch ist nicht meine Muttersprache.

Ciao Tweety

Hallo Tweety,

Danke für deinen Hinweis. In meinem Code ist keine neue Zeile
nach Then, sie wurde eingefügt als ich den Code im Forum
einkopiert habe.

ja, ein leidiges Problem bei langen Codezeilen.

Tipp:
Anstatt zu schreiben
If a = 0.1 Then

Bei Or- verknüpfung geht das nicht, aber wenn du mal das hast:
If a > 5 AND a
If a > 5 Then
If a

Die 2 Tabellen stammen vom 2 verschieden Tools und sie sind
sehr unterschiedlich.

Was genau meinst du mit „Tools“?

Du hattest ja mal eine Mappe hochgeladen, seltsam, sie ist bei „Suchen“ noch findbar, beim Öffnen wird sie aber nicht gefunden.
K.A. welches Spielchen da Win mit mir treibt :frowning:

Magst du nochmal hochladen? Scheinbar hast du sie bei der Hochladadresse gelöscht.

Was meinst du mit „ Der HTML-tag pre sorgt dafür, dass die
Einrückungen erhalten bleiben“?

Tu mal so als ob du auf einen Artikel antworten willst, dann siehst du unterhalb des Eingabefensters Links zur Hilfe zu „Tags“.

Sorry Deutsch ist nicht meine Muttersprache.

Ist schon sehr okay, Irgendwelche im Deutschbrett denken das wenn sie meine Artikel lesen sicher auch :smile:

Gruß
Reinhard

Hallo Tweety, Ralf,

wie kann man eine Formel ziehen lassen (autofill), wenn
die Liste jedes Mal unterschiedlich lange ist?

weiß ich leider nicht, da sollte Reinhard was zu sagen.

spontan fallen mir da drei Wege ein

A) du kopierst die Formel manuell nach unten soweit es sein soll.

B) Vba, was letztlich nur das macht was du manuell auch machst. Okay, Vba braucht keine Formel, es könnte das Ergebnis der Formel die da stehen würde auch direkkt als Wert eintragen.

C) Du befüllst z.B. B1:B10000 mit der gleichen Formel, aber so geschrieben daß das Ergebnis entweder „“ ist oder ein Formelergebnis.
Angenommen, die Formel bezieht sich auf A, dann siehste da optisch in B nur ein Ergebnis wo auch in A ein Wert steht.
Und wenn du auf einmal Werte in A1:A20000 stehen hast, na und, dann schreibste die Formel in B1:B50000.

Gruß
Reinhard

Hallo Ralf

Ich habe rausgefunden wie man eine Formel mit Autofil einfügt und die Liste jedes Mal eine andere Länge hat.

Sub autofill()

Dim zl As Long
zl = [c65536].End(xlUp).Row
Range(„D3“).Select
ActiveCell.FormulaR1C1 = „=IF(RC[-3]=R[-1]C[-3],RC[-2]-R[-1]C[-1],“""")"
Range(„d3“).autofill Destination:= _
Range(„d3:d“ & zl)
End Sub

Danke

bis bald

Tweety

Tipp:
Anstatt zu schreiben
If a = 0.1 Then

oder

if a



> Bei Or- verknüpfung geht das nicht, aber wenn du mal das hast:  
> If a \> 5 AND a   
> If a \> 5 Then  
> If a


Select Case wäre besser und effektiver, als endlose Verschachtelungen ...



> > Die 2 Tabellen stammen vom 2 verschieden Tools und sie sind  
> > sehr unterschiedlich.
> 
>   
> Was genau meinst du mit "Tools"?  
>   
> Du hattest ja mal eine Mappe hochgeladen, seltsam, sie ist bei  
> "Suchen" noch findbar, beim Öffnen wird sie aber nicht  
> gefunden.  
> K.A. welches Spielchen da Win mit mir treibt :frowning:  
>   
> Magst du nochmal hochladen? Scheinbar hast du sie bei der  
> Hochladadresse gelöscht.  
>   
> 
> > Was meinst du mit „ Der HTML-tag pre sorgt dafür, dass die  
> > Einrückungen erhalten bleiben“?
> 
>   
> Tu mal so als ob du auf einen Artikel antworten willst, dann  
> siehst du unterhalb des Eingabefensters Links zur Hilfe zu  
> "Tags".  
>   
> 
> > Sorry Deutsch ist nicht meine Muttersprache.
> 
>   
> Ist schon sehr okay, Irgendwelche im Deutschbrett denken das  
> wenn sie meine Artikel lesen sicher auch :smile:  
>   
> Gruß  
> Reinhard


MfG Alex

Hallo Tweety,

zunächst mal ein Lob, du hast z1 als Long deklariert, das ist perfekt, mach das auch bitte grundsätzlich nicht nur bei Zeilen sondern auch bei Spalten.

Jetzt komentiere ich mal deinen Code, ich kann nur hoffen daß du es nicht als persönlichen Angriff siehst sondern als Tipps wie du es besser und sicherer machen kannst.

Zum Namen der Prozedur, du hast sie „autofill“ genannt, würde ich nie machen, denn „autofill“ ist ein Name der Excel-vba bekannt ist und es versteht darunter halt seine eigene Autofillprozedur.
D.h: ich kann nicht 100,0000 %ig ausschließen daß mal irgendwann wegen des Namens zu problemen kommen KÖNNTE.

Also benutze myAutofill Autofuellen oder was immer du willst.
Und du siehst, auch nicht ö,ü,ä benutzen, Vorsicht ist die Mutter der Porzellankiste.

Von mir aus kannste die Schreibweise [A1] benutzen. Mir ist nichts bekannt daß es damit zu problemen kommt im Vergleich mit Range(„A1“).
ABER, du schreibst ja jetzt den Code und vielleicht soll er ja auch in Excel2007 laufen mit > 1 Mio Zeilen und jmd. nutzt dies auch aus, dann scheitert dein Code.

machs so:
zl = cells(rows.count,3).End(xlUp).Row

dann klappts auch in 2007.

Und, du brauchst weder Select noch Autofill:

Probiers mal so:

Sub Autofuellen()
Dim zl As Long
zl = Cells(Rows.Count, 3).End(xlUp).Row
Range(„D3:smiley:“ & zl).FormulaR1C1 = „=IF(RC[-3]=R[-1]C[-3],RC[-2]-R[-1]C[-1],“""")"
End Sub

Gruß
Reinhard

Hallo Alex,

Tipp:
Anstatt zu schreiben
If a alten gewohnten Mod wieder haben *Forder, Hoffe*

Gruß
Reinhard

Hallo Alex, Hallo Reinhard

Es hat funktioniert. Ich habe