Registriert seit: 26.11.2015
Version(en): 2013
04.12.2015, 11:17
Hallo, ich habe in meinem EXCEL-Sheet in der Tabelle 'Passungsauswahl' mehrere errechnete Werte in verschiedenen Zellen stehen (Je Zelle steht ein Zahlenwert). Jetzt möchte ich in einer anderen Tabelle ('Protokoll') folgendes Anzeigen lassen:
Die Werte sollen von den Zellen der Tabelle 'Passungsauswahl' nach 'Protokoll' eingefügt werden, wenn: - Zahlenwerte in 'Passungsauswahl' vorhanden, dann kopiere diese ins 'Protokoll' . Diese Werte sollen in dam Fall dann nicht mehr geändert werden können. (Z.B. durch ständiges Koperen oder Schleifen?!") - keine Zahlenwerte in 'Passungsauswahl' vorhanden, dann nicht kopieren und im 'Protokoll' eine manuelle Eingabe von Zahlenwerten zulassen Ich habe das nicht hingekriegt. Ich habe mal ein Makro aufgenommen, wo ich von der Ersten Tabelle zur zweiten Tabelle hin 2 Beispielzellen Zellen via STRG+C & STR+V eingefügt habe. Aber das Sheet soll ja automatisch und unter den oben genannten Bedingungen arbeiten….Code: Sub Maß_1() ' ' Maß_1 Makro ' Grenzabmaße von Maß 1 in das Protokoll kopieren, sobald ein Wert eingegeben ist. Ansonsten mache nichts. '
' Range("E21:E22").Select Selection.Copy Sheets("Protokoll").Select Range("G11:G12").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False End Sub
Ich habe mal ein Tutorial auf Youtube gesehn, allerdings ist das für mich zu schwer nach zu vollziehen, um es für meine Bedürfnisse anzupassen. Könntet Ihr mir da bitte weiterhelfen?GrußAndi
Registriert seit: 28.05.2014
Version(en): 2013 / 2016
04.12.2015, 11:24
(Dieser Beitrag wurde zuletzt bearbeitet: 04.12.2015, 11:25 von GMG-CC.)
Moin Andi,
schön dass du das Tutorial (welches ich mir nicht angesehen habe) verlinkt und den bisherigen Code gepostet hast. Besser allerdings wäre ein Link zu deiner Excel-Mappe (oder direkt hoch geladen) mit Wunsch-Ergebnis.
Beste Grüße Günther
Excel-ist-sexy.de …schau doch mal rein! Der Sicherheit meiner Daten wegen lade ich keine *.xlsm bzw. *.xlsb- Files mehr herunter! -> So geht's ohne!
Registriert seit: 10.04.2014
Version(en): 2016 + 365
04.12.2015, 15:00
(Dieser Beitrag wurde zuletzt bearbeitet: 04.12.2015, 15:03 von Rabe.)
Hi Andi, (04.12.2015, 11:17)Andi_Koer_1234 schrieb: Die Werte sollen von den Zellen der Tabelle 'Passungsauswahl' nach 'Protokoll' eingefügt werden, wenn:[/size]
- Zahlenwerte in 'Passungsauswahl' vorhanden, dann kopiere diese ins 'Protokoll' . Diese Werte sollen in dam Fall dann nicht mehr geändert werden können[/size]. (Z.B. durch ständiges Koperen oder Schleifen?!") - keine Zahlenwerte in 'Passungsauswahl' vorhanden, dann nicht kopieren und im 'Protokoll' eine manuelle Eingabe von Zahlenwerten zulassen[/size] Könntet Ihr mir da bitte weiterhelfen? ich habe hier mal aus Deinem anderen Thema den Ausschnitt kopiert als Vorlage für die Makros. Du willst also für die Passungen, die in der Passungsauswahl nicht vorhanden sind, die Zellen in C und D zur manuellen Eingabe freigeben und bei den anderen die entsprechenden Werte drin stehen haben. Vorgaben: Die Tabelle ist geschützt. Nur die Zellen in Spalte A und B sind zur Eingabe frei. Aufgabe für das Makro: - Das Makro sucht in der Auswahl nach dem Wert in Spalte A und der Passung in Spalte B,
- dieser Passungswert wird entsprechend in C und D eingetragen und die Zelle gegen Überschreiben geschützt
- Wenn es in der Auswahl keinen Wert gibt (hier in der Tabelle #NV), wird die Zelle C und D freigegeben, eine manuelle Eingabe erfolgt und danach wird diese Zelle wieder geschützt.
Tabelle2 | A | B | C | D | E | F | G | H | I | J | K | L | M | 5 | Protokoll | | | | | | | | Passungsauswahl | | | | | 6 | | | | | | | | | | | | | | 7 | Maß | Toleranz | ot | ut | gm | km | | | über | h5 | | j6 | | 8 | 2 | j6 | 4 | -2 | 2,004 | 1,998 | | | 0 | 0 | -4 | 4 | -2 | 9 | 3 | j6 | 6 | -2 | 3,006 | 2,998 | | | 3 | 0 | -5 | 6 | -2 | 10 | 4 | j5 | #NV | #NV | #NV | #NV | | | 6 | 0 | -6 | 7 | -2 | 11 | 7 | j6 | 7 | -2 | 7,007 | 6,998 | | | 10 | 0 | -8 | 8 | -3 | 12 | 15 | j6 | 8 | -3 | 15,008 | 14,997 | | | | | | | | 13 | 11 | h5 | 0 | -8 | 11,000 | 10,992 | | | | | | | | 14 | 6 | h6 | #NV | #NV | #NV | #NV | | | | | | | | 15 | 4 | j6 | 6 | -2 | 4,006 | 3,998 | | | | | | | |
verwendete Formeln | | Zelle | Formel | Bereich | N/A | C8:C15 | =INDEX($J$8:$M$11;VERGLEICH(VERWEIS(9^9;1*[@Maß]);$I$8:$I$11;1);VERGLEICH(WECHSELN(B8;VERWEIS(9^9;1*[@Maß]);"";1);$J$7:$M$7;)) | | | D8: D15 | =INDEX($J$8:$M$11;VERGLEICH(VERWEIS(9^9;1*[@Maß]);$I$8:$I$11;1);VERGLEICH(WECHSELN($B8;VERWEIS(9^9;1*[@Maß]);"";1);$J$7:$M$7;)+1) | | | E8:F15 | =VERWEIS(9^9;1*LINKS($A8;SPALTE(1:1)))+C8/1000 | | |
Excel-Inn.de | Hajo-Excel.de | XHTML-Tabelle zur Darstellung in Foren, einschl. der neuen Funktionen ab Version 2007 | Add-In-Version 19.08 einschl. 64 Bit |
Passungsauswahl.xlsb (Größe: 9,85 KB / Downloads: 7)
Registriert seit: 26.11.2015
Version(en): 2013
Hallo, also Welches Makro Rabe? Da ist keines in deiner Datei sondern nur normale EXCEL Formeln, die mir nicht Helfen. Ich möchte einfach folgendes ans Laufen bringen, momentan habe ich da einen Laufzeitfehler. Gedacht habe ich mir dabei: WENN "E21:22" irgendeinen einen Wert beinhalten, Dann kopiere von X nach Y. WENN "E21:22" keinen Wert beinhalten, dann mache nichts. Code: Sub Maß_1() ' ' Maß_1 Makro '
' If "E21:E22" Then Range("E21:E22").Select Selection.Copy Sheets("Protokoll").Select Range("G11:G12").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False End If If Not Range("E21:E22") Is Nothing Then End If
End Sub
Gruß Andi
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallo Andy,
Ralf hat ja nur von Aufgaben für das Makro geschrieben und wollte bestimmt nur wissen, ob er das richtig interpretiert hat.
Ich wollte aber einen anderen Hinweis loswerden, hatte ich auch schon mal erwähnt, Wenn Du Sollmaß und Passung getrennt eingibst, brauchst Du die Verweise nicht, z.B. VERWEIS(9^9;1*[@Maß]) Die waren nur dazu da, um Sollmaß und Passung zu trennen.
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 10.04.2014
Version(en): 2016 + 365
04.12.2015, 19:54
(Dieser Beitrag wurde zuletzt bearbeitet: 04.12.2015, 19:54 von Rabe.)
Hi Andi, (04.12.2015, 18:13)Andi_Koer_1234 schrieb: also Welches Makro Rabe? Da ist keines in deiner Datei sondern nur normale EXCEL Formeln, die mir nicht Helfen. Ja klar, da ist kein Makro drin, aber bevor jemand ein Makro schreibt, sollte er doch zuerst wissen, was es tun soll. Wie soll das Makro die richtigen Werte zum kopieren finden? Die Formeln bringen schon was, denn durch das Makro könntest Du diese Formeln in die Zellen eintragen lassen und dann durch die Werte ersetzen. Wenn Du für die Formeln noch mit WENNFEHLER das Nicht-Finden abfängst, steht in diesen Feldern dann nichts drin. Jetzt nur noch die vollen Zellen schützen und die leeren für die Bearbeitung freigeben. Und das alles kannst Du durch Aufzeichnen erreichen. Dann hast Du schon mal ein Makro, das funktioniert, das kann dann hier im Forum auf das Relevante gekürzt und verallgemeinert werden.
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallöchen, im Prinzip wird das ein Ereignismakro WorkSheet_Change. Dazu überlegen wir uns die prinzipielle Vorgehensweise. Teil 1: Ereignisse deaktivieren Wenn die Eingabe in Spalte B erfolgte und selbige in Zeile 7 enthalten ist, dann Wenn in C keine Formel steht, dann trage die Formel ein und sperre die Zelle, Wenn in D keine Formel steht, dann trage die Formel ein und sperre die Zelle, ansonsten gib die Zellen C und D frei. Ende Wenn die Eingabe in Spalte B erfolgte und selbige in Zeile 7 enthalten ist, dann Teil 2: Wenn die Eingabe in Spalte C oder D erfolgte, dann Wenn C ok, dann Sperren Wenn D ok, dann sperren. Ende Wenn die Eingabe in Spalte C oder D erfolgte, dann So, damit haben wir auch gleich die Kommentare und brauchen nur noch VBA drum herum
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallöchen, hier wäre nun mein codevorschlag. Er hat auch noch etwas Verbesserungspotentiel. Er wirkt z.B. bei EIngabe in der kompletten Spalte B. Das könnte man noch auf den Tabellenbereich beschränken. Code: Private Sub Worksheet_Change(ByVal Target As Range) 'Teil 1: 'Ereignisse deaktivieren Application.EnableEvents = False 'Tabelle entsperren ActiveSheet.Unprotect 'Wenn die Eingabe in Spalte B erfolgte und selbige in Zeile 7 enthalten ist, dann If Target.Column = 2 And WorksheetFunction.CountIf(Rows(7), Target.Value) > 0 Then 'Wenn in C keine Formel steht, dann trage die Formel ein und sperre die Zelle, If Not Cells(Target.Row, 3).HasFormula Then Cells(Target.Row, 3).FormulaR1C1 = _ "=INDEX(R8C10:R11C13,MATCH([@Maß],R8C9:R11C9,1),MATCH(SUBSTITUTE(RC[-1],[@Maß],"""",1),R7C10:R7C13,))" Cells(Target.Row, 3).Locked = True 'Ende Wenn in C keine Formel steht, dann trage die Formel ein und sperre die Zelle, End If 'Wenn in D keine Formel steht, dann trage die Formel ein und sperre die Zelle, If Not Cells(Target.Row, 4).HasFormula Then Cells(Target.Row, 4).FormulaR1C1 = _ "=INDEX(R8C10:R11C13,MATCH([@Maß],R8C9:R11C9,1),MATCH(SUBSTITUTE(RC[-2],[@Maß],"""",1),R7C10:R7C13,)+1)" Cells(Target.Row, 4).Locked = True 'Ende Wenn in D keine Formel steht, dann trage die Formel ein und sperre die Zelle, End If 'ansonsten (wir bleiben in Spalte 2) ElseIf Target.Column = 2 Then 'gib die Zellen C und D frei. Cells(Target.Row, 3).Locked = False Cells(Target.Row, 4).Locked = False 'Ende Wenn die Eingabe in Spalte B erfolgte und selbige in Zeile 7 enthalten ist, dann End If 'Teil 2: 'Wenn die Eingabe in Spalte C oder D erfolgte, dann If Target.Column = 3 Or Target.Column = 4 Then 'Wenn C ok, dann Sperren If Not IsError(Cells(Target.Row, 3)) Then Cells(Target.Row, 3).Locked = True 'Wenn D ok, dann sperren. If Not IsError(Cells(Target.Row, 4)) Then Cells(Target.Row, 4).Locked = True 'Ende Wenn die Eingabe in Spalte C oder D erfolgte, dann End If 'Tabelle sperren ActiveSheet.Protect 'Ereignisse aktivieren Application.EnableEvents = True End Sub
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 10.04.2014
Version(en): 2016 + 365
05.12.2015, 11:00
(Dieser Beitrag wurde zuletzt bearbeitet: 05.12.2015, 11:01 von Rabe.)
Hi André, (05.12.2015, 08:08)schauan schrieb: hier wäre nun mein codevorschlag. Er hat auch noch etwas Verbesserungspotentiel. Er wirkt z.B. bei EIngabe in der kompletten Spalte B. Das könnte man noch auf den Tabellenbereich beschränken. mMn fehlt da noch die Überwachung von Spalte A. Wenn ich mir den Vorgang bei Ausfüllen einer Liste vor Augen führe, dann wird zuerst in eine der beiden Spalten etwas eingetragen und dann in der anderen (vermutlich zuerst das Maß und dann die Toleranz). Egal, ob A oder B zuerst ausgefüllt wird, es wird das Blatt schreibgeschützt und es stehen in C und D die #NV und in die zweite der Spalten kann nichts mehr eingetragen werden. Außerdem sind alle Zeilen unterhalb der bisher beschriebenen ebenfalls schreibgeschützt. Ich glaube, es wäre besser, in dem Fall, daß wenn A und/oder B endgültig leer sind, dann auch in C und D keine Formel einzutragen. Vielleicht könnte eine Userform zur Eingabe von A und B benutzt werden, dann ist sichergestellt, daß der Blattschutz erst dann gesetzt ist, wenn der sowohl Maß als auch Toleranz eingetragen sind und auch der Blattschutz für die bsher nicht beschriebenen Zeilen ist kein Problem mehr.
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallo Ralf, mal seh'n, was Andi dazu sagt. Wenn oberhalb und unterhalb der Tabelle nichts eingegeben werden muss. reicht natürlich der Blattschutz zur Begrenzung. Die Prüfung von Spalte A hat auch ihren Reiz. Ein userform ist nicht unbedingt nötig, das geht auch ausreichend über die Ereignisse zu regeln. Das sehe ich hier so etwas als Geschmacksfrage Allerdings, wenn in diesem Projekt einmal mit VBA angefangen wurde und beide Eingaben geprüft werden sollen, ist die Arbeit mit Formeln in der Tabelle aus meiner Sicht nicht mehr besonders sinnvoll. Da kann man die Daten gleich direkt per code übernehmen.
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
|