parkuhr
Goto Top

Tabellenabgleich tut nicht...

hallo zusammen,

ich habe folgendes problem: in einem excel file sind in tabelle 1 und 2 jeweils die spalte A mit teilebezeichnungen belegt. ziel meines makros sollte sein jede bezeichnung aus tabelle1 mit tabelle 2 zu vergleichen und bei einem matching den gesuchten begriff hinter die zeile in spalte B in tabelle 2 zu schreiben.
also: begriff in tabelle1 ist "abdeckschiene" gefundene matchings in tabelle2 sind "frontabdeckschiene" und "heckabdeckschiene" - dann sollten jeweils in spalte B hinter den beiden gefunden begriffen der hauptbegriff stehen.

mein bisheriges makro sieht folgenrdermaßen aus - es läuft zwar ohne fehlermeldung durch doch es tut nicht das was es soll...


Sub Makro4()
'
'
'
Dim x As Integer
Dim y As Integer
Dim z1 As Integer
Dim z2 As Integer
Dim V As String
Dim vari1 As String
Dim Namevari1 As String


Sheets("Tabelle1").Select
Columns("A:A").Select
Selection.Find(What:="", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
z1 = ActiveCell.Row
Sheets("Tabelle2").Select
Columns("A:A").Select
Selection.Find(What:="", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
z2 = ActiveCell.Row
For x = 1 To z1
Sheets("Tabelle1").Activate
vari1 = Range("A1").Offset(x - 1, 0)

For y = 1 To z2
Sheets("Tabelle2").Activate
Namevari1 = Range("A1").Offset(y - 1, 0)
V = InStr(1, Namevari1, vari1, 1)
If V <> "0" Then Range("B1").Offset(y - 1, 0) = vari1

Next y
Next x


End Sub


wäre um hilfe sehr dankbar da ich keine ahnung mehr hab an was es liegen könnte. (es schreibt den begriffe aus tabelle1 nicht hinter die matchings...)

Content-Key: 20588

Url: https://administrator.de/contentid/20588

Printed on: April 19, 2024 at 21:04 o'clock

Member: parkuhr
parkuhr Nov 29, 2005 at 12:59:32 (UTC)
Goto Top
ich hab glaube inzwischen gefunden woran es liegt!
das makro schreibt wie gewollt die begriffe in spalte B - doch nach dem kompletten durchlauf werden die einträge in B wieder entfernt.
gibt es einen befehl der noch vor beendung des makros die datei speichert?

sollte nun nur noch an diesem kleinen befehl hängen

- danke schonmal für jegliche hilfe
Member: halphas
halphas Nov 30, 2005 at 07:58:36 (UTC)
Goto Top
Hallo parkuhr,

füg einfach den Befehl "ActiveWorkbook.Save" in dein script ein. Du solltest die entsprechende Arbeitsmappe vorher einmal abgespeichert haben.
Member: parkuhr
parkuhr Dec 01, 2005 at 09:15:25 (UTC)
Goto Top
hi

erst mal danke für den befehl - das dumme is nur das meine spalte B direkt nach der beendigung schleife gelöscht wird. also bringt es eher weniger wenns dannach gespeichert wird. wenn ich den befhel zwischen der bedingung und derm Next y schreibe wird die tabelle 200 * 3500 mal gespeichert - was ja auch nicht im sinne des erfinders is und außerdem der arbeitsrechenr nicht aushält.

langsam aber sicher glaub ich das mich excel ärgern will - da in meinem makro eindeutig KEINE anweisung zum köschen der spalte steht...
Member: parkuhr
parkuhr Dec 02, 2005 at 07:49:24 (UTC)
Goto Top
moinsen,
für alle die dies interessiert: ich habs geschafft!
der erste weg is etwas alternativ, da ich das eigentliche problem umgangen hab. da im letzten durchlauf immer die gesammte spalte B überschrieben wurde, habe ich in die quelldatei (tabelle1) als letzte zeile einen eindeutigen begriff geschrieben (bei mir ende1985)
damit die datei vor dem letzten überschreiben gespeichert wir schreibt man nun zwischen Next y und Next x eine bedingung die das ganze einfach seperat abspeichert:

Next y
If vari1 = "ende1985" then ActiveWorkbook.SaveCopyAs "C:\temp\....xls"
Next x


also habe ich das eigentliche überschreiben nicht gelöst sondern nur direkt vorher eine copy der datei erstellt. das hat mich dann aber wieder weitergebracht (bzw. ein kollege face-wink) das der ausstieg ja mit einer leeren zelle enden muss. das sollte nicht sein. also im grunde is das ganze viel einfach wenn mann die range z1 = ActiceCell.row mit einer "-1" versieht denn dann erkennt das makro den "aussteiger" (die leere zelle) lässt aber diese in ruhe und nimmt eben die richtige zelle vorher.
z1 = ActiveCell.row - 1

mehr wars nich... aber trotzdem danke an alle die mal einen gedanken dran verschwendet haben!