Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
968to972
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
968to972
968to972
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Code Anpassung

Code Anpassung
18.04.2008 21:08:26
Becker

Hallo werte Excellanten,
Habe unten ein Code aus Internet Foren.
Meine Frage wie konnte man den Code so anpassen das es nach bestimmten Begriff "USA" in offenen Mappen in Zellbereichen "B2" nur in Tabellen1 durchgesucht wird (ohne InputBox).
Wenn der "USA" Begriff in eine von geöffneten Mappen gefunden wurde dann möchte ich gerne den Bereich (wo sich der gefundene Name "USA" befindet) A1:F300 kopieren und nach TestMappe, Tabelle6 kopieren.
Leider sind meine Kenntnisse in VBA noch extrem begrenzt. Der untere Code sucht in allen offenen Mappen (und allen Tabellen Blätter) nach eingegebenen Suchbegriff und markiert sie mit rote Hintergrundsfarbe. Ich frage mich nur wie kann ich anderes gestalten nämlich wenn der bestimmte Begriff "USA" gefunden wurde dann möchte ich aus diese Tabelle1 (A1:F300) den Bereich kompieren nach TestMappe ins Tabelle6?
Ich Danke Euch für Euer Mühen
Freue mich über jeden Hinweis!
Netten Gruß Becker


Sub TextInArbeitsmappeSuchenUndFärben()
Dim suchbegriff As String
Dim Mappe As Workbook
Dim sht As Worksheet
suchbegriff = InputBox("Geben Sie den Suchbegriff ein!")
For Each Mappe In Application.Workbooks
Mappe.Activate
For Each sht In Worksheets
sht.Activate
Set found = sht.Cells.Find(suchbegriff)
If Not found Is Nothing Then
FirstAddress = found.Address
Do
found.Activate
found.Interior.ColorIndex = 3
Set found = Cells.FindNext(After:=ActiveCell)
On Error Resume Next
If found.Address = FirstAddress Then Exit Do
found.Interior.ColorIndex = 3
Loop
End If
Next sht
Next Mappe
End Sub


16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Code Anpassung
18.04.2008 21:59:42
Gerd L
Hallo Becker,
kann der Suchbegriff "USA" in verschiedenen Dateien in Tabelle1.Range("B2") vorkommen?
Falls ja: Wie sollen dann die Kopierbereiche Range("A1:F300") in Testmappe.xls Tabelle6
angeordnet werden?
Sollen die Zellen komplett kopiert werden oder nur die Werte ?
Gruß Gerd

AW: Code Anpassung
18.04.2008 23:41:14
Becker
Hallo Gerd,
Vielen Dank für Deine Anfrage.
Der Begriff "USA" kommt nur einmalig in Tabelle1 vor und der ist immer in Zellbereich "B2" zu finden. Es sind z.B. 12 verschiedene Mappen auf und von 12 Mappen und von dessen Tabelen Blätter 1 kommt nur einmalig das Begriff "USA" vor in den Zellbereich "B2".
Falls ja: Wie sollen dann die Kopierbereiche Range("A1:F300") in Testmappe.xls Tabelle6
angeordnet werden?

Wenn der Begriff "USA" in MappeXY in Tabelle1 gefunden wurde dann soll aus diese Tabelle Range("A1:F300") kopiert werden und dessen Inhalte in TestMappe ins Tabellenblatt 6 ins Range("A1:F300") eingefügt werden.
Es sollen nur die Werte kopiert werden.
Ich Danke Dir für Deine Zeit und Deine Mühe
Gruß Becker

Anzeige
AW: Code Anpassung
19.04.2008 09:58:14
Gerd L
Hallo Becker,
ohne Fehlerprüfung, d.h. die Tabellen mit den entsprechenden Namen müssen vorhanden sein.
Falls Du den Code nicht in ein Modul des " Workbooks("Testmappe.xls") "
stellst, müsstest diesen Begriff anstelle " ThisWorkbook "
einsetzen.


Sub test()
Dim Wb As Workbook
For Each Wb In Application.Workbooks
Select Case Wb.Name
Case ThisWorkbook.Name
Case Else
If Wb.Worksheets("Tabelle1").Cells(2, 2).Value = "USA" Then
With ThisWorkbook.Worksheets("Tabelle1").Range(Cells(1, 1), Cells(100, 6))
.ClearContents   'für Wiederholungen
.Value = Wb.Worksheets("Tabelle1").Range(Wb.Worksheets("Tabelle1").Cells(1, 1), Wb. _
Worksheets("Tabelle1").Cells(100, 6)).Value
End With
Exit For
End If
End Select
Next Wb
End Sub


Gruß Gerd

Anzeige
AW: Korrektur "300" statt "100" o.T.
19.04.2008 10:14:16
Gerd L
.

AW: Korrektur "300" statt "100" o.T.
19.04.2008 12:15:30
Becker
Hallo Gerd,
Erstmal vielen vielen Dank für Deine Mühe und Deine Hilfe.
Eine kleine Fehler bekomme ich in:
"With ThisWorkbook.Worksheets("Tabelle1").Range(Cells(1, 1), Cells(100, 6))"
Laufzeitfehelr 9 Index außerhalb des gültigen Bereichs.
Ich habe es probiert mit "With Workbook.Worksheets("Tabelle1").Range(Cells(1, 1), Cells(100, 6))" dabei bekomme ich den Fehler 424 Objekt erforderlich.
Dein Modul möchte ich sowieso in meine TestMappe.xlsm einbauen. Was ich leider immer noch nicht verstehe in Deinen Code ist dass ich nicht sehe das er kopieren soll (nur die Werte).
OK ich bin ein Anfänger villeicht fehlt es mir noch das Wissen dafür.
Aber verstehe ich es hier richtig:
"If Wb.Worksheets("Tabelle1").Cells(2, 2).Value = "USA" Then"
'wenn der "USA" in Tabelle1 in "B2" gefunden wurde(egal ob das die MappeF oder MappeG ist)
"With ThisWorkbook.Worksheets("Tabelle1").Range(Cells(1, 1), Cells(300, 6))"
'dann von diese Tabelle1 kopiere mir den Bereich "A1:F600"
'Jetzt müsste ich dann hier den Ziel Ergebnis eingeben und zwar die Tabelle6
".Value = Wb.Worksheets("Tabelle1").Range(Wb.Worksheets("Tabelle1").Cells(1, 1), Wb. _
Worksheets("Tabelle1").Cells(100, 6)).Value"
'ist das so richtig?
".Value = Wb.Worksheets("Tabelle6").Range(Wb.Worksheets("Tabelle6").Cells(1, 1), Wb. _
Worksheets("Tabelle1").Cells(100, 6)).Value"

Sorry für meine sehr einfache Fragen ich möchte den Code richtig verstehen weil mir wurde hier sehr oft geholffen.
Gerd Danke schön ich hoffe das ich es richtig beschrieben habe.
Gruß Becker

Anzeige
AW: Korrektur "300" statt "100" o.T.
19.04.2008 14:47:40
Gerd L
Hallo Becker!
Sub test()
Dim Wb As Workbook
For Each Wb In Application.Workbooks
Select Case Wb.Name
Case ThisWorkbook.Name
Case Else
If Wb.Worksheets("Tabelle1").Cells(2, 2).Value = "USA" Then
With ThisWorkbook.Worksheets("Tabelle6").Range(ThisWorkbook.Worksheets("Tabelle6").Cells(1, 1), ThisWorkbook.Worksheets("Tabelle6").Cells(600, 6))
.ClearContents 'für Wiederholungen
.Value = Wb.Worksheets("Tabelle1").Range(Wb.Worksheets("Tabelle1").Cells(1, 1), Wb. _
Worksheets("Tabelle1").Cells(600, 6)).Value
End With
Exit For
End If
End Select
Next Wb
End Sub


Eine kleine Fehler bekomme ich in:
"With ThisWorkbook.Worksheets("Tabelle1").Range(Cells(1, 1), Cells(100, 6))"
Laufzeitfehelr 9 Index außerhalb des gültigen Bereichs.



Ich habe es probiert mit "With Workbook.Worksheets("Tabelle1").Range(Cells(1, 1), Cells(100, 6))" dabei bekomme ich den Fehler 424 Objekt erforderlich

.
Mea culpa. Ich hatte den "Range" nicht vollständig wiederholend vor "Cells" eingesetzt.
Außerdem sollen die Werte ja nach Tabelle6 .
Dies habe ich geändert und den Bereich nach deiner letzten Mitteilung auf "A1:F600" geändert.


Was ich leider immer noch nicht verstehe in Deinen Code ist dass ich nicht sehe das er kopieren soll (nur die Werte).


Einzelne Zelleneigenschaften, hier "Value" kann man anderen Zellen auch direkt zuweisen,
bei größen- u. "form"-gleichen Bereichen geht dies am Stück mit der With - End With - Block-Anweisung.


Aber verstehe ich es hier richtig:
"If Wb.Worksheets("Tabelle1").Cells(2, 2).Value = "USA" Then"
'wenn der "USA" in Tabelle1 in "B2" gefunden wurde(egal ob das die MappeF oder MappeG ist)


Ja, so hatte ich dich verstanden, dass "USA" insgesamt nur einmal vorkommen kann.
Daher der "Exit For" - Ausstieg aus der Schleife.
Ansonsten würde der Zielbereich bei diesem Code stets überschrieben werden.
Mit deshalb meine ersten Rückfragen.
Schauen wir mal.
Gruß Gerd

Anzeige
AW: Korrektur "300" statt "100" o.T.
19.04.2008 15:38:36
Becker
Hallo Gerd,
Jawohl, das kalpt jetzt prima. Echt super.
Gerd 1000000000 male Dank, Du kennst sich da viel besser bin Dir daher sehr dankbar für Deine nette Hinweise und jetzt verstehe ich bischen mehr die restlichen Zuweisungen aus Deinen Code.
Recht herzlichen Dank
Schönes WE
Becker

AW: Korrektur "300" statt "100" o.T.
19.04.2008 15:58:47
Becker
Hallo Gerd,
Noch eine Frage hätte ich, kann man in Deinen Code ein Schleife dazu bauen. Wenn z.B. der begriff "USA" nicht vorkommt dann möchte ich die Tabelle6 ausblenden.
Workbooks("TestMappe.xlsm").Sheets("Tabelle6").Select
ActiveWindow.SelectedSheets.Visible = False
Wen das möglich ist muß ich das nach der Anweisung "Next Wb" einfügen?
Danke schön im voraus für Deine Mühe
Gruß Becker

Anzeige
AW: Korrektur "300" statt "100" o.T.
19.04.2008 16:33:07
Gerd L
Hi Becker!


Sub test()
Dim Wb As Workbook
For Each Wb In Application.Workbooks
Select Case Wb.Name
Case ThisWorkbook.Name
Case Else
If Wb.Worksheets("Tabelle1").Cells(2, 2).Value = "USA" Then
With ThisWorkbook.Worksheets("Tabelle6").Range(ThisWorkbook.Worksheets("Tabelle6").Cells(1, _
1), ThisWorkbook.Worksheets("Tabelle6").Cells(600, 6))
.ClearContents   'für Wiederholungen
.Value = Wb.Worksheets("Tabelle1").Range(Wb.Worksheets("Tabelle1").Cells(1, 1), Wb. _
Worksheets("Tabelle1").Cells(600, 6)).Value
End With
ThisWorkbook.Worksheets("Tabelle6").Visible = True
Exit For
End If
End Select
Next Wb
ThisWorkbook.Worksheets("Tabelle6").Visible = xlVeryHidden
'oder falls Blatt noch über die Menüleiste eingeblendbar sein soll:
'ThisWorkbook.Worksheets("Tabelle6").Visible = False
End Sub


Den Code könnte man natürlich durch setzen von Objektverweisen etwas schmaler machen
(nachdem Du das Prinzip verstanden hast).
Gruß Gerd

Anzeige
AW: Korrektur
19.04.2008 17:12:36
Gerd L
Hi Becker,
und schon wieder habe ich gepennt.
Dann statt "Exit For" aus dem Makro mit "Exit Sub" ganz heraus.
Gruß Gerd

AW:Hoffe daß es die letzte Korrektur ist
19.04.2008 17:53:23
Becker
Hi Gerd,
Erstmal vielen vielen Dank für Deine Mühe und Geduld.
Es ist mir schon sehr peinlich dass ich wieder Frage stellen muss.
Sorry daß ich die letzte Frage in letzten Mail nicht genügend beschrieben habe.
Also wenn ich mehreren Mappen auf habe und wenn Dein "test" Makro alle geöffneten Mappen die Tabelle(n)1 geprüft hat ("B2") und nicht den Begriff "USA" gefunden hat dann sollte in deselbe Mappe wo der Makro "test" ist (TestMappe.xlsm") die Tabelle6 ausblenden.
Wenn der Begriff "USA" gefunden wurde dann kommen alle Daten aus diese Tabelle1 wo der Begrif "USA" ist ins Tabelle6 rein. Daher sollte die Tabelle 6 eingeblendet sein.Dank Deinen Code.
Aber wenn alle Tabelle(n)1 nach den Begriff "USA" abgefragt wurden und kein Begriff "USA" gefunden wurde dann sollte die Tabelle6 ausgeblendet werden.
Ich hoffe daß ich Dich(Euch) nicht zu viel damit belaste.
Vielen Dank für Deine (und Euer) Hilfe
Gruß
Becker

Anzeige
AW: AW:Hoffe daß es die letzte Korrektur ist
19.04.2008 18:20:18
Gerd L
Hi Becker,
hast Du meinen letzten Code mit der Änderung "Exit For" durch "Exit Sub" ersetzen ausprobiert.
Nee, warum peinlich. Dieses Forum lebt vom Fragen u. Antworten.
Alles vollig o.K. :-)
Gruß Gerd

