Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1564to1568
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
VBA 2 Spalten übereinstimmung
03.07.2017 20:20:10
Christian
Moin alle zusammen,
ich mühe mich wieder an VBA ab und schaffe es einfach nicht..
Es geht darum, das ich die Werte aus Spalte C in der Tabelle Planmontage in die Spalte D in der Tabelle RealMontage übertragen möchte und zwar an den Stellen, wo die Kriterien Version und Phase übereinstimmen
Also zum Beispiel UAE01 und CF-3 haben die Montagedauer 4
Nach einer halben Stunden habe ich folgende Codezeilen produziert und frage mich jetzt wieder, was soll bloss in die Schleife rein... Anbei meine Beispieldatei
https://www.herber.de/bbs/user/114674.xlsm

Option Explicit
Sub Montagedauer_uebernehmen()
Application.EnableEvents = False
Dim AnZeilen As Long, AnZeilen2 As Long, J As Long, i As Long
AnZeilen = tblRealMontage.Cells(Rows.Count, 1).End(xlUp).Row
AnZeilen2 = tblPlanMontage.Cells(Rows.Count, 1).End(xlUp).Row
'Planmontage
For J = 2 To AnZeilen2
'RealMontage
For i = 2 To AnZeilen
If tblPlanMontage.Cells(J, 3) = tblRealMontage.Cells(n, 4) And tblPlanMontage.Cells(J, 2) = _
tblRealMontage.Cells(n, 3) Then
Else
End If
Next J
Next i
End With
End Sub

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA 2 Spalten übereinstimmung
03.07.2017 21:05:53
Christian
Jetzt bekomme ich beim fett markierten die Meldung, das diese Objekt nicht unterstützt wird.. :/

Private Sub CommandButton1_Click()
Application.EnableEvents = False
Dim AnZeilen As Long, AnZeilen2 As Long, J As Integer, i As Integer
AnZeilen = tblRealMontage.Cells(Rows.Count, 1).End(xlUp).Row
AnZeilen2 = tblPlanMontage.Cells(Rows.Count, 1).End(xlUp).Row
'Planmontage
For J = 2 To AnZeilen2
'RealMontage
For i = 2 To AnZeilen
If tblPlanMontage.Cells(J, 3) = tblRealMontage.Cells(i, 4) And tblPlanMontage.Cells(J, 2) = _
tblRealMontage.Cells(i, 3) Then
tblPlanMontage(J, 3).Value = tblRealMontage(i, 4).Value
End If
Next i
Next J
End Sub

Anzeige
Code läuft störungsfrei, bewirkt aber nichts
03.07.2017 21:56:40
Christian
Jetzt läuft der Code störungsfrei durch aber es werden nicht die Werte aus Planmontage Spalte C in RealMontage Spalte D übertragen. Anbei meine aktuelle Beispieldatei
https://www.herber.de/bbs/user/114676.xlsm
Vielen Dank für euren Support.
Private Sub CommandButton1_Click()
Application.EnableEvents = False
'PlanMontage
Dim AnZeilen As Long
Dim j As Integer
'RealMontage
Dim Anzeilen2 As Long
Dim i As Integer
AnZeilen = tblPlanMontage.Cells(Rows.Count, 1).End(xlUp).Row
Anzeilen2 = tblRealMontage.Cells(Rows.Count, 1).End(xlUp).Row
'Planmontage
For j = 2 To AnZeilen
'RealMontage
For i = 2 To Anzeilen2
If tblPlanMontage.Cells(j, 2) = tblRealMontage.Cells(i, 3) And tblPlanMontage.Cells(j, 1) = _
tblRealMontage.Cells(i, 2) Then
tblPlanMontage.Cells(j, 3).Value = tblRealMontage.Cells(i, 4).Value
End If
Next i
Next j

End Sub
Anzeige
AW: Code läuft störungsfrei, bewirkt aber nichts
04.07.2017 00:09:59
Werner
Hallo Christian,
wozu hast du im Code Application.EnableEvents = False drin? Das beäuchtest du nur, wenn du in deinen Blättern Event-Makros drin hättest. Das hast du aber, zumindest in deiner hochgeladenen Datei, nicht, so dass das überflüssig ist. Wenn du in deiner Originaldatei derartige Makros hast, dann musst du die Codezeile wieder rein machen. Allerdings musst du die Events dann am Ende des Codes auch wieder einschalten.
Die If Schleifen habe ich umgebaut von If .... And ... auf zwei separate If-Schleifen. Das hat den Vorteil, dass nicht immer beides geprüft werden muss, wenn schon die erste If-Schleife nicht zutrifft und spart Bearbeitungszeit.
Was bei dir aber der Grund dafür war, dass das Makro vermeintlich nicht läuft war diese Codezeile:
tblPlanMontage(J, 3).Value = tblRealMontage(i, 4).Value

Das hat dir die Daten von Spalte D RealMontage nach Spalte C PlanMontage geschrieben. Du wolltest es aber gerade umgekehrt.
Die Codezeile müsste also so lauten:
tblRealMontage(i, 4).Value = tblPlanMontage(J, 3).Value
Hier deine Datei mit dem geänderten Makro:
https://www.herber.de/bbs/user/114678.xlsm
Gruß Werner
Anzeige
Danke :)
04.07.2017 12:35:03
Christian
Moin Werner und vielen Dank :) Genau so wollte ich es haben. Gibt es vielleicht noch eine Möglichkeit, den Code etwas zu beschleunigen? Heute Morgen konnte ich mich leider nicht gleich melden.
Viele Grüße
Christian
AW: Danke :)
04.07.2017 13:45:26
Werner
Hallo Christian,
wenn du viele Formeln in den Blättern hast, dann könnte das hier helfen:
'## vor den For-Schleifen
Application.ScreenUpdating = False 'war ja glaub ich schon drin
Application.Calculation = xlCalculationManual
'## nach den For-Schleifen
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Ansonsten kommt es halt darauf an um wie viele Zeilen es geht, die durchlaufen werden müssen. Das dauert dann halt entsprechend.
Gruß Werner
Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige