Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
684to688
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
684to688
684to688
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

VBA Makro

VBA Makro
27.10.2005 14:36:06
Sebastian
Hallo,
ich möchte ein kleines Makro in eine Tabelle einbauen, beherrsche aber kein VBA. Würde mich sehr freuen, wenn jemand eine kleine Hilfestellung geben könnte.
Bitte gehe von 2 Dateien mit je einem Tabellenblatt aus:
1. Lies Feld A aus Tab1.
2. Vergleiche Feld A mit Spalte 1 aus Tab2.
Variante 1
3. Wenn es keine Übereinstimmung gibt, durchsuche Spalte 1 von oben.
4. Gib die erste Zeile aus, in dem nichts steht.
5. Schreibe die Felder B bis J aus Tab1 in die Spalten 2 bis 10 der Tab2.
Variante 2
3. Wenn es eine Übereinstimmung gibt, gib die Zeile der Übereinstimmung aus.
4. Optional: Öffne ein Fenster, in dem der Benutzer die Aktion bestätigen oder abbrechen kann.
5. Schreibe die Felder B bis J aus Tab1 in die Spalten 2 bis 10 der Tab2.
Vielen Dank im Voraus und einen schönen Tag,
Sebastian

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Makro
27.10.2005 22:59:08
Peter Feustel
Hallo Sebastia,
auch wenn deine Problembeschreibung etwas unklar ist, so habe ich versucht, etwas daraus zu machen.
Spiel mal mit den beiden Excel-Mappen - sie hießen bei mir Seba-1.xls und Seba-2.xls,
wobei Seba-2.xls das Makro enthält.
In Zelle A1 in Seba-2 kannst du mit den Namen aus Seba-1 spielen.
https://www.herber.de/bbs/user/27904.xls -- das ist Seba-1.xls

Die Datei https://www.herber.de/bbs/user/27905.xls wurde aus Datenschutzgründen gelöscht

-- das ist Seba-2.xls

Viele Grüße Peter
Das Forum lebt auch von den Rückmeldungen.
Anzeige
AW: VBA Makro
28.10.2005 11:30:52
Sebastian
Hallo Peter,
vielen Dank für Deinen Ansatz. Bis jetzt funktioniert folgendes:
- Das Makro stellt richtig fest, ob das Feld A1 in Seba-1.xls mit dem Feld A1 in Seba-2.xls übereinstimmt.
- Wenn die Werte übereinstimmen, schreibt es die Zeile 1 aus Seba-1 in die Zeile 1 in Seba-2.
- Die Abfrage, ob die Zeile überschrieben werden soll, funktioniert.
Was nicht funktioniert:
- Das Makro liest nicht die ganze Spalte aus, d.h. es erkennt nicht, wenn der Wert in A2 oder weiter unten steht.
- Insofern kann ich auch nicht sagen, ob es den Wert in die erste leere Zeile schreibt. Wenn der Wert nicht in A1 auftaucht, meldet es immer, Zeile 2 sei die erste Zeile.
Vielleicht fällt Dir oder jemand anderem was dazu ein?
Danke im Voraus,
Sebastian
PS: Wie ist denn die Syntax, wenn ich nicht die Felder B1 bis J1 schreiben will, sondern spezifische Felder wie B1, F4, G4, H4 oder so...
Hier noch mal der aktuelle Code:

Sub Vergleichen()
Dim WkShQ     As Worksheet
Dim WkShZ     As Worksheet
Dim iWks      As Integer
Dim lLetzte   As Long
Dim lZeile    As Long
Dim bGefu     As Boolean
Dim sAbfra    As String
Dim iSpalte   As Integer
Const strPath As String = _
"C:\Documents and Settings\Rde14287x\Desktop"
'' Dateinname Eingabeformular
Const strFile As String = "Seba-1.xls"
On Error Resume Next
bGefu = False
Workbooks.Open Filename:=strPath & strFile
Sheets("Tabelle1").Activate
lLetzte = IIf(Range("A1") <> "", 65536, Range("A65536").End(xlUp).Row)
On Error GoTo 0
Set WkShQ = Workbooks("Seba-1.xls").Worksheets("Tabelle1")
Set WkShZ = Workbooks("Seba-2.xls").Worksheets("Tabelle1")
For lZeile = 1 To lLetzte
If WkShZ.Range("A1").Value = WkShQ.Range("A" & lZeile).Value Then
bGefu = True
Exit For
End If
Next lZeile
If bGefu = True Then
MsgBox "Die Kundennummer wurde " _
& Chr(10) & "in Zeile " & lZeile & " gefunden.", _
64, "   Der Kunde ist bereits angelegt."
sAbfra = MsgBox("Wollen Sie die Daten des Kunden aktualisieren?", _
vbQuestion + vbOKCancel, "   Bitte entscheiden Sie sich.")
If sAbfra = "1" Then ' OK angeklickt ?
For iSpalte = 2 To 10
WkShZ.Cells(1, iSpalte).Value = WkShQ.Cells(lZeile, iSpalte).Value
Next iSpalte
End If
Else
lZeile = lLetzte + 1
MsgBox "Zeile " & lZeile & " ist die erste leere Zeile.", _
64, "   die erste leere Zeile hinter den Daten"
For iSpalte = 2 To 10
WkShZ.Cells(1, iSpalte).Value = WkShQ.Cells(lZeile, iSpalte).Value
Next iSpalte
End If
End Sub

