online 1
gast (50)

/ Forum / Tabellenkalkulation

TabellenkalkulationTabellenkalkulation

Fragevon naomi10123 vom 09.11.2019, 08:28 Options

Lösung

Excel - Makro Herausforderung!

Guten Morgen an alle!
Ich bin wiedermal mit meinem Latein am Ende. Ich wende mich hiermit an alle Makrospezialisten, da dieses Problem sonst nicht zu lösen ist. Die Sache ist nämlich ziemlich kompliziert. Ich weiß gar nicht wo ich anfangen soll.
Erstmals der Bereich: Spalte h4 bis h 145 und Spalte p4 bis p145. In diesem Bereich soll es möglich sein in jeder Zelle fogendes einzugeben: GAR
Nach der Texteingabe soll Excel einen Eingabefenster anzeigen mit dem Hinweis: "Bitte teile einem Garagenplatz von 1 bis 5 zu!"
Der Nutzer soll eine Zahl zwischen 1 und 5 eintragen und bestätigen. Nach der Bestätigung soll dan in der Zelle stehen GAR1 wenn der Nutzer eine 1 eingegeben hat.
Und damit das noch komplizierter ist, soll jeweils dieser Wert nur einmal eingetragen werden dürfen. Also wenn der Nutzer eingibt GAR und dann in der Eingabe eine 2, es aber schon eine GAR2 in dem oben genannten Bereich gibt, soll Excel eine Warnung herausgeben mit dem Text: Dieser Platz ist schon vergeben!
Schön wäre es, wenn er noch sagen könnte: Platz 3 und Platz 4 ist noch frei, aber das wäre schon traumhaft. Ist also nicht unbedingt erforderlich.
Ich würde euch für so ein Makro wirklich super dankbar.
Ich weiß allerdings, dass es diesmal eine wirkliche Herausforderung ist und erwarte also nicht wirklich viele Antworten. Den Oliver hätte ich es allerdings zugetraut!
Also vielen vielen herzlichen Dank im Voraus!!!
LG Naomi10123


Antwort schreiben

Antwort 1 von naomi10123 vom 09.11.2019, 08:40 Options

Hier noch die Datei, falls sie jemand braucht:

http://www.unet.univie.ac.at/~a0201657/Zimmerspiegel.xls

Nochmals vielen lieben Dank!

LG Naomi10123

Antwort 2 von coros vom 09.11.2019, 09:28 OptionsLösung

Lösung
Hallo Naomi,

ohne Deine Tabelle angesehen zu haben, habe ich ein VBA-Code erstellt, der das machen sollte, was Du Dir vorgestellt hast.

Kopiere das Makro in das VBA-Projekt des Tabellenblattes, indem er wirken soll.Teste das Makro aber bitte in einer Testdatei und nicht gleich in Deiner Originaldatei.

[b]Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Eingabe As Variant
Dim iRow As Integer
If Target.Column = 9 Or Target.Column = 16 Then
If Target.Row >= 4 And Target.Row <= 145 Then
Anfang:
Eingabe = InputBox("Bitte GAR-Nummer eintragen")
If Eingabe = False Or Eingabe = "" Then Exit Sub
For iRow = 4 To 145
If Cells(iRow, Target.Column) = "GAR" & Eingabe Then
MsgBox "GAR-Nummer bereits vergeben", vbInformation, "Abbruch..."
GoTo Anfang
End If
Next
Target.Cells = "GAR" & Eingabe
End If
End If
End Sub[/b]


Hier wird, sobald eine Zelle in Spalte I oder P ab Zeile 4 bis Zeile 145 markiert wird, ein Eingabefenster zur Eingabe einer Nummer geöffnet. Nach der Eingabe wird geprüft, ob Nummer bereits verwendet. Wenn ja, kein Eintrag, wenn nein, GAR und Nummer eintragen.

Teste das erst mal, ob Du das so meinst. Die andere Prüfung habe ich noch nicht eingebaut, da ich jetzt erst mal zu einem Termin muss. Wenn ich wieder da bin, werde ich scheun, wie man das realsieiren könnte.

Ich hoffe, Du kommst klar.
Solltest Du nicht wissen, wie Du den Code in Deine Datei bekommst, dann schau mal auf meiner HP in der Rubrik Anleitungen und dort dann in der Anleitungsnummer 2 nach. Dort stelle ich dazu eine bebilderte Anleitung zur Verfügung, die Dir sicherlich helfen wird.

Bei Fragen melde Dich.

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 3 von naomi10123 vom 09.11.2019, 16:35 Options

Hallo liebe Oliver!
Als erstes entschuldige, dass ich mich erst jetzt melde. Hatte leider auch ein paar Termine.
Ich habe gewußt, dass wenn das jemand kann, dann du. Schließlich hast du mir schon einmal ein tolles Makro geschrieben.
Vielen, vielen Tausend Dank!!!
Es funtioniert wuknderbar.
Ein kleinen Wunsch hätte ich noch dazu, ob es möglich wäre, die Zellen auf jede zweite zu reduzieren, bzw. kann ich ihm jede Zeile einzeln eingeben? Denn in manchen Zellen kommen andere Einträge und da stört diese Eingabe.
Habe probiert selbst die Zellennkummer einzugebe, aber irgendwie mag er mich nicht. Weiß leider nicht, wie ich das am besten machen sollte.
Wie gesagt, die anderen Anforderkungen sind nicht mehr so unbedingt notwendig, wen du Zeit und Lust hättes wäre skuper nett.
Nochmals vielen lieben Dank.
Bist eckht ein Excel-Genie!!!
LG Roman

Antwort 4 von coros vom 09.11.2019, 16:54 Options

Hallo Roman,

das sollte mit nachfolgendem Code funktionieren. Tausche den gegen den alten VBA-Code aus.

Teste das Makro aber bitte in einer Testdatei und nicht gleich in Deiner Originaldatei.

[b]Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Eingabe As Variant
Dim iRow As Integer
Dim i As Integer
If Target.Column = 9 Or Target.Column = 16 Then
For i = 4 To 145 Step 2
If i = Target.Row Then
Anfang:
Eingabe = InputBox("Bitte GAR-Nummer eintragen")
If Eingabe = False Or Eingabe = "" Then Exit Sub
For iRow = 4 To 145
If Cells(iRow, Target.Column) = "GAR" & Eingabe Then
MsgBox "GAR-Nummer bereits vergeben", vbInformation, "Abbruch..."
GoTo Anfang
End If
Next
Target.Cells = "GAR" & Eingabe
End If
Next
End If
End Sub[/b]


Ich hoffe, Du mientest das so. Wenn nicht oder bei Fragen melde Dich.

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 naomi10123 vom 09.11.2019, 17:15 Options

Hi Oliver!
Ja vielen dank, das funktioniert natürlich wie immer einwandfrei. TAsend Dank.
Wie kann ich allerdings da dam Bereich selbst festlegen? Ich braukche zum Beispiel
von 5 to 29 Step 2
aber auch 32 to 56 usw.
Kann ich einfach schreiben
For i = 5 to 20 Step 2
and for i = 32 to 56

oder wie kann ich das sonst machen? mit dem and funktioniert das nicht wirklich, wahrscheinlich ist das ein andere Befehl.

Vielen Dank im Voraus Oliver!!!
LG Roman

Antwort 6 von Marie vom 09.11.2019, 18:09 Options

Hi Roman,

Zitat:
Kann ich einfach schreiben
For i = 5 to 20 Step 2
and for i = 32 to 56


nein, so kannst Du das nicht schreiben.

Sollen da nur zwischendurch ein paar Nummern nicht vergeben werden, dann könntest Du schreiben:

For i = 5 to 145 Step 2
if i <> 33 and i <> 36 then
'hier dein code
endif
next

Aber um Dir das optimale Ergebnis zu liefern müsste man wissen, ob Regelmäßigkeiten vorhanden sind und ob wirklich bei der zweiten Schleife kein Step 2 mehr stehen soll?

Im Zweifelsfall kopierst Du die ganze Schleife und durchläufst dort i = 32 bis 56

Sorry, ich kenne Deine Exceldatei nicht, ich lade mir grundsätzlich hier keine Dateien auf den Rechner. Ich habe jetzt nur auf Deine Frage geantwortet.

Gruß Marie

Antwort 7 von coros vom 09.11.2019, 18:38 Options

Hallo,

wie Marie es bereits geschrieben hat, kann man es so wie Du es Dir vorgestellt hast, nicht machen. Das muss man über If-Abfragen regeln.
Eine andere Möglichkeit wäre, man würde mit dem Blattschutz (der bei Deiner Datei ja bereits aktiviert ist) und freien und gesperrten Zellen arbeiten. Dazu müssten bei allen Zellen, außer denen in Spalte Hund P, die trotz Blattschutz bearbeitet werden sollen, in den Zelleneigenschaften im Registerblatt "Schutz" der Haken vor "Gesperrt" entfernt werden. Dann müsstest Du in Spalte H und P in den Zellen, bei denen die Eingabebox erscheinen soll, das gleiche machen, bzw. in Deiner Datei müsstest DU bei den Zellen, bei deren Anwahl keine Eingabebox erscheinen soll, wieder die Zelle sperren. In dem VBA-Code würde man dann nur abfragen, ob eine Zelle in Spalte H oder P markiert wurde und ob diese Zelle in Spalte H oder P nicht geschützt ist. Somit würde die Eingabebox nur öffnen, wenn die Zelle nicht geschützt ist.
Der Code würde dann wie folgt aussehen und käme in das VBA-Projekt "DieseArbeitsmappe".

Kopiere das Makro in ein StandardModul und starte es z.B. über eine Befehlsschaltfläche
Teste das Makro aber bitte in einer Testdatei und nicht gleich in Deiner Originaldatei.

[b]Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Dim Eingabe As Variant
Dim iRow As Integer
If Target.Column = 8 Or Target.Column = 16 And Target.Cells.Locked = False Then
Anfang:
Eingabe = InputBox("Bitte GAR-Nummer eintragen")
If Eingabe = False Or Eingabe = "" Then Exit Sub
For iRow = 4 To 145
If Cells(iRow, Target.Column) = "GAR" & Eingabe Then
MsgBox "GAR-Nummer bereits vergeben", vbInformation, "Abbruch..."
GoTo Anfang
End If
Next
Target.Cells = "GAR" & Eingabe
End If
End Sub
[/b]


Ich habe das mal in Deiner Datei im Blatt "Heute" in einigen Zellen realisiert (alle Zellen die orange sind). Lade die Datei mal hier herunter.

Schau Dir das mal an.
Bei Fragen melde Dich.

Antwort 8 von naomi10123 vom 09.11.2019, 20:25 Options

Hallo Marie!
Vielen Dank für deine Antwort! Du hast mir natürlich auch damit geholfen, da ich keine Ahnung von Basic habe. Ich werde das auch so ausprobieren, damit lerne ich das am besten.
Vielen Dank für die nette und schnelle Hiilfe!
LG Roman

Antwort 9 von naomi10123 vom 09.11.2019, 20:27 Options

Hallo Oliver!
Was kann ich noch dazu sagen? Nur noch PERFEKT!!!
Ich hätte es mir nicht gedacht, dass das jemand scharft!
Aber du hast bewiesen, dass Makros deine Welt ist!
Ich kann mir gar nicht oft genug bei dir bedanken!
Trotzdem nochmal vielen Dank!
LG Roman

Antwort 10 von naomi10123 vom 09.11.2019, 21:18 Options

Entschuldige nochmals Oliver!
Könntes du mir die Datei neu ins Netz stelle? Die aktuelle Datei dort ist irgenwie beschädigt, denn es fahlen ein paar Tabellen-Bläter unter anderen auch das wichtigste Blatt HEUTE
Vielen Dank!
LG Roman

Antwort 11 von naomi10123 vom 10.11.2019, 03:25 Options

Hallo nochmals Oliver!
Es gibt leider Probleme mit dem zweiten Makro. Ich kann die Zellen nicht sperren, da ich sie auch für andere Einträge benutze und außerdem ist diese Datei noch an andere Dateien verknüpft und das macht Probleme.

Die beste Lösung war das zweite Makro:


Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Eingabe As Variant
Dim iRow As Integer
Dim i As Integer
If Target.Column = 9 Or Target.Column = 16 Then
For i = 4 To 145 Step 2
If i = Target.Row Then
Anfang:
Eingabe = InputBox("Bitte GAR-Nummer eintragen")
If Eingabe = False Or Eingabe = "" Then Exit Sub
For iRow = 4 To 145
If Cells(iRow, Target.Column) = "GAR" & Eingabe Then
MsgBox "GAR-Nummer bereits vergeben", vbInformation, "Abbruch..."
GoTo Anfang
End If
Next
Target.Cells = "GAR" & Eingabe
End If
Next
End If
End Sub


Allerdings habe ich noch immer dann das Problem mit der Unregelmäßigkeit der Zellen.

Könntest du mir bitte sagen, wie soll ich die Schleife kopieren? Ich habe schon herumprobiert aber irgendwie weiß ich nicht genau, wo die anfängt und wo sie aufhört.

Außerdem kann ich dieses Makro nicht in die "DieseArbeitsmappe" speichern, da ich hier schon ein anderes Makro (das apropos auch von dir ist) stehen habe und der VBA-Editor gibt mir immer eine Fehlermeldung, dass ich dieses Worksheet und diese Funktion benutz habe, und ich den Namen ändern soll. Habe mich natürlich Nüße ausgekannt. Habe auch im Internet gesucht, aber nichts vernünftiges herausgefunden.

Ich weiß, ich bin lässtig, aber bitte bitte bitte nur noch dieses eine Mal, dann gebe ich eh ruhe!

Vielen vielen Dank!
LG Roman

P.S. Die verschiedene Bereiche wären
5 bis 29
32 bis 56
60 bis 84
87 bis 113 und
117 bis 145

Antwort 12 von naomi10123 vom 10.11.2019, 05:58 Options

Guten Morgen Marie!
Habe gesehen, dass du gerade online bist. Könnst du mir vielleicht eine kleine Hilfestellung zu den Kopieren de Schleife geben?
Ich könnte es ja alleine machen, aber leider weiß ich nicht, wo der Anfang und wo das Ende der Schleife ist!
Die Hilfe bezieht sich auf das letztangeführte Makro. Vielen Dank im Voraus!
LG Roman

Antwort 13 von Marie vom 10.11.2019, 06:02 Options

Zitat:
P.S. Die verschiedene Bereiche wären
5 bis 29
32 bis 56
60 bis 84
87 bis 113 und
117 bis 145


For i = 5 To 145

If i = 30 Then i = 32
If i = 57 Then i = 60
If i = 85 Then i = 87
If i = 114 Then i = 117

'Hier kommt Dein Code

Next i


Gruß Marie

Antwort 14 von naomi10123 vom 10.11.2019, 06:13 Options

Hi Marie! Vielen lieben Dank für die schnelle Hilfe. Mein Makro sieht jetzt so aus:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Eingabe As Variant
Dim iRow As Integer
Dim i As Integer
If Target.Column = 9 Or Target.Column = 16 Then
For i = 4 To 145 Step 2
If i = 30 Then i = 32
If i = 57 Then i = 60
If i = 85 Then i = 87
If i = 114 Then i = 117
Anfang:
Eingabe = InputBox("Bitte GAR-Nummer eintragen")
If Eingabe = False Or Eingabe = "" Then Exit Sub
For iRow = 4 To 145
If Cells(iRow, Target.Column) = "GAR" & Eingabe Then
MsgBox "GAR-Nummer bereits vergeben", vbInformation, "Abbruch..."
GoTo Anfang
End If
Next i
Target.Cells = "GAR" & Eingabe
End If
Next i
End If
End Sub


funktioniert aber leider nicht.
Ich kann ihm auch nicht in die "DieseArbeitsmappe" kopieren
da hier schon ein anderer Makro steht..
Weißt du vielleicht was zu tun ist?
LG Roman

Antwort 15 von coros vom 10.11.2019, 07:33 Options

Hallo Roman,

kopiere den nachfolgenden VBA-Code in das VBA-Projekt "DieseArbeitsmappe". Er sollte funktionieren.

[b]Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Dim Eingabe As Variant
Dim iRow As Integer
Dim i As Integer
If Target.Column = 8 Or Target.Column = 16 Then
For i = 4 To 145 Step 2
If i = 30 Then i = 31
If i = 57 Then i = 59
If i = 58 Then i = 59
If i = 85 Then i = 86
If i = 114 Then i = 116
If i = 115 Then i = 116
If i = Target.Row Then
Anfang:
Eingabe = InputBox("Bitte GAR-Nummer eintragen")
If Eingabe = False Or Eingabe = "" Then Exit Sub
For iRow = 4 To 145
If Cells(iRow, Target.Column) = "GAR" & Eingabe Then
MsgBox "GAR-Nummer bereits vergeben", vbInformation, "Abbruch..."
GoTo Anfang
End If
Next
Target.Cells = "GAR" & Eingabe
End If
Next
End If
End Sub[/b]


Der Fehler, warum Dein Code zu einer Fehlermeldung geführt hatte, lag u.a. daran, dass es das Ereigniss "Private Sub Worksheet_SelectionChange(ByVal Target As Range)" im VBA-Projekt "DieseArbeitsmappe" nicht gibt. Dort lautet dieses "Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)". Die von Dir verwendete Ereigniss ist für das VBA-Projekt eines Tabellenblattes.

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 16 von naomi10123 vom 10.11.2019, 08:12 Options

Guten Morgen Oliver!
Vielen vielen vielen vielen vielen Dank!!!!
Das ist echt klasse!!!
Habe da noch ein wenig die Zahlen geändert, damit auch die richtigen Zellen zugeordnet werden.
Das war echt schwere Geburt!

Leide funktioniert die Geschichte mit der anderen Schleife nicht. Ich meine die Warnung, wenn ein Platz vergeben wurde, dass man ihm dann nicht mehr auswählen darf. Das geht leider nicht mehr. Aber ist egal, so ist das auch schon eine sehr große Hilfe!
Also vielen Dank und noch ein schönes WE!
LG Roman

Antwort 17 von naomi10123 vom 10.11.2019, 08:17 Options

Sorry Oliver!
Nehme alles zurück. Nach dem ich es alles gespeichert habe und die Datei neu gestartet habe funktioniert alles einwandfrei!!!
Also entschuldige bitte nochmals.
Ein hoch auf die Excelgenies!!!
Bestes Forum!!!
Oliver is the best!!!
LG Roman

Antwort 18 von coros vom 10.11.2019, 08:22 Options

Hallo Roman,

freut mich, dass alles funktioniert. Danke auch für die Lobeshymnen. Aber auch Marie hat entscheidend daran mitgewirkt und auch ihr gebürt ein Lob.

Danke auch für die Rückmeldung.

MfG,
Oliver
Jeder macht was er will, keiner macht was er soll, aber alle machen mit.

Antwort 19 von naomi10123 vom 10.11.2019, 15:43 Options

Hallo nochmals!
Natürlich vielen Dank auch an die unermüdliche Marie, schon in aller Früh mit ihren Ratschlägen parat steht.
Wir alls wissen das zu schätzen.
Also Marie an ein riesen großes Lob an dich!!!
Danke dake danke!!!
LG Roman

Antwort 20 von Marie vom 10.11.2019, 16:01 Options

Bitte bitte gern geschehen. Wäre aber nett, wenn Du ein klein wenig selbst mitdenken würdest. Hab extra nicht nachgesehen, was es bei Step 2 heissen müsste, weil ich dachte das wenigstens kannst Du alleine anpassen. Ich denke mal es ist immer noch falsch?? Aber wenn, dann mach das mal bitte alleine. Habe mir weder Deine Datei heruntergeladen (sorry, das tue ich grundsätzlich nie), noch oben mitgelesen um was es geht, weiss also nicht, ob Du jetzt mit Step 2 nur gerade Zahlen brauchst oder mit welcher Zahl Du dann weitermachen musst, ob du mit ungeraden weitermachen musst oder nicht??

Zitat:
For i = 4 To 145 Step 2
If i = 30 Then i = 31
If i = 57 Then i = 59
If i = 58 Then i = 59


Kannst Du DAS jetzt alleine anpassen, wenn es falsch ist???

:-))

Gruß Marie

Ähnliche Themen

Excel Makro erscheint nicht in Makroliste
H.E.N.K  01.02.2007 - 218 Hits - 1 Antwort

Excel; Automatisches Makro
ernst-egon  25.03.2007 - 172 Hits - 2 Antworten

Excel Makro in viele Excel Files exportieren
SteffenVV  23.07.2007 - 143 Hits - 1 Antwort

Makro in Excel für Pfadangabe
randy08  25.10.2007 - 171 Hits - 6 Antworten

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Mon Jan 26 01:23:17 2026