Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Excel
  Suchen/Ersetzen in mehreren Tabellen

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:  Suchen/Ersetzen in mehreren Tabellen (3897 mal gelesen)
hotstaks2005
Mitglied
Elektriker


Sehen Sie sich das Profil von hotstaks2005 an!   Senden Sie eine Private Message an hotstaks2005  Schreiben Sie einen Gästebucheintrag für hotstaks2005

Beiträge: 142
Registriert: 03.07.2008

EPLAN 5.7
Office 2003

erstellt am: 26. Feb. 2009 16:47    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


Mappe1.xls.txt

 
Hallo Excel-Experten

Hab das Problem das ich in mehreren Tabellen nach einem bestimmten String (Artikelnummer) suchen möchte und wenn gefunden die komplette Zeile rechts davon in die Suchtabelle kopieren möchte.
Für das Suchen in einer Tabelle klappt das ja! Nur wie erweitern auf alle Tabellen (mit Namen)?

**********************************************************************************
Der Makrorecorder zeichnet mir diesen Code auf:


Sub Makro2()
'
' Makro2 Makro
' Makro am 26.2.2009 von who aufgezeichnet
'

'
    Sheets(Array("Tabelle2", "Tabelle3", "Tabelle4")).Select
    Sheets("Tabelle2").Activate
    Range("A3").Select
    Selection.Copy
End Sub

**********************************************************************************

Nur, wie bekomme ich das

Sheets(Array("Tabelle2", "Tabelle3", "Tabelle4")).Select

in den nachfolgenden Code?


Option Explicit

Sub SuchenErsetzen()
   Dim wksSource As Worksheet, wksTarget As Worksheet
   Dim var As Variant
   Dim lngRow As Long
   Application.ScreenUpdating = False
   Set wksSource = Worksheets("Tabelle2")
   Set wksTarget = Worksheets("Tabelle1")
   lngRow = 1
   Do Until IsEmpty(wksTarget.Cells(lngRow, 1))
      var = Application.Match(wksTarget.Cells(lngRow, 1), _
         wksSource.Columns(1), 0)
      If Not IsError(var) Then
         wksTarget.Rows(lngRow).Value = wksSource.Rows(var).Value
      End If
      lngRow = lngRow + 1
   Loop
   Application.ScreenUpdating = True
End Sub


Eine Beispielmappe ist natürlich mit dabei.

Danke Wolfgang

------------------
Immer wieder neu lernen

[Diese Nachricht wurde von hotstaks2005 am 26. Feb. 2009 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Paulchen
Mitglied
Bauing./SW-Entwickler


Sehen Sie sich das Profil von Paulchen an!   Senden Sie eine Private Message an Paulchen  Schreiben Sie einen Gästebucheintrag für Paulchen

Beiträge: 1227
Registriert: 19.08.2004

Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 15, LibreOffice

erstellt am: 26. Feb. 2009 16:53    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für hotstaks2005 10 Unities + Antwort hilfreich

Hallo Wolfgang,

woher haste denn den Code? VBA ist hier fast ein wenig Kanonen auf Spatzen. Reicht der Autofilter nicht aus? Meinst Du mit "Tabellen" verschiedene Mappen - also Dateien - oder verschiedene Register innerhalb einer Mappe (vermutlich das Zweite)?

------------------
DIN1055.de  |  Lastannahmen für Anwender NEU: Foren zu DIN 1055

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

hotstaks2005
Mitglied
Elektriker


Sehen Sie sich das Profil von hotstaks2005 an!   Senden Sie eine Private Message an hotstaks2005  Schreiben Sie einen Gästebucheintrag für hotstaks2005

Beiträge: 142
Registriert: 03.07.2008

EPLAN 5.7
Office 2003

erstellt am: 26. Feb. 2009 17:05    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Paulchen

Zuerst hab ich es mit SVERWEIS versucht zu lösen; bin aber an den mehreren Tabellen nicht weiter gekommen. Dann hab ich per Internet diesen Code gefunden und der gefällt mir eigentlich ganz gut da ich hier in der Tabelle 1 nur die Suchbegriffe eingeben muss der Rest geht automatisch - bis halt auf mehrere Tabellen.

Ach ja: Tabelle = Register

Grundsätzlich geht es hierbei um eine Herstellerdatenbank für Eplan und den Export dorthin.

Grüße Wolfgang

------------------
Immer wieder neu lernen

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Paulchen
Mitglied
Bauing./SW-Entwickler


Sehen Sie sich das Profil von Paulchen an!   Senden Sie eine Private Message an Paulchen  Schreiben Sie einen Gästebucheintrag für Paulchen

Beiträge: 1227
Registriert: 19.08.2004

Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 15, LibreOffice

erstellt am: 27. Feb. 2009 09:01    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für hotstaks2005 10 Unities + Antwort hilfreich

Bordmittel:
Zitat:
Zuerst hab ich es mit SVERWEIS versucht zu lösen; bin aber an den mehreren Tabellen nicht weiter gekommen.
Formeln lassen sich über mehrere Register ebenso einsetzen wie über mehrere Zellen; der SVERWEIS ist eine kleine Ausnahme. Siehe z. B. Google --> Treffer bei herber, angepasst:
Code:
=WENN(ISTFEHLER(SVERWEIS(A1;Tabelle2!$A:$B;2;0));SVERWEIS(A1;Tabelle3!$A:$B;2;0);SVERWEIS(A1;Tabelle2!$A:$B;2;0))
Kommt darauf an, wieviele Register Du hast; WENN lässt sich tiefer verschachteln...

VBA:
Möglich ist das schon, mit einer Schleife in der Schleife ;-). Es ist allerdings mit etwas Aufwand verbunden. Ich gehe mal davon aus, dass Deine Quellregister immer gleich aufgebaut sind. Ein Ansatz: Du brauchst

  • Einen Zähler für die Zeilen des Quellregisters wksSource: Das Quellregister wechselt von Tabelle2 zu Tabelle3 zu... Dieser Zähler muss immer wieder bei 1 beginnen.
  • Einen Zähler für die Zeilen des Zielregisters wksTarget: Das Zielregister bleibt das gleiche; dieser Zähler muss allerdings fortlaufend geschrieben werden.
  • Eine Schleife um die Sub SuchenErsetzen herum, die die Register (Worksheets) durchläuft. Ob Du das in die gleiche Sub einbaust oder eine aufrufende Prozedur gestaltest, bleibt Dir überlassen. Dabei muss ausgeschlossen werden, das wksSource = wksTarget - sonst würde das Ziel ohne zu meckern auf sich selbst kopiert.

Momentan ist mit lngRow nur ein Zähler definiert, der in Quell- und Zielregister die gleiche Zeile anspricht.

Die Aufgabe ist interessant und schreit förmlich nach VBA; mir fehlt allerdings die Zeit. Bin gespannt, was Du daraus machst.

------------------
DIN1055.de  |  Lastannahmen für Anwender NEU: Foren zu DIN 1055

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

hotstaks2005
Mitglied
Elektriker


Sehen Sie sich das Profil von hotstaks2005 an!   Senden Sie eine Private Message an hotstaks2005  Schreiben Sie einen Gästebucheintrag für hotstaks2005

Beiträge: 142
Registriert: 03.07.2008

EPLAN 5.7
Office 2003

erstellt am: 27. Feb. 2009 09:16    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hi Paulchen;

besten Dank für Deine Hinweise. Werd mich dann mal mit meinen (noch sehr beschränkten) Kenntnissen in VBA mal an eine Lösung heran wagen.

Grüße Wolfgang

Nachtrag:
Warum an dieser Stelle VBA? In der Tabelle 1 sollen Bestellbezeichnungen eingetragen und die dazu gehörigen Daten werden dann in Tabelle N gesucht und das Ergebnis nach Eplan exportiert.
Vorteil: Kein Kopieren bzw. Auffüllen der Zeilen mit SVERWEIS-Formel - da unterschiedliche Anzahl von Datensätzen gesucht werden.

Soviel zur Erklärung wqrum VBA - hoffe, es ist verständlich.

Grüße Wolfgang

------------------
Immer wieder neu lernen

[Diese Nachricht wurde von hotstaks2005 am 27. Feb. 2009 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Paulchen
Mitglied
Bauing./SW-Entwickler


Sehen Sie sich das Profil von Paulchen an!   Senden Sie eine Private Message an Paulchen  Schreiben Sie einen Gästebucheintrag für Paulchen

Beiträge: 1227
Registriert: 19.08.2004

Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 15, LibreOffice

erstellt am: 27. Feb. 2009 12:34    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für hotstaks2005 10 Unities + Antwort hilfreich

Mahlzeit,

probier mal diesen Code (Ergänzung zu oben):

Code:
Private Sub RegisterDurchlaufen()
Dim wsQ As Worksheet, wsZ As Worksheet  'Quelle und Ziel
Dim iQ As Integer, iZ As Integer        'Zeilenzaehler fuer Quelle und Ziel
Dim iW As Integer                      'Zaehler zum Durchlaufen der Register
   
  Application.ScreenUpdating = False    'Bildschirmflackern aus
 
  Set wsZ = ThisWorkbook.Worksheets("Tabelle1") 'Ziel - bleibt IMMER gleich und heisst IMMER "Tabelle1"
  iZ = 1
  iW = 2                                'ERSTE Quellmappe festlegen
  Set wsQ = ThisWorkbook.Worksheets("Tabelle" & iW)
'  Debug.Print "Ziel: " & wsZ.Name      'Ausgabe im Direktbereich zu Testzwecken
 
  For iW = 2 To ThisWorkbook.Worksheets.Count
      iQ = 1                            'Quelle immer ab Zeile 1 beginnen
      Set wsQ = ThisWorkbook.Worksheets("Tabelle" & iW)
'      Debug.Print "Quelle: " & wsQ.Name
      SuchenErsetzen wsQ, wsZ, iQ, iZ
  Next iW
 
  Set wsQ = Nothing
  Set wsZ = Nothing
 
  Application.ScreenUpdating = True
   
End Sub

Private Sub SuchenErsetzen(wksSource As Worksheet, wksTarget As Worksheet, iQ As Integer, iZ As Integer)
Dim var As Variant
Dim iH As Integer                        'Halt: aktuelle Quellmappe beendet, Zeile merken
Dim strT As String                        'Inhalt der Suchzelle, die NICHT gefunden wird
 
  Do Until IsEmpty(wksTarget.Cells(iZ, 1))
    var = Application.Match(wksTarget.Cells(iZ, 1), wksSource.Columns(1), 0)
    If Not IsError(var) Then
      wksTarget.Rows(iZ).Value = wksSource.Rows(var).Value
      iQ = iQ + 1
      iH = iZ                            'Haltepunkt = Zeilenzaehler
'    Else: strT = wksTarget.Cells(iZ, 1)  'Inhalt der 1. Zelle in akuteller Reihe merken...
'      wksTarget.Rows(iZ).Value = ""      '... alte Werte loeschen...
'      wksTarget.Cells(iZ, 1) = strT      '... erste Zelle wieder befuellen
'      iH = iZ
    End If
    iZ = iZ + 1
  Loop
 
  iZ = iH + 1                              'Zeilenzaehler zuruecksetzen, naechste Zeile

End Sub


Die Zielketten müssen/sollten vorher händisch gelöscht werden.

------------------
DIN1055.de  |  Lastannahmen für Anwender NEU: Foren zu DIN 1055

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

hotstaks2005
Mitglied
Elektriker


Sehen Sie sich das Profil von hotstaks2005 an!   Senden Sie eine Private Message an hotstaks2005  Schreiben Sie einen Gästebucheintrag für hotstaks2005

Beiträge: 142
Registriert: 03.07.2008

EPLAN 5.7
Office 2003

erstellt am: 02. Mrz. 2009 11:46    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Sorry - war am Freitag nicht mehr im Hause und hab deinen Beitrag hier erst grade gelesen.

Der Code funzt soweit ganz gut; was ich nicht nachvollziehen kann ist der Übergang zur nächsten Tabelle. Der passiert zur Zeit nicht und bin grade dabei das mal nach zu stellen.

Besten Dank für deine Hilfestellung

Wolfgang

------------------
Immer wieder neu lernen

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

hotstaks2005
Mitglied
Elektriker


Sehen Sie sich das Profil von hotstaks2005 an!   Senden Sie eine Private Message an hotstaks2005  Schreiben Sie einen Gästebucheintrag für hotstaks2005

Beiträge: 142
Registriert: 03.07.2008

EPLAN 5.7
Office 2003

erstellt am: 02. Mrz. 2009 12:39    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Habs jetzt noch mal genau nachgestellt; hatte uin meiner Versuchsdatei eine Spalte falsch drin deshalb ist nichts gefunden worden.

Klappt also bestens!

Werd aber trotzdem versuchen herauszubekommen wie du das hin bekommen hast.

Danke Wolfgang

Ü's gibts auch

------------------
Immer wieder neu lernen

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

hotstaks2005
Mitglied
Elektriker


Sehen Sie sich das Profil von hotstaks2005 an!   Senden Sie eine Private Message an hotstaks2005  Schreiben Sie einen Gästebucheintrag für hotstaks2005

Beiträge: 142
Registriert: 03.07.2008

EPLAN 5.7
Office 2003

erstellt am: 02. Mrz. 2009 14:32    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


suche.xls.txt

 
Hi - Ein Problem habe ich noch.
Die zu suchenden Bestellbezeichnungen werden ja nicht unbedingt in der Reihenfolge der Tabellen eingegeben. Es kann also sein das die Bestellbezeichnungen in unterschiedlichen Tabellen enthalten sind und damit nicht gefunden werden. (s. Beispielmappe)

Welches ist hier die beste Möglichkeit vorzugehen? Im Augenblick wird eine Tabelle nach der anderen durchsucht aber es findet kein Wechsel bei nicht gefundener Bestellbezeichnung statt.

Hoffe es ist einigermassen klar - Beispiemappe mit Ausgangssitouation anbei.

Grüße Wolfgang

------------------
Immer wieder neu lernen

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Paulchen
Mitglied
Bauing./SW-Entwickler


Sehen Sie sich das Profil von Paulchen an!   Senden Sie eine Private Message an Paulchen  Schreiben Sie einen Gästebucheintrag für Paulchen

Beiträge: 1227
Registriert: 19.08.2004

Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 15, LibreOffice

erstellt am: 02. Mrz. 2009 17:29    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für hotstaks2005 10 Unities + Antwort hilfreich

'n Abend Wolfgang,

richtig: Momentan wird erst das Register Tabelle2 vollständig durchsucht, anschließend das Register Tabelle3 usw. - so hatte ich die Vorgabe verstanden ;-).

Suchbegriff --> Tabelle2
  Zeile1
  Zeile2
  Zeile3...
 
Suchbegriff --> Tabelle3
  Zeile1
  Zeile2
  Zeile3...

Vorgehensweise: Schleife "rumdrehen", theoretisch so:

Suchbegriff --> Tabelle2
  Zeile1
Suchbegriff --> Tabelle3
  Zeile1
Suchbegriff --> Tabelle2
  Zeile2
Suchbegriff --> Tabelle3
  Zeile2...
 
Die Schleife muss erst das Register wechseln und dann die Zeile. Im Zielregister soll (unverändert) fortlaufend geschrieben werden. Vergiss die Zeilen oben - Sicherung erstellt? Dann teste den hier:

Code:
Private Sub CommandButton1_Click()
Dim wsQ As Worksheet, wsZ As Worksheet  'Quelle und Ziel
Dim iZ As Integer                      'Zeilenzaehler fuer Quelle und Ziel GEMEINSAM
Dim iW As Integer                      'Zaehler zum Durchlaufen der Register
   
  Application.ScreenUpdating = False    'Bildschirmflackern aus
 
  Set wsZ = ThisWorkbook.Worksheets("Tabelle1") 'Ziel - bleibt IMMER gleich und heisst IMMER "Tabelle1"
  iZ = 1
  iW = 2                                'ERSTES Quellregister festlegen
 
  Do Until IsEmpty(wsZ.Cells(iZ, 1))    'Beginn Schleife ZEILENWEISE
 
    For iW = 2 To ThisWorkbook.Worksheets.Count 'Schleife fuer Register INNERHALB der Zeilenschleife
      Set wsQ = ThisWorkbook.Worksheets("Tabelle" & iW)
      var = Application.Match(wsZ.Cells(iZ, 1), wsQ.Columns(1), 0)
      If Not IsError(var) Then
        wsZ.Rows(iZ).Value = wsQ.Rows(var).Value
      End If
    Next iW
   
    iZ = iZ + 1                        'naechste Zeile
 
  Loop
 
  Set wsQ = Nothing
  Set wsZ = Nothing
 
  Application.ScreenUpdating = True
   