Anzeige
AW: VBA Makro
28.10.2005 12:03:27
Peter Feustel
Hallo Sebastian,
ich meine, dass du z. B. Sebastian in Zelle A1 (Seb-2.xls eingeben kannst und er findet aus Seb-1.xls die Zeile 4 und fragt, ob er die Werte nehmen darf.
Du solltest das noch mal testen.

Viele Grüße Peter
Das Forum lebt auch von den Rückmeldungen.
AW: VBA Makro
31.10.2005 11:47:28
Sebastian
Hallo Peter,
Du hattest recht, ich hatte ein Problem mit den Sicherheitseinstellungen meines Excels. Dein Makro läuft. Meine Beschreibung war anscheinend jedoch wirklich missverständlich: Dein Makro macht nicht exakt, was ich meinte. Ich habe mich jetzt bemüht, das anzupassen, aber jetzt treten Fehler auf:
1. Das erste, was ich sehe ist, dass die Suchfunktion nur bis zur dritten Zeile der B Spalte von Liste.xls sucht. Gebe ich einen Wert weiter unten eingebe, wird er nicht gefunden.
2. Das Makro schreibt nicht in die Zeile, wenn der wert gefunden wird.
Dazu noch eine Syntaxfrage: Ich möchte später nicht eine Zeile in Eingabeformular.xls auslesen, sondern etwa 15 Felder an verschiedenen Stellen des Dokuments. Wie schreibe ich das, wenn ich die Position der Zelle kenne?
Vielen Dank schon mal und einen guten Start in die Woche,
Sebastian
PS: Hier der aktuelle Code (d.h. die geänderte Version Deiner Vorlage)

Sub Vergleichen()
Dim WkShL     As Worksheet
Dim WkShE     As Worksheet
Dim iWks      As Integer
Dim lLetzte   As Long
Dim lZeile    As Long
Dim bGefu     As Boolean
Dim sAbfra    As String
Dim iSpalte   As Integer
Const strPath1 As String = _
"C:\Documents and Settings\Rde14287x\Desktop"
Const strFile1 As String = "Liste.xls"
Const strPath2 As String = _
"C:\Documents and Settings\Rde14287x\Desktop"
Const strFile2 As String = "Eingabeformular.xls"
On Error Resume Next
bGefu = False
Workbooks.Open Filename:=strPath1 & strFile1
Sheets("Tabelle1").Activate
lLetzte = IIf(Range("B65536") <> "", 65536, Range("B65536").End(xlUp).Row)
On Error GoTo 0
Set WkShL = Workbooks("Liste.xls").Worksheets("Tabelle1")
Set WkShE = Workbooks("Eingabeformular.xls").Worksheets("Tabelle1")
For lZeile = 2 To lLetzte
If WkShE.Range("B3").Value = WkShL.Range("B" & lZeile).Value Then
bGefu = True
Exit For
End If
Next lZeile
If bGefu = True Then
MsgBox "Die Kundennummer wurde " _
& Chr(10) & "in Zeile " & lZeile & " gefunden.", _
64, "   Der Kunde ist bereits angelegt."
For iSpalte = 2 To 10
WkShE.Cells(1, iSpalte).Value = WkShL.Cells(lZeile, iSpalte).Value
Next iSpalte
Else
lZeile = lLetzte + 1
MsgBox "Der Kunde wird neu angelegt.", _
64, "   Die Kundennummer ist noch nicht hinterlegt."
End If
End Sub

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige