Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1220to1224
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
Inhaltsverzeichnis

weniger Buttons, weniger Code

weniger Buttons, weniger Code
marell23
Hallo Excelforum!
Ich hab da mal ne Anfrage.
Zunächste der Code:
Sub Daten_Blatt1_einfügen()
Dim Tab1 As Worksheet, Tab2 As Worksheet, Tab3 As Worksheet, i As Long, j As Long
Dim Mappe2 As Workbook, Mappe3 As Workbook, zelle As Range
Sheets("Blatt1").Range("E2:E10000, F2:F10000, I2:I10000").Value = ""
Application.ScreenUpdating = False
On Error GoTo Fehler
Set Tab1 = Sheets("Blatt1")
Set Mappe2 = Workbooks.Open("Pfad\Daten_0815.xls")
Set Tab2 = Mappe2.Sheets("Daten_0815")
Set Mappe3 = Workbooks.Open("Pfad\Daten_0916.xls")
Set Tab3 = Mappe3.Sheets("Daten_0916")
For i = 2 To Tab1.Range("D10000").End(xlUp).Row
For j = 2 To Tab2.Range("B10000").End(xlUp).Row
If Tab1.Range("D" & i).Value = Tab2.Range("B" & j).Value Then
Tab1.Range("E" & i).Value = Tab2.Range("C" & j).Value
End If
Next
Next
For i = 2 To Tab1.Range("E10000").End(xlUp).Row
For j = 2 To Tab3.Range("B10000").End(xlUp).Row
If Tab1.Range("E" & i).Value = Tab3.Range("B" & j).Value Then
Tab1.Range("F" & i).Value = Tab3.Range("C" & j).Value
End If
Next
Next
For i = 2 To Tab1.Range("E10000").End(xlUp).Row
For j = 2 To Tab3.Range("B10000").End(xlUp).Row
If Tab1.Range("E" & i).Value = Tab3.Range("B" & j).Value Then
Tab1.Range("I" & i).Value = Tab3.Range("D" & j).Value
End If
Next
Next
Set Tab1 = Nothing
Set Tab2 = Nothing
Set Tab3 = Nothing
Mappe2.Close
Mappe3.Close
Application.ScreenUpdating = True
End
Fehler: MsgBox "Datei konnte nicht gefunden werden. Bitte Dateinamen prüfen!"
End Sub
Dieser Code steht 8 mal untereinander für 16 verschiedene Blätter und wird von 8 Buttons angewählt.
Meine Frage: Wie kann ich mit diesem Code, einmal geschrieben, alle Sheets nach und nach auswählen damit dann die Daten aus nur noch 2 verbleibenen Blättern (alle 0815 Daten sind nun in einem Blatt) eingefügt werden?
Folgendes habe ich so gelöst: Statt Sheets("Blatt1").Range("E2:E10000, F2:F10000, I2:I10000").Value = "" habe ich dies
For n = 2 To 9 'Inhalt der Spalten löschen
Sheets(n).Range("E2:E10000, F2:F10000, I2:I10000").Value = ""
Next n
Lösungsversuche waren: Die obige Schleife auch Anwenden.
For n = 2 To 9
Sheets(n).Activate
.....
Für Tab1 wollte ich dann schreiben set Tab1 = ActiveSheet oder Activeworkbook.ActiveSheet.
Geht nicht so richtig. Bei jedem Versuch kommt die Meldung Index außerhalb des gültigen Bereiches oder Datei nicht gefunden (interne Fehlermeldung ist deaktiviert).
Hintergrund: zur Zeit sind es 16 Exceltabellen in die ich Daten von Extern einzeln einpflege. Das Makro vergleicht Nummern und überträgt dann die Werte nach Vorgabe. Zukünftig würde ich mit 2 Tabellen arbeiten wollen.
Hoffe das war jetzt nicht zu viel Text.
Grüße
Markus
Für Rückfragen stehe ich zur Verfügung.
Vielen Dank

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

Betreff
Benutzer
Anzeige
AW: weniger Buttons, weniger Code
10.07.2011 13:20:47
Reinhard
Hallo Markus,
ungetestet vielleicht so:

Option Explicit
Sub Daten_BlattX_einfügen()
Dim Tab1 As Worksheet, Tab2 As Worksheet, Tab3 As Worksheet, i As Long, j As Long
Dim Mappe2 As Workbook, Mappe3 As Workbook, zelle As Range, N As Integer
Application.ScreenUpdating = False
On Error GoTo Fehler
For N = 1 To 8
Set Tab1 = Worksheets("Blatt" & N)
Worksheets("Blatt" & N).Range("E2:F10000, I2:I10000").Value = ""
Set Mappe2 = Workbooks.Open("Pfad\Daten_0815.xls")
Set Tab2 = Mappe2.Sheets("Daten_0815")
Set Mappe3 = Workbooks.Open("Pfad\Daten_0916.xls")
Set Tab3 = Mappe3.Sheets("Daten_0916")
For i = 2 To Tab1.Range("D10000").End(xlUp).Row
For j = 2 To Tab2.Range("B10000").End(xlUp).Row
If Tab1.Range("D" & i).Value = Tab2.Range("B" & j).Value Then
Tab1.Range("E" & i).Value = Tab2.Range("C" & j).Value
End If
Next
Next
For i = 2 To Tab1.Range("E10000").End(xlUp).Row
For j = 2 To Tab3.Range("B10000").End(xlUp).Row
If Tab1.Range("E" & i).Value = Tab3.Range("B" & j).Value Then
Tab1.Range("F" & i).Value = Tab3.Range("C" & j).Value
End If
Next
Next
For i = 2 To Tab1.Range("E10000").End(xlUp).Row
For j = 2 To Tab3.Range("B10000").End(xlUp).Row
If Tab1.Range("E" & i).Value = Tab3.Range("B" & j).Value Then
Tab1.Range("I" & i).Value = Tab3.Range("D" & j).Value
End If
Next
Next
Next N
Set Tab1 = Nothing
Set Tab2 = Nothing
Set Tab3 = Nothing
Mappe2.Close
Mappe3.Close
Application.ScreenUpdating = True
End
Fehler:   MsgBox "Datei konnte nicht gefunden werden. Bitte Dateinamen prüfen!"
End Sub

Gruß
Reinhard
Anzeige
AW: weniger Buttons, weniger Code
13.07.2011 08:50:43
marell23
Hallo!
Danke für die erste Hilfe.
Allerdings wird noch gemeckert.
In der Zeile Set Tab1 = Worksheets("Blatt" & N) gibt es die Fehlermeldung
"Laufzeitfehler '9' Index außerhalb des gültigen Bereiches"
Ich kann jetzt auf Anhieb nicht feststellen was Fehlerhaft sein soll.
Soll "Blatt" durch was ersetzt werden? Ich habe es mit allem versucht, "Sheets"; oder
die genauen Namen einzelner Blätter. Fehlermeldung kommt immer wieder.
Anbei mal eine Beispiel - Mappe.
https://www.herber.de/bbs/user/75685.xls 'Hier sollen die Daten eingefügt werden
https://www.herber.de/bbs/user/75686.xls 'Die erste Datei zum Auslesen der Daten
https://www.herber.de/bbs/user/75687.xls 'Die zweite Datei zum Auslesen der Daten
Für Fragen stehe ich gerne zur Verfügung.
Gruß
Markus
Anzeige
AW: weniger Buttons, weniger Code
13.07.2011 09:37:51
Reinhard
Hallo Markus,
For N = 1 To 8
Set Tab1 = Worksheets("Blatt" & N)
...
war/ist für deine Ausgangsfrage gedact wo es so klang und auch im Code so zu lesen war daß du wohl mind. 9 Blätter hast.
Nach einem anderen Blatt kommen dann 8 Blätter mit den Namen Blatt1, Blatt2, Blatt3, usw.
In deiner hochgeladenen Mappe hats du nur 4 Blätter,
Start, Dat4, Dat3, Tabelle1
Da muss ja der Code stolperen.
Wenn deine 8 Blätter Dat1, Dat2, Dat3, usw heißen ersetzte im Code Blatt durch Dat.
Gruß
Reinhard
AW: weniger Buttons, weniger Code
13.07.2011 11:33:15
marell23
In der Tat befinden sich in der Original Datei 11 Blätter.
Wobei die Daten nur bei 8 eingetragen werden sollen.
Oben das ist nur ein abgespecktes Beispiel zum besseren Verständnis.
Hier würden auch nur die Daten in 2 Blättern eingetragen.
Zu meinem besseren Verständnis.
Bei deinem Vorschlag, müssen die Blätter alle gleich benannt sein? (z.B. Dat1 bis Dat9)
Geht dies nicht wenn die Blätter unterschiedlich benannt sind? (z.B. Teile_Vorne_123, Teile_hinten_456, usw...)
Gruß
Markus
Anzeige
AW: weniger Buttons, weniger Code
13.07.2011 16:12:04
Reinhard
Hallo Markus,
Bei deinem Vorschlag, müssen die Blätter alle gleich benannt sein? (z.B. Dat1 bis Dat9)
nein, Dat1 bis Dat8 *schwer grins*
Geht dies nicht wenn die Blätter unterschiedlich benannt sind? (z.B. Teile_Vorne_123, Teile_hinten_456, usw...)
Nein, das geht locker.
Wenn die Mappe aktiv ist siehste ja unten die Blattnamen, wenn dann deine Blätter von links nach rechts den Index 3 bis 10 haben so kannste da mit
For N =3 to 10
Worksheets(n)...
...
(In dem Fall läuft der Index von links nach rechts durch die unten angezeigten Blattnamen und beginnt mit 1.)
Ist natürlich gefährdet wenn da Blätter eingefügt werden.
Dann vielleicht so
Dim Blaetter, N
Blaetter=Array("Teile_Vorne_123", "Teile_hinten_456")
For n=lbound(blaetter) to ubound(blaetter)
with worksheets(blaetter(n))
...
Gruß
Reinhard
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige