Clever-Excel-Forum

Normale Version: VBA - Werte in Tabellen Übertragen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3
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
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.
Hi Andi,

(04.12.2015, 10: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:
  1. Das Makro sucht in der Auswahl nach dem Wert in Spalte A und der Passung in Spalte B,
  2. dieser Passungswert wird entsprechend in C und D eingetragen und die Zelle gegen Überschreiben geschützt
  3. 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
ABCDEFGHIJKLM
5ProtokollPassungsauswahl
6
7MaßToleranzotutgmkmüberh5j6
82j64-22,0041,99800-44-2
93j66-23,0062,99830-56-2
104j5#NV#NV#NV#NV60-67-2
117j67-27,0076,998100-88-3
1215j68-315,00814,997
1311h50-811,00010,992
146h6#NV#NV#NV#NV
154j66-24,0063,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


[attachment=3456]
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
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.
Hi Andi,

(04.12.2015, 17: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.
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 Wink
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
Hi André,

(05.12.2015, 07: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.
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 Wink

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.
Seiten: 1 2 3