Makro: Wenn Zelle=Wert Dann Meldung

  • #1
B

Billy

Guest
Guten Tag zusammen

Ich müsste für meinen Chef einen kleines Makro Script haben welches reagiert sobald in der Zelle B4 !!!! steht....

Ich hab das soweit mal mit einer Funktion gemacht =)

Code:
=WENN(ZÄHLENWENN(F13:F52;reimann)>=2;!!!!;WENN(ZÄHLENWENN(F13:F52;reimann)=1;X;))

nun weiss ich allerdings gar nicht wie ich das machen soll, bin sozusagen blutiger anfänger :-[ und weiss auch net wo ich das Makro dann Reinmachen soll, bei Klassenmodul oder so... echt keine ahnung

Zur Information: es sind insgesammt 12 Tabellen wo dann immer diese Zelle überprüft wird einfach immer mit anderen Namen aber das ist ja nicht so schlimm, die Fehlermeldung bleibt immer !!!!

Wäre froh wenn ihr mir mal Helfen könntet und mir neben bei villeicht noch ein kleines Tut geben könntet wo ich das ding mal selber lernen kann...

Danke ^^

MFG FiRe-X
 
  • #2
Hallo Fire-X,

das Makro könnte folgendermaßen aussehen:
Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Excel.Range)
  On Error Resume Next
  For x = 1 To 12
    If Worksheets(x).Range(B4) = !!!! Then
      MsgBox (4 Ausrufezeichen -> Jetzt ist die Hölle los !!!!)
      Exit For
    End If
  Next
End Sub

Das Makro muß in die Code-Seite der Arbeitsmappe und überwacht dann die Zelle B4 auf allen 12  Arbeitsblättern. Steht in einer Zelle !!!!, dann sagt das Makro etwas mit Hölle  ;D . Du kannst den Text natürlich auch anpassen.

Nachteil dieses Makros: Er überwacht alle Änderungen in der Arbeitsmappe. Stehen in einer Zelle B4 !!!!, so gibt er seine Meldung bei jeder x-beliebigen weiteren Änderung wieder aus.
Direkt läßt sich die Zelle B4 nicht mit demChange-Ereignis überwachen, da sie eine Formel enthält.

Es besteht aber die aber die Möglichkeit, nach einmaliger Meldung bis zum nächsten Öffnen der Arbeitsmappe keine weitere Meldung mehr auszugeben. Das wäre dann die folgende Version:
Code:
Const c_Zelle = B4
Dim b_Flag As Boolean
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Excel.Range)
  On Error Resume Next
  If Not b_Flag Then
    For x = 1 To 12
      If Worksheets(x).Range(B4) = !!!! Then
        MsgBox (4 Ausrufezeichen -> Jetzt ist die Hölle los !!!!)
        b_Flag = True
        Exit For
      End If
    Next
  End If
End Sub

So jetzt brauchst Du noch deine Kurzanleitung.

Einfügen in Diese Arbeitsmappe:

1) Excel-Datei öffnen
2) VB-Ediotr öffnen Alt+F11
Links siehst Du ein Fenster mit der Überschrift Projekt-VBA-Project.
In diesem Fenster ist die Arbeitsmappe unter dem Namen VBAProject(Dateiname) zu finden.
3) VBAProject(DieseArbeitsmappe) doppelt klicken
in der Mitte geht das Code-Fenster DieseArbeitsmappe(Code) auf
4) den gesamten Code per copy und Paste in dieses Fenster hineinkopieren
(ggf. den Meldungstext anpassen)
5) VB-Editor schliessen mit Alt+Q
6) Excel-Datei speichern

Gruß Matjes :)
 
  • #3
Matjes schrieb:
Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Excel.Range)
 On Error Resume Next
 For x = 1 To 12
  If Worksheets(x).Range(B4) = !!!! Then
   MsgBox (4 Ausrufezeichen -> Jetzt ist die Hölle los !!!!)
   Exit For
  End If
 Next
End Sub

oke

danke erstmals jetzt öhm weiss ich ja net ob der mir das so schluckt weil die Tabellennamen die Monate sind *gg*

aber das sollte kren Problem ich mache dann immer wider X IF Abfragen stört ja das ding nicht oder?

Ich hoffe ich kann mich mal wider melden heute ^^, weil mein Cheffe gibt mir sicher noch ne Knack nuss -.-

MFG FiRe-X
 
  • #4
Hi Fire-X,

so wie es jetzt ist, sind dem Makro die Blattnamen egal. Er durchsucht die ersten 12 Blätter.

Gruß Matjes :)
 
  • #5
ich habs gesehn ^^

danke

mein chef hat volgendes gemacht  ;D löl egal öhm was er aber noch will ist dass man die Formel von B4 irgend wie sichern kann, da wie er meint in unserem Geschäft ein paar User mal so ausversehen auf die Delete taste drücken, kann man das auch mit einem Makro machen?

und was noch mein Anliegen wäre (sorry dass ich so viel will :-[) zu wissen ob man
Code:
If Worksheets(x).Range(B4) = !!!! Then
auch in
Code:
If Worksheets(x).Range(B4:BE6) = !!!! Then
schreiben könnte um dieses Makro auf die ganze Zeile zu erweitern...

danke für ne Antwort (>> im namen meines chefs  :))

FiRe-X
 
  • #6
Hi Fire-X,

die Erweiterung sähe dann so aus:
Code:
Dim myZelle As Range
Dim myRange As Range
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Excel.Range)
  On Error Resume Next
  For x = 1 To 12
    Set myRange = Worksheets(x).Range(B4:BE6)
    For Each Zelle In myRange
      If Zelle = !!!! Then
        MsgBox (4 Ausrufezeichen -> Jetzt ist die Hölle los !!!!)
        Exit For
      End If
    Next
  Next
End Sub

zu Delete und Retten:
kann man alles machen  ;D  Du mußt nur genau beschreiben was gerettet werden soll.

Gruß Matjes :)
 
  • #7
Mein chef ist begeistert ;D

öhm wie kann ich dann denn Wert der geänderten Zelle ändern welche das !!!! in B4 auslöst? geht das überhaupt?

Muss man echt was an dieser Formel hier ändern:
Code:
=WENN(ZÄHLENWENN(N13:N52;reimann)>=2;!!!!;WENN(ZÄHLENWENN(N13:N52;reimann)=1;X;))
?

und wegen Formel sicher... die Formel da wäre die welche es zu sichern gilt einfach ist dies nur auf der Tabelle2 so, auf der Tabelle3 dann nicht.

MFG FiRe-X
 
  • #8
An der Formel mußt Du nicht ändern, sondern in den Zellen, die zu dem Ergebnis führen.
ZÄHLENWENN(N13:N52;reimann)>=2;!!!!;
also die Meldung wegklicken und dann dafür sorgen, daß->reimann' im Bereich N13:N52 nicht mehr als einmal auftaucht.

zu Formel in B4 auf Tabelle2 retten:
Welchen Namen hat denn die Tabelle 2 ?

Gruß Matjes
 
  • #9
Matjes schrieb:
An der Formel mußt Du nicht ändern, sondern in den Zellen, die zu dem Ergebnis führen.
ZÄHLENWENN(N13:N52;reimann)>=2;!!!!;
also die Meldung wegklicken und dann dafür sorgen, daß->reimann' im Bereich N13:N52 nicht mehr als einmal auftaucht.

zu Formel in B4 auf Tabelle2 retten:
Welchen Namen hat denn die Tabelle 2 ?

Gruß Matjes

Die heisst März 2005 (< die anderen genau so als Januar usw...)

Die Formel muss schon so bleiben einfach wenn wer in die feld N15 reimann schreibt aber bereits reimann in N30 steht, soll N15 gelöscht werden und eben dieser kleiner Errordialog kommen =) welchen ich bis jetzt mit !!!! ersetzt habe

mfg Billy
 
  • #10
Hallo Billy,

- Überwachung der Mappe
- Überwachung einer Zelle auf Änderung und ggf. ein Undo der geänderten Zeile
beissen sich. Das wird zu schwierig, um es zu erklären.

Ein alternativer Vorschlag sieht folgendermassen aus:
Die Überwachungsspalte B wird als Makro implementiert. Dann fällt die Änderungsüberwachung und Undo fort.

Lege eine Kopie deiner Datei an. In der kannst Du dann die folgenden Ändrungen ausprobieren.


Notwendige Makros:

**********
A) AuswarteMakro als Ersatz für Spalte B
Diesen Makro in die Code-Seite eines Moduls schreiben
Vorgehen:
1) Excel-Datei öffnen
2) VB-Ediotr öffnen Alt+F11
Links siehst Du ein Fenster mit der Überschrift Projekt-VBA-Project.
In diesem Fenster ist die Arbeitsmappe unter dem Namen VBAProject(Dateiname) zu finden.
3) VBAProject(Dateiname) selektieren
3) rechte Maustaste->Modul->Modul einfuegen
in der Mitte geht das Code-Fenster Dateiname - Modulx(Code) auf
4) den folgenden Code per copy und Paste in dieses Fenster hineinkopieren
Code:
Function myUeberwachung(ws As Worksheet, s_Bereich, s_Name, l_Warnenab)
  Dim Zelle As Range, s_meldung As String, l_anz As Long, s_tmp As String
  If l_Warnenab <= ws.Application.WorksheetFunction.CountIf(ws.Range(s_Bereich), s_Name) Then
    s_meldung = _
        Der Name-> & s_Name &-> tritt auf Blatt-> & ws.Name _
        &-> in folgenden Zellen auf: & vbLf
    l_anz = 0
    For Each Zelle In ws.Range(s_Bereich)
      If Zelle.Value = s_Name Then
        s_tmp = Zelle.Address(rowabsolute:=False, Columnabsolute:=False)
        If l_anz = 0 Then
          s_meldung = s_meldung & s_tmp
        Else
          s_meldung = s_meldung & ,  & s_tmp
        End If
        l_anz = l_anz + 1
      End If
    Next
    s_meldung = s_meldung & vbLf & vbLf & Bitte ändern !
    MsgBox (s_meldung)
  End If
End Function
5) speichern mit Alt+S

*******************
B) Makro zur Änderungsüberwachung in die Code-Seiten der Tabellen
1) Tabelle1 im VBAProject-Fenster doppelklicken
in der Mitte geht das Code-Fenster Dateiname - Tabelle1(Code) auf
2) den folgenden Code per copy und Paste in dieses Fenster hineinkopieren
Code:
Const c_Name = reimann
Const c_Bereich = C4:C52
Const c_WarnenAb = 2

Private Sub Worksheet_Activate()
  Call myUeberwachung(ActiveSheet, c_Bereich, c_Name, c_WarnenAb)
End Sub

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
  Call myUeberwachung(ActiveSheet, c_Bereich, c_Name, c_WarnenAb)
End Sub
2a) c_Bereich entsprechend deinem Bereich N13:N52 anpassen
2b) c_Name auf den zu überwachenden Namen anpassen (z.B. reimann)
3) speichern mit Alt+S
4) B) für alle zu überwachenden Tabellen wiederholen anpassen

********************
C) Makro zum Überprüfung bei Datei öffnen
1) DieseArbeitsmappe im VBAProject-Fenster doppelklicken
in der Mitte geht das Code-Fenster Dateiname - DieseArbeitsmappe (Code) auf
ggf. vorhandenen Code löschen
2) den folgenden Code per copy und Paste in dieses Fenster hineinkopieren
Code:
Private Sub Workbook_Open()
  Dim w As Worksheet, ws_akt As Worksheet
  Set ws_akt = ActiveSheet
  For Each w In Worksheets
    If w.Name <> ws_akt.Name Then w.Activate
  Next
  ws_akt.Activate
  Set ws_akt = Nothing: Set w = Nothing
End Sub
3) speichern mit Alt+S
4) VB-Editor schliessen mit Alt+Q


So jetzt kannst Du ihn ausprobieren.
Sorge dafür, daß auf einem Tabellenblatt im überwachten Bereich der betreffende Name zweimal auftritt. Dann müßte eine Meldung kommen.
Wenn Du diese Datei speicherst und wieder öffnest, müßte die gleiche Meldung erscheinen.

GrußMatjes :)
 
  • #11
juhui es geht ^^

danke

nun öhm weiss ich net ob ich meine angaben zu ungenau gemacht habe oder es einfach gemacht habe...

das problem ist dies: wir haben mehrer Führer manchmal bis zu 10 Stück und wir müssen immer wider in der Zeile aufschreiben ob er arbeitet oder nicht

beispiel:

Führername010203
Tm234 129-5 BM-GDschulzeschulzereimannreimanngehriggehrig
Am841 033-4 BM-GDschulzeschulze

und was ich jetzt haben müsste wäre dass das Modul oder wie Ihr Profis das Ding auch immer nennt überprüft ob pro Spalte das Führer Kürzel 2 mal schon aufgeführt ist. Wie oben in der kleinen Tabelle erstellt sollte es dann solche doppeleinträge verhindern... wenn das ginge.

wenn es zu kompliziert ausgedrückt ist, kann ich dir sonst mal einen kleinen auszug aus dem File schicken. einfach melden wenn du was brauchst. Bin dir dankbar ^^

MFG Billy

P.S. Sorry für die Langeantwortzeit aber ich bin erst seid heute wider im Büro
 
  • #12
Hi Billy,

schick mir mal den kleinen Auszug.

Gruß Matjes :)
 
Thema:

Makro: Wenn Zelle=Wert Dann Meldung

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.836
Beiträge
707.957
Mitglieder
51.488
Neuestes Mitglied
elkhse
Oben