End Sub

Obacht: Wenn ein Begriff in Tabelle2 vorkommt, wird er in Tabelle1 eingetragen. Sollte der gleiche Suchbegriff ebenfalls in Tabelle3 vorkommen, wird er (anschließend) in Tabelle1 eingetragen. Gefundener Wert aus Tab3 überschreibt also gefundener Wert aus Tab2. Wobei bei Stücklisten etc. von einmaligen Suchbegriffen auszugehen ist.

------------------
DIN1055.de  |  Lastannahmen für Anwender NEU: Foren zu DIN 1055

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

hotstaks2005
Mitglied
Elektriker


Sehen Sie sich das Profil von hotstaks2005 an!   Senden Sie eine Private Message an hotstaks2005  Schreiben Sie einen Gästebucheintrag für hotstaks2005

Beiträge: 142
Registriert: 03.07.2008

EPLAN 5.7
Office 2003

erstellt am: 03. Mrz. 2009 10:16    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Paulchen,

erst mal wieder recht schönen Dank für deine Hilfe bei meinem Problem.

Hab es zwar selber mal versucht kam aber aufgrund fehlender VBA-Kenntnisse nicht so richtig weiter.

Heute morgen schaue ich hier nach und finde eine fertige funktionierende Lösung! Vielen Dank dafür.

Werd jetzt mal versuchen nachzuvollziehen wie du zu diesem Lösungsweg gekommen bist um auch mal selber mit VBA klar zu kommen.

MfG Wolfgang

.....mehrmaliges Vorkommen einer Bestellbezeichnung - sollte nicht der Fall sein da unterschiedliche Herrsteller aber kann passieren.


------------------
Immer wieder neu lernen

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Paulchen
Mitglied
Bauing./SW-Entwickler


Sehen Sie sich das Profil von Paulchen an!   Senden Sie eine Private Message an Paulchen  Schreiben Sie einen Gästebucheintrag für Paulchen

Beiträge: 1227
Registriert: 19.08.2004

Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 15, LibreOffice

erstellt am: 03. Mrz. 2009 12:29    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für hotstaks2005 10 Unities + Antwort hilfreich


debug.png

 
Hallo Wolfgang,

besten Dank für die Rückmeldungen! Zum VBA besser verstehen gibt's diverse Tutorials im Netz . Auf die Schnelle: Cursor im Code positionieren, Taste F5 drücken (Ausführen), Taste F8 (schrittweise ausführen), F9 (Haltepunkte); das Direktfenster kann z. B. Variablen zur Laufzeit ausgeben, siehe Screenshot. Überwachungen sind auch hilfreich.

Zitat:
mehrmaliges Vorkommen einer Bestellbezeichnung [...] kann passieren
Gedanken hierzu: Die Artikelnummern werden verglichen. Erweitere den Code aus dem vorherigen Post um diesen Teil - Doppelte werden rot eingefärbt.
Code:
If Not IsError(var) Then
     
        If iW > 2 Then 'Wert aus Tab2 ist bereits eingetragen, aktuell wird Tab3 oder Tab4 oder... durchsucht
          Debug.Print "wsZ: " & wsZ.Cells(iZ, 1).Value    'zu Testzwecken
          Debug.Print "wsQ: " & wsQ.Cells(var, 1).Value
          If wsZ.Cells(iZ, 1) = wsQ.Cells(var, 1) And Not IsEmpty(wsZ.Cells(iZ, 2)) Then
          'Art-Nr Quelle = Art-Nr Ziel UND in Spalte B im Ziel ist NICHT leer
            MsgBox "Doppelte Artikelnummer: " _
              & vbCrLf & vbCrLf & _
              wsZ.Cells(iZ, 1) & _
              vbCrLf & vbCrLf & _
              "Bitte überprüfen...", _
              vbOKOnly + vbInformation, "Hinweis"
            wsZ.Cells(iZ, 1).Interior.ColorIndex = 3 'Zelle rot hervorheben
          End If
        End If
     
        wsZ.Rows(iZ).Value = wsQ.Rows(var).Value
    End If

------------------
DIN1055.de  |  Lastannahmen für Anwender NEU: Foren zu DIN 1055

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

hotstaks2005
Mitglied
Elektriker


Sehen Sie sich das Profil von hotstaks2005 an!   Senden Sie eine Private Message an hotstaks2005  Schreiben Sie einen Gästebucheintrag für hotstaks2005

Beiträge: 142
Registriert: 03.07.2008

EPLAN 5.7
Office 2003

erstellt am: 03. Mrz. 2009 14:23    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hi Paulchen - klappt ja immer vorzüglicher!

Werd mich jetzt mal selber dran begeben um mir doppelte Bestellbezeichnungen auf einer extra Tabelle ausgeben zu lassen zur besseren Nachbearbeitung.

Eine grundsätzliche Frage noch:
Für das durchsuchen der Tabelle schreibst du ja ("Tabelle" & iW) wobei iW die Tabellennummer ist und zum Tabellennamen dazu addiert wird. Passt alle so wenn Tabellennamen so aufgebaut.

Meine Frage ist die ob es möglich ist die Tabellen mit eigenen Namen aufzulistenn also anstatt "Tabelle1" "TabelleN" zb. mit "ABB" "PHOENIX" etc.

Wenn ja, wäre ich um eine kurze Rückmeldung dankbar; würde dann versuchen das selber hinzubekommen. Muss ja auch mal was selber machen.

Bin auch so im groben mal dabei mich mit VBA auseinander zu setzen und habe Hier und in anderen Foren viele Hinweise und Tips bekommen - auch wo man mal was nachlesen kann.

An dieser Stelle noch mal ein herzliches Dankeschön an dich und dieses Forum - der Gedanke der gegenseitigen Hilfe ist immer gut!

Grüße Wolfgang

------------------
Immer wieder neu lernen

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Paulchen
Mitglied
Bauing./SW-Entwickler


Sehen Sie sich das Profil von Paulchen an!   Senden Sie eine Private Message an Paulchen  Schreiben Sie einen Gästebucheintrag für Paulchen

Beiträge: 1227
Registriert: 19.08.2004

Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 15, LibreOffice

erstellt am: 03. Mrz. 2009 15:46    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für hotstaks2005 10 Unities + Antwort hilfreich

 
Zitat:
Meine Frage ist die ob es möglich ist die Tabellen mit eigenen Namen aufzulistenn also anstatt "Tabelle1" "TabelleN" zb. mit "ABB" "PHOENIX" etc.
Dachte mir fast, dass diese Frage irgendwann auftaucht :) ... Die Register lassen sich alle über ihren eindeutigen Index ansprechen. Im VBA-Editor steht z. B. "Tabelle1 (Tabelle1)". Der Teil in Klammern ändert sich, wenn Du in Excel ein Register umtaufst. Lass den hier mal laufen (Direktbereich anzeigen lassen):
Code:
Sub RegisterNamen()

Dim ws As Worksheet
Dim str As String

  For Each ws In ThisWorkbook.Worksheets
    Debug.Print "Name: " & ws.Name
    Debug.Print "Index: " & ws.Index
  Next ws

End Sub


Benenne ein Register um, lass nochmal laufen.

BTW ist die Adressierung per Index die elegantere, weil unzweifelhafte, flexible und sichere Variante: Den Index kann Dir kein User einfach so umbenennen ;-). Die Namen der Register (wie sie in Excel zu lesen sind) spielen mit Index keine Rolle, Du kannst die Register beliebig (um)benennen, ohne dass sich Dein Code aufhängt.

[Edit: Den String str brauchst Du gar nicht, der ist überflüssig /Edit]

------------------
DIN1055.de  |  Lastannahmen für Anwender NEU: Foren zu DIN 1055

[Diese Nachricht wurde von Paulchen am 03. Mrz. 2009 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

hotstaks2005
Mitglied
Elektriker


Sehen Sie sich das Profil von hotstaks2005 an!   Senden Sie eine Private Message an hotstaks2005  Schreiben Sie einen Gästebucheintrag für hotstaks2005

Beiträge: 142
Registriert: 03.07.2008

EPLAN 5.7
Office 2003

erstellt am: 03. Mrz. 2009 16:58    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Paulchen

Und wieder meinen besten Dank für Deine Antworten!

Werd dann mal zusehen das ich mit Deinem Hinweis weiterkomme.

Vielen Dank

MfG Wolfgang

------------------
Immer wieder neu lernen

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz