Frage von bemerkenswert, 145

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

Guten Morgen!

Habe mir mal was überlegt und wollte fragen, ob das so geht, wie ich mir das vorstelle:

Bei Knopfdruck eines CommandButtons, öffnet sich eine neue Excel-Mappe. In diese sollte er mir von der vorherigen Mappe aus einer bestimmten Tabelle 3 bestimmte Spalten anzeigen, wenn der bestimmte Wert "2" am Ende dieser Spalte erfüllt.

Quasi so (funktioniert nicht ganz)

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

If 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

Value = Kunde1 ist die bestimmte Tabelle aus der "1. Mappe"

Und ActiveWorkbook wäre quasi die, die gerade durch Knopfdruck geöffnet wurde. (Code zum Öffnen einer Mappe ist oben, habe ich aber nicht mit hier reinkopiert.)

Mein Problem:

Wenn sich nun die neue Mappe öffnet, sucht er ja in dieser Mappe nach "Kunde1", da diese Mappe aber leer ist, weil sie ja logischer Weise gerade erst erstellt wurde, nichts findet.

Komme ich damit mit meinem bisherigen Code weiter? Muss ich irgendwas dazwischen schreiben oder Ähnliches?

Wäre lieb, falls einer sich die Mühe macht, und es mir "perfekt" macht, die gleichen Zahlen, die ich verwendet habe, zu übernehmen.

Danke und hoffe, dass alles verständlich ist.

Antwort
von xGlumi, 99

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

Kommentar von bemerkenswert ,

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

Kommentar von xGlumi ,

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

Kommentar von bemerkenswert ,

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.

Kommentar von bemerkenswert ,

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

Kommentar von xGlumi ,

Poste mal deinen aktuellen/neuen Code.

MFG xGlumi

Kommentar von bemerkenswert ,

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.

Kommentar von xGlumi ,

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

Kommentar von bemerkenswert ,

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?

Kommentar von xGlumi ,

Ü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.

Kommentar von bemerkenswert ,

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.

Kommentar von xGlumi ,

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

Expertenantwort
von Ninombre, Community-Experte für Excel, 89

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

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

Kommentar von bemerkenswert ,

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].

Kommentar von Ninombre ,

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

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten