Supportnet / Forum / Tabellenkalkulation
Brauche hilfe bei VBA Code
Frage
Hallo Leute,
habe eine klasse VBA-Code hier bekommen, und ihn modifiziert, jetzt bin ich endlich fertig, und er funzt nicht *frusst*
Hat jemand die Musse sich das Teil mal anzuschauen?
Dann ist hier die Datei:
[url]http://rapidshare.com/files/131698076/Ausbildungsplan20082.zip[/url]
Brauche das Ding ab 01.08., es ist ein Ausbildungsplan...
Danke schon mal im Vorraus
Benjä
[*][sup][i]
*Threadedit* 11:06:41, 25.07.2008
Admininfo: Führ bitte einen Thread nicht fort indem du Weitere eröffnest, und vermeide Mehrfachanfragen. Die Datenbank und User werden es dir danken. Siehe [u][url=https://supportnet.de/faqsthread/840]FAQ 2, #3[/url][/u].[/i][/sup]
Antwort 1 von coros
Hallo Benjamin,
was funktioniert denn nicht? Ich habe Deine Datei mal getestet. Ich habe in Zelle A32 bzw. Zelle J32 eine 1 eingetragen. Es erscheint eine Meldung. So soll es doch sein oder?
Noch ein Tipp: Entweder Du stellst Deine Frage in dem dazugehörigen Beitrag von Dir, oder Du erklärst in Deinem Neuen genau, was der Code machen soll und was nicht funktioniert, eventuell mit einem Link auf Deinen anderen Beitrag. Denn mit Deinem jetzigen Beitrag kann niemand etwas richtig anfangen, außer denen, die Deinen letzten Beitrag kennen.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du
ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
was funktioniert denn nicht? Ich habe Deine Datei mal getestet. Ich habe in Zelle A32 bzw. Zelle J32 eine 1 eingetragen. Es erscheint eine Meldung. So soll es doch sein oder?
Noch ein Tipp: Entweder Du stellst Deine Frage in dem dazugehörigen Beitrag von Dir, oder Du erklärst in Deinem Neuen genau, was der Code machen soll und was nicht funktioniert, eventuell mit einem Link auf Deinen anderen Beitrag. Denn mit Deinem jetzigen Beitrag kann niemand etwas richtig anfangen, außer denen, die Deinen letzten Beitrag kennen.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du
ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 2 von BenjaminM
Sorry für die Verwirrung, ich lerne noch mit dem Umgang im Forum!
Also mit der A & J &.... Spalte (die jeweils erste Spalte pro Monat) ist alles i.O., aber mit den folge Spalten nicht, da zählt er nicht bzw. gib die Msg Box nicht aus beim erreichen der Zählsumme.
Also für den ersten Part haut alles hin, nur für die Folgenden nicht. B & K &....
Gruß Benjä
Also mit der A & J &.... Spalte (die jeweils erste Spalte pro Monat) ist alles i.O., aber mit den folge Spalten nicht, da zählt er nicht bzw. gib die Msg Box nicht aus beim erreichen der Zählsumme.
Also für den ersten Part haut alles hin, nur für die Folgenden nicht. B & K &....
Gruß Benjä
Antwort 3 von BenjaminM
Für Alle die,
die sich auch noch reindenken wollen, hier die Vorgeschichte:
https://supportnet.de/threads/2129643
Benjä
die sich auch noch reindenken wollen, hier die Vorgeschichte:
https://supportnet.de/threads/2129643
Benjä
Antwort 4 von coros
Hallo Benjamin,
Du beschreibst mit Deinem Code die falschen Variablen. Bei Spalte A sieht das so aus:
Bei Spalte B sieht das so aus:
Du überschreibst immer wieder die Variablen "iSummeSpalteB1 ", "iSummeSpalteB2 " usw.
Du musst das wie für Spalte A machen, also den ersten Block
und beim 2. Block dann
Das Ganze auch für die anderen Blöcke.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du
ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Du beschreibst mit Deinem Code die falschen Variablen. Bei Spalte A sieht das so aus:
iSummeSpalteA1 = Application.WorksheetFunction.CountIf(Range("A2:A32"), 1)
iSummeSpalteA2 = Application.WorksheetFunction.CountIf(Range("A36:A66"), 1)
iSummeSpalteJ1 = Application.WorksheetFunction.CountIf(Range("J2:J32"), 1)
iSummeSpalteJ2 = Application.WorksheetFunction.CountIf(Range("J36:J66"), 1)
iSummeSpalteS1 = Application.WorksheetFunction.CountIf(Range("S2:S32"), 1)
iSummeSpalteS2 = Application.WorksheetFunction.CountIf(Range("S36:S66"), 1)
iSummeSpalteAB1 = Application.WorksheetFunction.CountIf(Range("AB2:AB32"), 1)
iSummeSpalteAB2 = Application.WorksheetFunction.CountIf(Range("AB36:AB66"), 1)
iSummeSpalteAK1 = Application.WorksheetFunction.CountIf(Range("AK2:AK32"), 1)
iSummeSpalteAK2 = Application.WorksheetFunction.CountIf(Range("AK36:AK66"), 1)
iSummeSpalteAT1 = Application.WorksheetFunction.CountIf(Range("AT2:AT32"), 1)
iSummeSpalteAT2 = Application.WorksheetFunction.CountIf(Range("AT36:AT66"), 1)
iSummeSpalteA3 = Application.WorksheetFunction.CountIf(Range("A2:A32"), 2)
iSummeSpalteA4 = Application.WorksheetFunction.CountIf(Range("A36:A66"), 2)
iSummeSpalteJ3 = Application.WorksheetFunction.CountIf(Range("J2:J32"), 2)
iSummeSpalteJ4 = Application.WorksheetFunction.CountIf(Range("J36:J66"), 2)
iSummeSpalteS3 = Application.WorksheetFunction.CountIf(Range("S2:S32"), 2)
iSummeSpalteS4 = Application.WorksheetFunction.CountIf(Range("S36:S66"), 2)
iSummeSpalteAB3 = Application.WorksheetFunction.CountIf(Range("AB2:AB32"), 2)
iSummeSpalteAB4 = Application.WorksheetFunction.CountIf(Range("AB36:AB66"), 2)
iSummeSpalteAK3 = Application.WorksheetFunction.CountIf(Range("AK2:AK32"), 2)
iSummeSpalteAK4 = Application.WorksheetFunction.CountIf(Range("AK36:AK66"), 2)
iSummeSpalteAT3 = Application.WorksheetFunction.CountIf(Range("AT2:AT32"), 2)
iSummeSpalteAT4 = Application.WorksheetFunction.CountIf(Range("AT36:AT66"), 2)Bei Spalte B sieht das so aus:
iSummeSpalteB1 = Application.WorksheetFunction.CountIf(Range("B2:B32"), 1)
iSummeSpalteB2 = Application.WorksheetFunction.CountIf(Range("B36:B66"), 1)
iSummeSpalteK1 = Application.WorksheetFunction.CountIf(Range("K2:K32"), 1)
iSummeSpalteK2 = Application.WorksheetFunction.CountIf(Range("K36:K66"), 1)
iSummeSpalteT1 = Application.WorksheetFunction.CountIf(Range("T2:T32"), 1)
iSummeSpalteT2 = Application.WorksheetFunction.CountIf(Range("T36:T66"), 1)
iSummeSpalteAC1 = Application.WorksheetFunction.CountIf(Range("AC2:AC32"), 1)
iSummeSpalteAC2 = Application.WorksheetFunction.CountIf(Range("AC36:AC66"), 1)
iSummeSpalteAL1 = Application.WorksheetFunction.CountIf(Range("AL2:AL32"), 1)
iSummeSpalteAL2 = Application.WorksheetFunction.CountIf(Range("AL36:AL66"), 1)
iSummeSpalteAU1 = Application.WorksheetFunction.CountIf(Range("AU2:AU32"), 1)
iSummeSpalteAU2 = Application.WorksheetFunction.CountIf(Range("AU36:AU66"), 1)
]iSummeSpalteB1 = Application.WorksheetFunction.CountIf(Range("B2:B32"), 2)
iSummeSpalteB2 = Application.WorksheetFunction.CountIf(Range("B36:B66"), 2)
iSummeSpalteK1 = Application.WorksheetFunction.CountIf(Range("K2:K32"), 2)
iSummeSpalteK2 = Application.WorksheetFunction.CountIf(Range("K36:K66"), 2)
iSummeSpalteT1 = Application.WorksheetFunction.CountIf(Range("T2:T32"), 2)
iSummeSpalteT2 = Application.WorksheetFunction.CountIf(Range("T36:T66"), 2)
iSummeSpalteAC1 = Application.WorksheetFunction.CountIf(Range("AC2:AC32"), 2)
iSummeSpalteAC2 = Application.WorksheetFunction.CountIf(Range("AC36:AC66"), 2)
iSummeSpalteAL1 = Application.WorksheetFunction.CountIf(Range("AL2:AL32"), 2)
iSummeSpalteAL2 = Application.WorksheetFunction.CountIf(Range("AL36:AL66"), 2)
iSummeSpalteAU1 = Application.WorksheetFunction.CountIf(Range("AU2:AU32"), 2)
iSummeSpalteAU2 = Application.WorksheetFunction.CountIf(Range("AU36:AU66"), 2) Du überschreibst immer wieder die Variablen "iSummeSpalteB1 ", "iSummeSpalteB2 " usw.
Du musst das wie für Spalte A machen, also den ersten Block
iSummeSpalteB1 = Application.WorksheetFunction.CountIf(Range("B2:B32"), 1)
iSummeSpalteB2 = Application.WorksheetFunction.CountIf(Range("B36:B66"), 1)
iSummeSpalteK1 = Application.WorksheetFunction.CountIf(Range("K2:K32"), 1)
iSummeSpalteK2 = Application.WorksheetFunction.CountIf(Range("K36:K66"), 1)
iSummeSpalteT1 = Application.WorksheetFunction.CountIf(Range("T2:T32"), 1)
iSummeSpalteT2 = Application.WorksheetFunction.CountIf(Range("T36:T66"), 1)
iSummeSpalteAC1 = Application.WorksheetFunction.CountIf(Range("AC2:AC32"), 1)
iSummeSpalteAC2 = Application.WorksheetFunction.CountIf(Range("AC36:AC66"), 1)
iSummeSpalteAL1 = Application.WorksheetFunction.CountIf(Range("AL2:AL32"), 1)
iSummeSpalteAL2 = Application.WorksheetFunction.CountIf(Range("AL36:AL66"), 1)
iSummeSpalteAU1 = Application.WorksheetFunction.CountIf(Range("AU2:AU32"), 1)
iSummeSpalteAU2 = Application.WorksheetFunction.CountIf(Range("AU36:AU66"), 1)und beim 2. Block dann
iSummeSpalteB3 = Application.WorksheetFunction.CountIf(Range("B2:B32"), 2)
iSummeSpalteB4 = Application.WorksheetFunction.CountIf(Range("B36:B66"), 2)
iSummeSpalteK3 = Application.WorksheetFunction.CountIf(Range("K2:K32"), 2)
iSummeSpalteK4 = Application.WorksheetFunction.CountIf(Range("K36:K66"), 2)
iSummeSpalteT3 = Application.WorksheetFunction.CountIf(Range("T2:T32"), 2)
iSummeSpalteT4 = Application.WorksheetFunction.CountIf(Range("T36:T66"), 2)
iSummeSpalteA1 = Application.WorksheetFunction.CountIf(Range("AC2:AC32"), 2)
iSummeSpalteA2 = Application.WorksheetFunction.CountIf(Range("AC36:AC66"), 2)
iSummeSpalteAL3 = Application.WorksheetFunction.CountIf(Range("AL2:AL32"), 2)
iSummeSpalteAL4 = Application.WorksheetFunction.CountIf(Range("AL36:AL66"), 2)
iSummeSpalteAU3 = Application.WorksheetFunction.CountIf(Range("AU2:AU32"), 2)
iSummeSpalteAU4 = Application.WorksheetFunction.CountIf(Range("AU36:AU66"), 2)Das Ganze auch für die anderen Blöcke.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du
ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 5 von BenjaminM
Danke Oliver!
Manchmal sieht man den Wald vor lauter Bäumen nicht!
Es haut hin! Danke schön!
Gruß Benjä
Manchmal sieht man den Wald vor lauter Bäumen nicht!
Es haut hin! Danke schön!
Gruß Benjä
Antwort 6 von lorf55
Hallo BenjaminM,
nur so als Tip: Du hast sicher ganz toll gearbeitet um den Code so hinzukriegen, wie er jetzt ist. Trotzdem solltest du versuchen, ihn zu vereinfachen, indem du Arrays benutzt und dir mehrmalig benutzbare Hilfsfunktionen baust. Dabei fängt man klein an und baut sich aus selbstgemachten Bausteinen sein Haus zusammen.
wenn du z.B. für diesen Ausdruck eine Hilfsfunktion mit passenden Parametern baust, wäre das nicht schlecht:
Man kann die Bereiche vereinigen und dann zählen:
Denn kann man statt
Eventuell hilft es für die Übersicht, mit benannten Bereichen zu arbeiten, weiß ich jetzt aber nicht 100%, mir hat es aber schon oft geholfen.
Sonst baust du dir Code, den man später schlecht warten, also anpassen kann.
Ist nur so als Tipp gemeint, bitte nicht persönlich nehmen.
Gruß
lorf
PS: ich glaube du wirst dich wundern, wie kurz dein Code sein kann.
PPS: Ich habe jetzt leider keine Zeit mehr, das ordentlich zu machen, obwohl es mir in den Fingern juckt...
nur so als Tip: Du hast sicher ganz toll gearbeitet um den Code so hinzukriegen, wie er jetzt ist. Trotzdem solltest du versuchen, ihn zu vereinfachen, indem du Arrays benutzt und dir mehrmalig benutzbare Hilfsfunktionen baust. Dabei fängt man klein an und baut sich aus selbstgemachten Bausteinen sein Haus zusammen.
wenn du z.B. für diesen Ausdruck eine Hilfsfunktion mit passenden Parametern baust, wäre das nicht schlecht:
iSummeSpalteA1 = Application.WorksheetFunction.CountIf(Range("A2:A32"), 1)
iSummeSpalteA2 = Application.WorksheetFunction.CountIf(Range("A36:A66"), 1)
usw.
Man kann die Bereiche vereinigen und dann zählen:
Private Function Summe1()
Dim iSummeA_AT As Integer
iSummeA_AT = Application.WorksheetFunction.CountIf( _
Union(Range("A2:A32"), Range("A36:A66"), _
Union(Range("J2:J32"), Range("J36:J66")), _
Union(Range("S2:S32"), Range("S36:S66")), _
Union(Range("AB2:AB32"), Range("AB36:AB66")), _
Union(Range("AK2:AK32"), Range("AK36:AK66")), _
Union(Range("AT2:AT32"), Range("AT36:AT66")), 1))
End Function
Aufruf:
If Summe1() > varGrenzwert1 Then
MsgBox "Büro max.60Tage...", vbInformation, "Maximale Arbeitstage erreicht"
Target.Cells.ClearContents
End IfDenn kann man statt
Union(Range("A2:A32"), Range("A36:A66")Union(Range(Cells(2, 1+Offset), Cells(32, 1+Offset)), Range(Cells(36, 1+Offset), Cells(66, 1+Offset))) usw. usf. benutzen und in die Funktion noch einen Versatz (Offset) einbauen, um sie noch öfter anzuwenden.Eventuell hilft es für die Übersicht, mit benannten Bereichen zu arbeiten, weiß ich jetzt aber nicht 100%, mir hat es aber schon oft geholfen.
Sonst baust du dir Code, den man später schlecht warten, also anpassen kann.
Ist nur so als Tipp gemeint, bitte nicht persönlich nehmen.
Gruß
lorf
PS: ich glaube du wirst dich wundern, wie kurz dein Code sein kann.
PPS: Ich habe jetzt leider keine Zeit mehr, das ordentlich zu machen, obwohl es mir in den Fingern juckt...
Antwort 7 von BenjaminM
Danke für den Hinweis,
habs mal eben probiert, jedoch wo muss ich dann den Dim für meinen varGrenzwert setzen?
So, wie der Code jetzt geschrieben ist, funzt die Msg Box nicht!
------------------------------------------------------------------------------------
Noch ne Frage zum vorrangegangenen Code:
Fein Tuning,
Ist es möglich den "varGrenzwert" in die Msg Box einzubinden? Das wenn ich die BezugsZelle des varGrenzwertes ändere, das die Änderung auch in der Msg Box angezeigt/geändert wird?
Es handelt sich um eine Tagesanzahl, die als max. Wert in der Msg Box angezeigt wird.(momentan händisch)
MsgBox "Büro max.60Tage...", vbInformation, "Maximale Arbeitstage erreicht"
Gedanke:
MsgBox "Büro max.=varGrenzwertTage...", vbInformation, "Maximale Arbeitstage erreicht"
Hier wird dann aber alles als Text angezeigt.(geht wohl nicht! Oder etwa doch?)
MfG Benjä
habs mal eben probiert, jedoch wo muss ich dann den Dim für meinen varGrenzwert setzen?
So, wie der Code jetzt geschrieben ist, funzt die Msg Box nicht!
------------------------------------------------------------------------------------
Noch ne Frage zum vorrangegangenen Code:
Fein Tuning,
Ist es möglich den "varGrenzwert" in die Msg Box einzubinden? Das wenn ich die BezugsZelle des varGrenzwertes ändere, das die Änderung auch in der Msg Box angezeigt/geändert wird?
Es handelt sich um eine Tagesanzahl, die als max. Wert in der Msg Box angezeigt wird.(momentan händisch)
MsgBox "Büro max.60Tage...", vbInformation, "Maximale Arbeitstage erreicht"
Gedanke:
MsgBox "Büro max.=varGrenzwertTage...", vbInformation, "Maximale Arbeitstage erreicht"
Hier wird dann aber alles als Text angezeigt.(geht wohl nicht! Oder etwa doch?)
MfG Benjä
Antwort 8 von coros
Hallo Benjamin,
meinst Du das so:
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du
ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
meinst Du das so:
MsgBox "Büro max. " & varGrenzwert1 & " Tage...", vbInformation, "Maximale Arbeitstage erreicht"MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du
ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 9 von BenjaminM
Danke Oliver,
Das ist Spitze!
Funzt alles wunderbar, aber an einem Schräubchen hätte ich gerne noch gedreht!
Ist es möglich, bei dieser Zählerei, die bereits eingetragenen Zahlen, in einer bestimmten Zelle auszugeben?
Momentan zieht er sich ja den Grenzwert aus einer Zelle, und ich stelle mir vor, das in der benachtbarten Zelle die Zahl der momentan eingetragenen Werte angezeigt werden(naturlich für jeden Bereich einzelnd).
Ist sowas auch noch drin?
Oder wie sähe das mit einer Zählenwenn Formel aus?
Macht das mehr Sinn, und wie müsste die aussehen?
Danke fürs Kopfzerbrechen!!!
MfG Benjä
Das ist Spitze!
Funzt alles wunderbar, aber an einem Schräubchen hätte ich gerne noch gedreht!
Ist es möglich, bei dieser Zählerei, die bereits eingetragenen Zahlen, in einer bestimmten Zelle auszugeben?
Momentan zieht er sich ja den Grenzwert aus einer Zelle, und ich stelle mir vor, das in der benachtbarten Zelle die Zahl der momentan eingetragenen Werte angezeigt werden(naturlich für jeden Bereich einzelnd).
Ist sowas auch noch drin?
Oder wie sähe das mit einer Zählenwenn Formel aus?
Macht das mehr Sinn, und wie müsste die aussehen?
Danke fürs Kopfzerbrechen!!!
MfG Benjä
Antwort 10 von coros
Hallo Benjamin,
mit dem Befehl
wird z.B. der Wert der Funktion ZÄHLENWENN in Zelle Z1 ausgegeben. Meinst Du das so?
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du
ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
mit dem Befehl
Range("Z1") = iSummeSpalteA1 wird z.B. der Wert der Funktion ZÄHLENWENN in Zelle Z1 ausgegeben. Meinst Du das so?
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du
ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 11 von BenjaminM
Hallo Oliver,
eigentlich, solle es eher so aussehen:
Range("BE26") = iSummeSpalteA1 + iSummeSpalteA2 + iSummeSpalteJ1 + iSummeSpalteJ2 + iSummeSpalteS1 +
iSummeSpalteS2 + iSummeSpalteAB1 + iSummeSpalteAB2 +
iSummeSpalteAK1 + iSummeSpalteAK2 + iSummeSpalteAT1 +
iSummeSpalteAT2
Is es das schon? Oder geht das noch einfacher?
Und dann noch die Frage wo muss ich das im VBA-Editor unterbringen?
Neues Private Sub?
Oder an welche Stelle gehört das in das
Private Sub Worksheet_Change(ByVal Target As Range)
Ich bin eben Anfänger!
Sag mal kannst du mir (nur so nebenbei) eine gute VBA Lern-Literatur empfehlen?
Ich glaube ich sollte diese Sprache lernen!
Was hälst du von Bernd Held?
Danke für mein Teilnehmen an deinem Hobby! (HP) ;-)
MfG Benjä
eigentlich, solle es eher so aussehen:
Range("BE26") = iSummeSpalteA1 + iSummeSpalteA2 + iSummeSpalteJ1 + iSummeSpalteJ2 + iSummeSpalteS1 +
iSummeSpalteS2 + iSummeSpalteAB1 + iSummeSpalteAB2 +
iSummeSpalteAK1 + iSummeSpalteAK2 + iSummeSpalteAT1 +
iSummeSpalteAT2
Is es das schon? Oder geht das noch einfacher?
Und dann noch die Frage wo muss ich das im VBA-Editor unterbringen?
Neues Private Sub?
Oder an welche Stelle gehört das in das
Private Sub Worksheet_Change(ByVal Target As Range)
Ich bin eben Anfänger!
Sag mal kannst du mir (nur so nebenbei) eine gute VBA Lern-Literatur empfehlen?
Ich glaube ich sollte diese Sprache lernen!
Was hälst du von Bernd Held?
Danke für mein Teilnehmen an deinem Hobby! (HP) ;-)
MfG Benjä
Antwort 12 von coros
Hallo Benjamin,
wenn Du alle Summen addiert haben möchtest, muss die Befehlszeile wie aus Deinem letzten Beitrag lauten.
Die Befehlszeile gehört vor dem "End Sub" des Worksheet_Change-Ereignisses.
Ein Buch kann ich Dir nicht empfehlen, da ich keines besitze. Ich bin bei VBA etwas durch meinen Beruf vorbelastet, da ich dort in VB (Visual Basic) und in von VB abgeleiteten Programmen programmiere. Den Rest von Excel habe ich mir mit learning for doing durch viel lesen und ausprobieren in Foren wie das Supportnet beigebracht.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du
ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
wenn Du alle Summen addiert haben möchtest, muss die Befehlszeile wie aus Deinem letzten Beitrag lauten.
Die Befehlszeile gehört vor dem "End Sub" des Worksheet_Change-Ereignisses.
Ein Buch kann ich Dir nicht empfehlen, da ich keines besitze. Ich bin bei VBA etwas durch meinen Beruf vorbelastet, da ich dort in VB (Visual Basic) und in von VB abgeleiteten Programmen programmiere. Den Rest von Excel habe ich mir mit learning for doing durch viel lesen und ausprobieren in Foren wie das Supportnet beigebracht.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du
ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 13 von BenjaminM
Hallo Oliver,
habe die Zeile aus Antwort11 vor das End Sub kopiert, aber es wird nicht in der Tabelle/Zelle ausgegeben. (?)
Und eine Sache hab ich auch noch, merkt man erst wenn man mit dem Sheet arbeitet,
Wenn die Msg Box beim erreichen des Zählergebnises angezeigt wird, löscht er ja(nach klich auf OK) den letzten Eintrag!
Das ist auch schön, aber wenn ich jedoch etwas ändere, in dem ich einen Bereich kopiere und einfüge, kommt keine Msg Box! Das Problem dabei ist, wenn ich dann händisch eine weitere Zahl einfüge wird die Msg Box angezeigt, aber ich kann diese nicht mehr schliessen bzw. sie wird immer wieder angezeigt!(ist ja auch klar, da ja mehr Zahlen eingetragen sind als sollen)
Das Ding ist nur, das ich dann die Excel Datei über den Task-Manager schliessen muss da sie weder weiterbearbeitet werden kann noch ich die Msg Box weg bekomme, speichern ist auch nicht möglich(klaro, wird ja von der MSG Box blockiert) und alles was bis dahin nicht sicher im Kasten war is wech.
Kann man das irgendwie umgehen?
Oder darf man einfach das kopieren einfügen nicht machen?
MfG Benjä
habe die Zeile aus Antwort11 vor das End Sub kopiert, aber es wird nicht in der Tabelle/Zelle ausgegeben. (?)
Und eine Sache hab ich auch noch, merkt man erst wenn man mit dem Sheet arbeitet,
Wenn die Msg Box beim erreichen des Zählergebnises angezeigt wird, löscht er ja(nach klich auf OK) den letzten Eintrag!
Das ist auch schön, aber wenn ich jedoch etwas ändere, in dem ich einen Bereich kopiere und einfüge, kommt keine Msg Box! Das Problem dabei ist, wenn ich dann händisch eine weitere Zahl einfüge wird die Msg Box angezeigt, aber ich kann diese nicht mehr schliessen bzw. sie wird immer wieder angezeigt!(ist ja auch klar, da ja mehr Zahlen eingetragen sind als sollen)
Das Ding ist nur, das ich dann die Excel Datei über den Task-Manager schliessen muss da sie weder weiterbearbeitet werden kann noch ich die Msg Box weg bekomme, speichern ist auch nicht möglich(klaro, wird ja von der MSG Box blockiert) und alles was bis dahin nicht sicher im Kasten war is wech.
Kann man das irgendwie umgehen?
Oder darf man einfach das kopieren einfügen nicht machen?
MfG Benjä
Antwort 14 von coros
Hallo Benjamin,
lade bitte Deine Datei hoch, damit man sich das in Deiner Datei ansehen kann.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du
ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
lade bitte Deine Datei hoch, damit man sich das in Deiner Datei ansehen kann.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du
ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 15 von BenjaminM
Hier einmal die jetzige Datei!
Die Zählenwenn habe ich ohne VBA eingebaut, wäre aber trotzdem schön sie im VBA zu haben!
http://rapidshare.com/files/132087707/Ausbildungsplan2008.zip
MfG Benjä
Die Zählenwenn habe ich ohne VBA eingebaut, wäre aber trotzdem schön sie im VBA zu haben!
http://rapidshare.com/files/132087707/Ausbildungsplan2008.zip
MfG Benjä
Antwort 16 von BenjaminM
Hallo Oliver,
noch als Ergänzung,
der Fehler aus Antwort13
tritt auch auf, wenn ich den Wert in einer der varGrenzwert-Zellen minimiere, ohne vorher die Zelleninhalte im Kalender zu löschen.
Und noch ´ne blöd Frage, kann man den Code noch vereinfachen?
Der ist mittlerweile ziemlich unübersichtlich!
Danke dir
MfG Benjä
noch als Ergänzung,
der Fehler aus Antwort13
tritt auch auf, wenn ich den Wert in einer der varGrenzwert-Zellen minimiere, ohne vorher die Zelleninhalte im Kalender zu löschen.
Und noch ´ne blöd Frage, kann man den Code noch vereinfachen?
Der ist mittlerweile ziemlich unübersichtlich!
Danke dir
MfG Benjä
Antwort 17 von coros
Hallo Benjamin,
sorry, dass ich mich erst jetzt wieder melde, aber ich hatte zu tun.
Du musst die Ereignisanzeige am Anfang des VBA-Codes deaktivieren und am Ende wieder aktivieren. Das sieht wie folgt aus:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo ERRORHANDLER
Application.EnableEvents = False.
.
.
Deine weitereren Befehle
.
.
ERRORHANDLER:
Application.EnableEvents = True
End Sub
Damit erscheint die Meldung auch beim Kopieren ganzer Bereiche nur einmal.
Den kann man sicherlich vereinfachen. Eine Möglichkeit hat Dir ja @lorf in AW6 aufgezeigt.
Ich kann ihn Dir jetzt nicht vereinfachen, da mir dazu im Moment die Zeit fehlt.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du
ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
sorry, dass ich mich erst jetzt wieder melde, aber ich hatte zu tun.
Du musst die Ereignisanzeige am Anfang des VBA-Codes deaktivieren und am Ende wieder aktivieren. Das sieht wie folgt aus:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo ERRORHANDLER
Application.EnableEvents = False.
.
.
Deine weitereren Befehle
.
.
ERRORHANDLER:
Application.EnableEvents = True
End Sub
Damit erscheint die Meldung auch beim Kopieren ganzer Bereiche nur einmal.
Den kann man sicherlich vereinfachen. Eine Möglichkeit hat Dir ja @lorf in AW6 aufgezeigt.
Ich kann ihn Dir jetzt nicht vereinfachen, da mir dazu im Moment die Zeit fehlt.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du
ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 18 von BenjaminM
Moin, moin
danke Oliver das du dir gestern noch die Zeit genommen hast!
Ich hab die Erweiterung gestern noch übernommen, und lief prima, als ich heute morgen die Datei aufgemacht habe ging gar keine MsgBox mehr!
Habe jetzt schon 2 std. rumprobiert, aber ich kriegs nicht mehr zum laufen!
Was kann das den sein!?
Hab
On Error GoTo ERRORHANDLER
Application.EnableEvents = False
&
ERRORHANDLER:
Application.EnableEvents = True
auch noch mal entfernt, aber nix!
Wenn du noch mal Zeit hast....
http://rapidshare.com/files/132292214/Ausbildungsplan22008.zip
danke Oliver das du dir gestern noch die Zeit genommen hast!
Ich hab die Erweiterung gestern noch übernommen, und lief prima, als ich heute morgen die Datei aufgemacht habe ging gar keine MsgBox mehr!
Habe jetzt schon 2 std. rumprobiert, aber ich kriegs nicht mehr zum laufen!
Was kann das den sein!?
Hab
On Error GoTo ERRORHANDLER
Application.EnableEvents = False
&
ERRORHANDLER:
Application.EnableEvents = True
auch noch mal entfernt, aber nix!
Wenn du noch mal Zeit hast....
http://rapidshare.com/files/132292214/Ausbildungsplan22008.zip
Antwort 19 von BenjaminM
Hallo Oliver!
Anwort18 zurück!!!
Datei funz nach Rechner Neustart wieder!!
Jedoch mit einer Einschränkung!
Beim Eintrag der Nr.6 (in der jeweiligen 6 Spalte jeden Monats) wird (trotz richtigem Bezug des varGrenzwertes) die MsgBox bei einem falschen Wert angezeigt.
In der Bezugszelle steht 35, und wenn bis 30 gezählt ist, wird die MsgBox bereits angezeigt.
*grübbel, grübbel*
Der gleiche varGrenzwertbezug ist mit in die Textausgabe integriert, zeigt da auch 35 an (???)
Ich steig da nicht hinter!
Könntest du bei Zeiten noch mal schaun?
Danke schön Benjä
http://rapidshare.com/files/132292214/Ausbildungsplan22008.zip
Anwort18 zurück!!!
Datei funz nach Rechner Neustart wieder!!
Jedoch mit einer Einschränkung!
Beim Eintrag der Nr.6 (in der jeweiligen 6 Spalte jeden Monats) wird (trotz richtigem Bezug des varGrenzwertes) die MsgBox bei einem falschen Wert angezeigt.
In der Bezugszelle steht 35, und wenn bis 30 gezählt ist, wird die MsgBox bereits angezeigt.
*grübbel, grübbel*
Der gleiche varGrenzwertbezug ist mit in die Textausgabe integriert, zeigt da auch 35 an (???)
Ich steig da nicht hinter!
Könntest du bei Zeiten noch mal schaun?
Danke schön Benjä
http://rapidshare.com/files/132292214/Ausbildungsplan22008.zip
Antwort 20 von BenjaminM
Moin, moin
habs alles hinbekommen!
Danke für deine/eure Hilfe
MfG Benjä
habs alles hinbekommen!
Danke für deine/eure Hilfe
MfG Benjä