AW: AW:Hoffe daß es die letzte Korrektur ist
19.04.2008 18:50:36
Becker
Hallo Gerd,
Danke für Verständnis.
Ich habe "Exit For" duch "Exit Sub" ersetzt und ausprobiert. Da endet der Makro was völlig in Onrdnung ist.
Meine Frage war; wenn der Makro "test" alle offenen Mappen abgefragt hat nach "USA" Namen und von ca 10 offenen Mappen hat er niergendswo der Name "USA" gefunden dann suche ich die Möglichkeit dass Dein "test" Makro mir die vorgegebene Tabell6 ausblendet.
Da ich dann 10 offenen Mappen habe und in jede Mappe suche ich nach bestimmten Begriff Namen konnte mir Dein Makro sehr behiflich sein aber nur unter der Bedienung daß wenn der Begriff "USA" nicht gefunden wurde dann solle die vorgegebenen "Tabelle6" ausgeblendet werden.
Natürlich die restlichen Begriffe sowie die Ziel Tabellen kann ich dementsprechend anpassen.
Ich hoffe das es so was machbar ist in VBA Welt.
Ich danke Dir Gerd
Gruß
Becker

Anzeige
AW: AW:Hoffe daß es die letzte Korrektur ist
20.04.2008 07:31:34
Gerd L
Hallo Becker,
ich weis nicht sicher, ob ich "vom Schlauch runter" bin.
Meinst Du so mit Zähler der Dateien ?


Sub test()
Dim Wb As Workbook
Dim intZähler As Integer
For Each Wb In Application.Workbooks
Select Case Wb.Name
Case ThisWorkbook.Name
Case Else
intZähler = intZähler + 1
If intZähler = 11 Then Exit For

If Wb.Worksheets("Tabelle1").Cells(2, 2).Value = "USA" Then
With ThisWorkbook.Worksheets("Tabelle6").Range(ThisWorkbook.Worksheets("Tabelle6").Cells(1, _
1), ThisWorkbook.Worksheets("Tabelle6").Cells(600, 6))
.ClearContents   'für Wiederholungen
.Value = Wb.Worksheets("Tabelle1").Range(Wb.Worksheets("Tabelle1").Cells(1, 1), Wb. _
Worksheets("Tabelle1").Cells(600, 6)).Value
End With
ThisWorkbook.Worksheets("Tabelle6").Visible = True
Exit Sub
End If
End Select
Next Wb
ThisWorkbook.Worksheets("Tabelle6").Visible = xlVeryHidden
'oder falss Blatt noch über die Menüleiste eingeblendbar sein soll:
'ThisWorkbook.Worksheets("Tabelle6").Visible = False
End Sub


Gruß Gerd

Anzeige
AW: AW:Hoffe daß es die letzte Korrektur ist
21.04.2008 00:02:42
Becker
Hallo Gerd,
Sorry es hat bei mir gedausrt, erst jetzt habe ich Dein Code getestet.
Ich Danke Dir sehr für alle Deine Hilfe und Mühe. Es funktioniert fast alles richtig.Das einzige was mir noch fehlt ist es das wenn alle meine offenen Mappe duchgefratgt werden
"If Wb.Worksheets("Tabelle1").Cells(2, 2).Value = "USA" Then" und keine Begriff der "USA" gefunden werden dann sollte die Tabelle6 ausgeblendet werden.
Also wenn der Name USA gefunden wurde dann werden alle Daten aus dem Tabelle1 nach Tabelle6 kopiert werden was auch wunderbar funkoieniert und die Tabelle6 soll nicht ausgeblendet werden.
Nur mit diesen Befehl:
End With
ThisWorkbook.Worksheets("Tabelle6").Visible = True
Exit Sub
wird die Tabelle6 immer ausgebledet. Ich wollte es nähmlich wenn in allen offenen Mappen kein Begriff "USA" vorkommt dann soll die Tabelle6 ausgeblendet werden.
Trotz alle Deine Bemühungen recht herzlichen Dank für Deine Mühe und Verständnis.
Gruß Becker

AW: AW:Hoffe daß es die letzte Korrektur ist
21.04.2008 21:14:20
Gerd L
Hallo Becker,
sorry, ich raffe es nicht mehr.
Nachdem der Tread etwas länger geworden ist, lesen ihn wahrscheinlich nicht mehr viele.
Ich schlage Dir vor, die Frage ggf. neu einzustellen u. hierbei zunächst die Codezeilen
mit "Visible" wegzulassen, in der Hoffnung, andere verstehen deine diesbezügliche Frage-
stellungen besser.
Gruß Gerd

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige