Bestimmte Spalten einer Zeile in neue Datei einfügen, wenn bestimmter Wert erfüllt?

...komplette Frage anzeigen

2 Antworten

Hier mal ein kleiner Denkanstoß :)

Damit kannst du jedes Workbook ansprechen (Auch wenn du ein neues offen hast)

'Sample Code: By xGlumi
Dim book As Workbook
Dim sheet As Worksheet
For Each book In Workbooks
Debug.Print "----- Workbook: " & book.Name & " -----"
For Each sheet In book.Sheets
Debug.Print sheet.Name & " (Mappe von: " & book.Name & ")"
Next sheet
Next book

Bei Fragen einfach kommentieren ;)

MFG xGlumi

Danke erst mal für deine Antwort!

Muss ich deinen Code in Verbindung mit meinen setzen? Oder ist dieser unabhängig von meinem Code? Falls nicht, wie setze ich ihn in Verbindung mit meinem Code?

Lg

0
@bemerkenswert

Im moment steht mein Code unabhängig da.

Er gibt dir alle Namen der momentan offenen Workbooks aus.

Deklariere dir also ein neues Workbook-Object:

Dim kundeBook as Workbook

Anschließend lässt du die Schleife durchleifen und suchst(evt. anhand der Namen) raus welches das Workbook ist was du nutzen willst.

Hier ein Beispiel (wenn du eh nur 2 Workbooks offen hast)

'Sample Code: By xGlumi
Dim book As Workbook
Dim kundeBook as Workbook
Dim sheet As Worksheet

For Each book In Workbooks
if not book.name = activeworkbook.name then
set kundeBook = book
end if
Next book

Jetzt hast du das erforderliche Objekt um dein "altes" Workbook anzusprechen

.

MFG xGlumi

0
@xGlumi

Bei mir zeigt es bei

if not book.name = activeworkbook.name then

einen Fehler an. Was habe ich falsch gemacht? 

EDIT: Hat geklappt, war ein Zeichen zu viel.

0
@bemerkenswert

Leider tut sich da nichts. Bin genauso weit, wie mit meinem Code. Es öffnet sich nur eine neue Mappe, ohne jeglichen Inhalt.

0
@xGlumi

Dieser sieht wie folgt aus:

Private Sub CommandButton1_Click()
Dim wkbMappe As Workbook
Set wkbMappe = Workbooks.Add
'MsgBox wkbMappe.Name

End Sub

Sub test()
Dim book As Workbook
Dim kundeBook, zielbook As Workbook
Dim sheet As Worksheet

Set zielbook = ActiveWorkbook

For Each book In Workbooks
If Not book.Name = ActiveWorkbook.Name Then
Set kundeBook = book
End If

Next book

kundeBook.Select

Dim a As Long, i As Long
Application.ScreenUpdating = False
a = 2
For i = 1 To 10000

If ActiveWorkbook.Sheets("Kunde1").Cells(i, "AD") = 2 Then
ActiveWorkbook.Worksheets(1).Cells(a, 1).Value = Worksheets("Kunde1").Cells(i, 2).Value
ActiveWorkbook.Worksheets(1).Cells(a, 2).Value = Worksheets("Kunde1").Cells(i, 22).Value
ActiveWorkbook.Worksheets(1).Cells(a, 3).Value = Worksheets("Kunde1").Cells(i, 23).Value
a = a + 1

End If

Next i
Application.ScreenUpdating = True
End Sub

Habe ein paar "Änderungen" vorgenommen, ob diese nun gut waren, weiß ich nicht. Nun zeigt es mir aber bei kundeBook.Select einen Fehler.

Hoffe, du kannst damit was anfangen.

1
@bemerkenswert

Sry fürs späte melden ^^
Bin hier nur aufm Arbeits PC, und da Freitag war hieß es Wochenende :P


If ActiveWorkbook.Sheets("Kunde1").Cells(i, "AD") = 2 Then

Ich denke das Sheet "Kunde1" ist in dem anderen Workbook, und nicht im ActiveWorkbook.

MFG xGlumi

1
@xGlumi

Ist ja kein Problem, danke, dass du mich nicht aufgibst. ;-)

Ja, du hast Recht. Kunde1 ist nicht im ActiveWorkbook, da habe ich wohl ein bisschen was verdreht. Aber wie sieht es dann richtig aus?

Eventuell bezogen auf den gesamten Code?

0
@bemerkenswert

Überall wo:

ActiveWorkbook.Sheets("Kunde1")

steht, wird zu:

kundeBook.Sheets("Kunde1")

Also wenn man davon ausgeht, dass dein Sheet im anderen Workbook auch "Kunde1" heisst.

Es wäre echt gut, wenn du auch einfach mal deine beiden Workbooks(Oder zumindest das Kunden workbook)  abscreenst und hier rein postest.

1
@xGlumi

Ich versuche mein Glück morgen, bin gerade mit was anderem auf der Arbeit beschäftigt.

Leider kann ich nichts screenen oder dergleichen, da dies firmenintern ist. Habe es schon so gut wie es geht anonymisiert.

Aber was ist mit der Zeile

kundebook.Select

Diese wird mir ja als Fehler angezeigt. Was ist daran falsch? Oder wird das dann mit "kundeBook.Sheets" aufgelöst?

Vielen Dank schonmal für alles, ich melde mich morgen in aller Frühe.

0
@bemerkenswert

1. Es ist nie gut zu sagen: "Es kommt ein Fehler"...
Ich bin leider nicht allwissend, und weiss deshalb nicht WAS in dem Fehler drin steht ^^

(Wäre gut, wenn du das mal hier rein postest)

2. Wieso musst du überhaupt kundeBook selektieren? (Braucht man doch net)

MFG xGlumi

0

Anstatt des ActiveWorkbook könntest Du Quelle und Ziel auch so angeben:

Workbooks("Datei1.xlsm").Sheets("Kunde1").cells...

Nur das Problem hierbei ist, ich weiß nicht, wie die Zieldatei heißt.

Diese wird ja durch Knopfdruck erst erstellt und hat den Namen Mappe [beliebige Zahl].

0
@bemerkenswert

Wie wird denn die Datei erzeugt bzw. der Name vergeben? Das lässt sich dann abgreifen und weiterverwenden. Wenn die neu geöffnete Datei zunächst das activeworkbook ist, kannst Du den Namen auch so ermitteln ActiveWorkbook.name

0

Was möchtest Du wissen?