Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1044to1048
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
Mal wieder kein weiterkommen...
28.01.2009 10:43:32
Joachim
Hallo,
ich hoffe , es kann mir jemand weiter helfen, habe folgendes Problem:
Hier gleich mal die Beispieldatei:
https://www.herber.de/bbs/user/58857.zip
Ich starte die datei "Test Import" und möchte mit dem Button "Command" daten aus verschiedenen Tabellenblättern kopieren.
Wen ich den Button anklicke , werden ich aufgefordert, die Quelle zu laden (in meinem Fall die Datei "Quelle Master.xls"
Die Quelle wird geöffnet und ich werde gefragt, von welchen Tabellenblätter ich Daten kopieren will.
Hier leigt das Problem: Es werden nur immer die ersten 3 Tabellenblätter angezeigt.
Ich wollte folgendes ändern, bekomme es aber nicht hin:
Hier werden ich aufgefordert, die entsprechenden Zahlen einzugeben, von dieser Auswahl wird dann kopiert. Denn werden ich nochmal gefragt...
so lange bis ich abbrechen klicke.
Mir wäre es lieber, ich muss keine Zahlen eingeben, sondern alle Blätter werden angezeigt und davor kann ich ein Häckchen setzen, welche
Tabellenblätter ich will und diese werden dann auf meine Importseite kopiert
Wichtig dabei: sollte auf einem Tabellenblatt in der Zelle F3 mal NICHT "Bestellung" stehen, soll dieses Blatt nicht auswählbar sein.
(vielleicht eintrag deaktiviert oder einach keine Auswahlbox"
Ist das Machbar ? Hoffe, jemand kann mir Helfen.
Die Krönung dabei wäre noch, wenn nach der Auswahl der Tabellenblätter die ausgewählten auch gleich in meine Test-Import Datei
mit reinkopiert würden (komplett als tabellenblatt)
Alles Kompliziert, stimmts.
Ich hoffe , es findet sich einer, das das blickt.
Danke mal
Joachim

19
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Mal wieder kein weiterkommen...
28.01.2009 13:37:54
Harald
Hallo Joachim, ohne eine entsprechende Angabe in Excel gefunden zu haben, vermute ich, dass der "strprompt" zu lang wird. Getestet so:
strPrompt = strPrompt
' strPrompt = "Aus welchem Blatt Daten einlesen?" & vbLf & strPrompt
Durch weglassen der ersten zeile aus dem Prompt werden auch prompt (kleines Wortspiel) alle 4 Tabellenblätter angezeigt.
Da es sicher auch mal mehr als 4 Tabellenblätter werden können, wäre der Königsweg statt deer InputBox eine Userform mit ComboBox (Kombinationsfeld) oder ListBox (Listenfeld) zu verwenden. In die Auswahlliste trägst Du die Namen der gefundenen Tabellenblätter ein - dabei kannst Du auch gleich die Blätter überspringen, in denen NICHT Bestellung steht.
Nach Auswahl aus der Liste durch den Benutzer liest Du in der Klick-Routine des "O.K." Buttons den vom Anwender gewählten Wert (Werte) aus der Combobox aus und überträgst ihn in eine Variable in Deinem Hauptprogram, wo Du die Werte weiter verwenden kannst (also im Prinzip alles hinter der ehemaligen InputBox).
Habe jetzt leider keine Zeit, dasauszuarbeiten, aber guck mal hier: https://www.herber.de/forum/messages/1044517.htm
Gruß Harald
Anzeige
AW: Mal wieder kein weiterkommen...
28.01.2009 13:50:00
Mike
Hey Joachim,
ist denn aktuell das Blatt "Tabelle1" fälschlicherweise drin, oder
muss dass so sein?
Und ist es richtig, dass die Auswahl-Aufforderung viermal kommt?
Gruss
Mike
AW: Mal wieder kein weiterkommen...
28.01.2009 14:03:00
Joachim
Hi Mike,
das Tabellenblatt1 habe ich zum Testen zusätzlich eingefügt, gehört eigentlich nicht rein. wollte nur sehen, wenn mehr tabellen drin sind , welche nachher bei der Auswahl angeboten werden.
Es könnten im Prinzip auch mal 10 verschiedene Tabellenblätter sein.
Diese Auswahlaufforderung ist genau das, was mich stört und ich nicht anders hinbekomme.
Mir wäre es viel lieber, wenn nur EINMAL eine Box kommt, wo alle Tabellenblätter , die in F3 diesen Eintrag "BESTELLUNG" haben und ich dann irgend wie auswählen kann (entweder durch anklicken oder Häckchen) auswählen kann, welche eingelesen werden sollen.
Nicht das ich zig mal gefragt werden, welche Blätter ich noch einlesen will.
Hoffe, DU kannst mir weiterhelfen.
Danke schon mal
Joachim
Anzeige
Kannst Du weiter helfen.....
28.01.2009 20:43:11
Joachim
..oder soll ich mich weiter durch hangeln.
Sag kurz Bescheid.
Danke
Joachim
Kann mir niemand helfen, schluchts ...
29.01.2009 08:29:00
Joachim
..
bin echt am ende mit meinem Anfängerwissen...
Gruss
Joachim
AW: Kann mir niemand helfen, schluchts ...
29.01.2009 14:22:00
fcs
Hallo Joachim,
der Code kommt mir doch irgendwie bekannt vor :-)
Ich hab die Datei jetzt so umgestrickt, dass für die Tabellenauswahl ein Userform mit einer Listbox mit Mehrfachauswahl angezeigt wird.
https://www.herber.de/bbs/user/58902.xls
In der Prozedur DatenImport muss du das Startverzeichnis noch wieder korrekt einstellen. Das hatte ich vergessen wieder zurückzusetzen.
Gruß
Franz
Anzeige
schaue es an
29.01.2009 14:50:00
Joachim
Hallo Franz,
ach Du warst damals der freundliche Helfer. Bin ich froh, dass Du meinen Trade gesehen hast :-))
schaue es mir an und melde mich wieder, OK
Lausche aber immer wieder mal hier rein :-)
Danke
Gruss
joachim
AW: Kann mir niemand helfen, schluchts ...
29.01.2009 16:06:00
Joachim
Hallo Franz,
toll, so ist's super, grosses Dankeschön.
Sag mal, wäre es Dir vielleicht noch möglich, so wie ich schon beschrieben hatte, die ausgewählten Tabellenblätter, also nur die , die mit einem Häckchen in diesen Auswahlfesnter versehen wurden, auch gleich von der Quelldatei in die Zieldatei mit rein zu kopieren.
Im Prinzip müsste das doch gehen, es sind in diesem Moment doch beide Dateien offen, oder ? Und man könnte doch sicher die getroffene Auswahl dazu verwenden, um die entsprechenden Tabellenblätter zu kopieren ?
Wäre nett, danke
Gruss
Joachim
Anzeige
AW: Kann mir niemand helfen, schluchts ...
30.01.2009 09:30:00
fcs
Hallo Joachim,
dann muss du den folgenden Abschnitt der Import-Prozedur anpassen.
Damit die Bildschirmanzeige während des Kopierens nicht fimmert hab ich die ScreenUpdating-Zeilen auch noch etwas verschoben.
Gruß
Franz

If bolAbbrechen = False Then
'Import Tabellenblatt auslesen
Application.ScreenUpdating = False
For intI = LBound(arrBlatt) To UBound(arrBlatt)
Set wksQuelle = wbQuelle.Worksheets(arrBlatt(intI))
'Zeilen in Quelltabelle abarbeiten
With wksQuelle
For lngZeileQ = 1 To .Cells.SpecialCells(xlCellTypeLastCell).Row
If Not IsEmpty(.Cells(lngZeileQ, 1)) And _
(.Cells(lngZeileQ, 1) = "Gesamt" Or _
.Cells(lngZeileQ, 1) = "Teil" Or _
.Cells(lngZeileQ, 1) = "Rest" Or _
IsNumeric(.Cells(lngZeileQ, 1))) Then
lngZeileZ = lngZeileZ + 1 'Zielzeilenzähler erhöhen
'Zeile kopieren
.Rows(lngZeileQ).Copy Destination:=wksZiel.Cells(lngZeileZ, 1)
End If
Next
'Blatt ans Ende der Ziel-Datei kopieren
.Copy After:=wbZiel.Sheets(wbZiel.Sheets.Count)
End With
Next
Application.ScreenUpdating = True
End If


Anzeige
Echt Spitze...
30.01.2009 10:28:00
Joachim
Hallo Franz,
echt Spitze. Vielen, vielen Dank. Darauf kann ich voll aufbauen. :-))))
Hoffe , ich muss Dich nicht mehr belästigen.
Gruss
Joachim und schönes WE
@Franz , kannst du mir nochmal helfen ?
02.02.2009 11:52:39
Joachim
Hi Franz,
sorry, ist mir ja fast schon peinlich, das ich nochmal nachfrgen muss. :-(
Könntest Du mir bitte, bitte noch mal Helfe. Du hast mir doch den tollen Code zum einlesen der Tabellenblätter geschickt. Leider habe ich nun schon wieder eine neue Situation und an meiner Vorgabe hat sich was geändert. (Shitt)
Das einlesen würde sich etwas verändern. kannst Dui mir nochmal helfen. Sag Bescheid.
Will freundlicherweise erst mal fragen, bevor ich loslege. Ist ja nicht Selbstverständlich.
Danke.
Gruss
Joachim
Anzeige
AW: @Franz , kannst du mir nochmal helfen ?
02.02.2009 12:37:00
fcs
Hallo Joachim,
dann poste mal deine Frage(n). ich habe aber wahrscheinlich erst morgen Zeit für eine Antwort.
Gruß
Franz
AW: @Franz , kannst du mir nochmal helfen ?
02.02.2009 14:46:08
Joachim
Hallo Franz,
vielen Dank. Also folgendes Problem ist aufgetreten. Es geht im Prinzip immer noch um die Tabellenblätter die aus einer anderen Datei importiert werden sollen.
Das Erste, was sich ändert ist: die Tabellenblätter sollen zuerst mal in meine ExcelSheet gebracht werden. Das habe ich hingebracht, da habe ich ein Beispiel gefunden.
Also, alle Daten, die ich nun brauche, befinden sich in meiner Mappe
So die Tabellenblätter sind nun alle in meinem Sheet drin. Dann geht es wieder darum, herauszufinden, welche Tabellenblätter haben in der Zelle F9 die Inhalt „Bestellung“ haben.
Von diesen Tabellenblättern mit F9= „Bestellung“ sollen nun wieder die Daten auf die Seite „IMPORT“ eingelesen werden, wie seither auch:
Wenn in Spalte A eine ZAHL steht , oder wenn die Zeile in A mit „Gesamt“ oder "Teil“ oder "Rest" anfängt.
So , bis hierher hat sich eigentlich noch nichts geändert ausser, dass die Daten (Tabellenblätter) nun bereits in der gleichen Excelmappe stehn.
Hier kommt nun das Problem : die Zeilen , wo vorher die Prüfung statt gefunden hat (IsNumeric oder „Gesamt“ oder „Teil“ oder "Rest") sollen nun nicht mehr per Copy / Paste , also 1:1 in das Tabellenblatt „Import“ reinkopiert werden, sondern die Zeile soll aus verschiedenen Daten zusammen gesetzt werden. (es sollen Strings zwischen die einzelnen Spalten)
Wie sich die Zeilen dann zusammensetzen , kannst Du hier in der Datei sehen:
https://www.herber.de/bbs/user/59000.xls
Das Sheet „TABELLENBLATT“ ist also mein bereits reinkopiertes Blatt aus der externen Quelle. Aus diesen Zeilen sollen nun die neuen Zeile zusammengebaut werden und nach Import kopiert werden. Ich gehe in diesem Fall davon aus, es gibt nur ein Blatt mit F9 = „Bestellung“
PS: So eine Auswahlliste (UseForm3 wäre nicht mehr nötig). Es können alle Blätter , die F9 = „Bestellung“ beinhalten, gleich eingelesen werden.
Siehst Du da eine Chance ? (Ich glaub, ich krieg die KRIESE)
Bei Fragen, melde dich, Ich hoffe, ich konnte Dir alles verständlich erklären.
Auf jeden Fall jetzt schon mal ein dickes Danke
Joachim
Anzeige
AW: Sorry, benutze leiber die Beispieldatei
02.02.2009 18:00:00
fcs
Hallo Joachim,
hier die Prozeduren, die die Blätter kopieren und die die Daten aus den reinkopierten Blättern in das Importblatt übertragen. Ein paar Zeilen muss du ggf. noch anpassen.
Gruß
Franz

Sub DatenImport()
Dim wbQuelle As Workbook, wksQuelle As Worksheet
Dim wbZiel As Workbook
Dim varAuswahl, strVerzeichnisAktuell
Dim intI, strPrompt As String
'Verzeichnis der Quelldatei = Startverzeichnis für Dateiauswahl
'  Const strPfadQ As String = "D:\Daten"           'ggf. Anpassen!!
Const strPfadQ As String = "C:\Lokale Daten\Test"             'ggf. Anpassen!!
'Aktuelles Verzeichnis merken
strVerzeichnisAktuell = VBA.CurDir
'Startverzeichnis für Importdatei-Auswahl setzen
VBA.ChDir strPfadQ
varAuswahl = Application.GetOpenFilename(FileFilter:="Excel(*.xls),*.xls)", _
Title:="Bitte Quelldatei für Daten-Import öffnen")
If Not varAuswahl = False Then
Set wbZiel = ActiveWorkbook
'Quelldatei schreibgeschützt öffnen
Set wbQuelle = Workbooks.Open(Filename:=varAuswahl, ReadOnly:=True)
intI = -1
Application.ScreenUpdating = False
For Each wksQuelle In wbQuelle.Worksheets
If InStr(1, wksQuelle.Range("F3"), "Bestellung") > 0 Then 'Zelladresse anpassen
intI = intI + 1
With wksQuelle
.Copy After:=wbZiel.Sheets(wbZiel.Sheets.Count)
End With
End If
Next
Application.ScreenUpdating = True
If intI = -1 Then
MsgBox "In Quelldatei keine Blätter mit Eintrag ""Bestellung"" in F3 gefunden!"
Else
wbZiel.Activate
'Daten nach Importblatt übertragen
Call DatenNachImport
End If
If MsgBox("Quelldatei wieder schließen?", vbQuestion + vbYesNo, "Daten-Import") _
= vbYes Then
wbQuelle.Close savechanges:=False
End If
End If
'Verzeichnis wieder zurücksetzen
VBA.ChDir strVerzeichnisAktuell
'Datenobjekte aufräumen
Set wksQuelle = Nothing
Set wbZiel = Nothing: Set wbQuelle = Nothing
End Sub
Sub DatenNachImport()
Dim wksDaten As Worksheet, wksImport As Worksheet, wksQuelle As Worksheet
Dim lngZeileImp As Long, lngZeileQ As Long
Set wksDaten = Worksheets("Daten")
Set wksImport = Worksheets("Import")
'Startzeile für Import
With wksImport
lngZeileImp = .Cells(.Rows.Count, 1).End(xlUp).Row
End With
For Each wksQuelle In ActiveWorkbook.Worksheets
Select Case LCase(wksQuelle.Name)
Case LCase(wksDaten.Name), LCase(wksImport.Name), LCase("ImportMuster")
'do nothing
Case Else
With wksQuelle
If UCase(.Range("F10")) = "BESTELLUNG" Then '##### Zelladresse prüfen!!!
For lngZeileQ = 14 To .Cells(.Rows.Count, 1).End(xlUp).Row
If Not IsEmpty(.Cells(lngZeileQ, 1)) Then
If IsNumeric(.Cells(lngZeileQ, 1)) Then
lngZeileImp = lngZeileImp + 1
wksImport.Cells(lngZeileImp, 1).Value = .Cells(lngZeileQ, 1).Value
wksImport.Cells(lngZeileImp, 2).Value = "STRING1"
wksImport.Cells(lngZeileImp, 3).Value = .Range("B2").Value
wksImport.Cells(lngZeileImp, 4).Value = .Cells(lngZeileQ, 6).Value
wksImport.Cells(lngZeileImp, 5).Value = .Cells(lngZeileQ, 11).Value
wksImport.Cells(lngZeileImp, 6).Value = "EURO"
wksImport.Cells(lngZeileImp, 7).Value = .Range("E2").Value
'            wksImport.Cells(lngZeileImp, 8).Value = "" 'bleibt leer
wksImport.Cells(lngZeileImp, 9).Value = .Cells(lngZeileQ, 12).Value
'            wksImport.Cells(lngZeileImp, 10).Value = "" 'bleibt leer
'            wksImport.Cells(lngZeileImp, 11).Value = "" 'bleibt leer
wksImport.Cells(lngZeileImp, 12).Value = "ORDER1"
wksImport.Cells(lngZeileImp, 13).Value = "ORDER2"
wksImport.Cells(lngZeileImp, 14).Value = "ORDER3"
wksImport.Cells(lngZeileImp, 15).Value = "ORDER4"
wksImport.Cells(lngZeileImp, 16).Value = "ORDER5"
wksImport.Cells(lngZeileImp, 17).Value = wksDaten.Range("C15").Value
'            wksImport.Cells(lngZeileImp, 18).Value = "" 'bleibt leer
wksImport.Cells(lngZeileImp, 19).Value = 1 '100%
wksImport.Cells(lngZeileImp, 20).Value = "BELEG"
wksImport.Cells(lngZeileImp, 21).Value = wksDaten.Range("C17").Value
'            wksImport.Cells(lngZeileImp, 22).Value = "" 'bleibt leer
Else
If UCase(Left(.Cells(lngZeileQ, 1), 6)) = "GESAMT" _
Or UCase(Left(.Cells(lngZeileQ, 1), 4)) = "TEIL" _
Or UCase(Left(.Cells(lngZeileQ, 1), 5)) = "TOTAL" Then
lngZeileImp = lngZeileImp + 1
wksImport.Cells(lngZeileImp, 1).Value = "1"
wksImport.Cells(lngZeileImp, 2).Value = "STRING1"
wksImport.Cells(lngZeileImp, 3).Value = .Range("B2").Value
.Cells(lngZeileQ, 1).Copy Destination:=wksImport.Cells(lngZeileImp, 4)
wksImport.Cells(lngZeileImp, 5).Value = .Cells(lngZeileQ, 9).Value
wksImport.Cells(lngZeileImp, 6).Value = "EURO"
wksImport.Cells(lngZeileImp, 7).Value = .Range("E2").Value
'            wksImport.Cells(lngZeileImp, 8).Value = "" 'bleibt leer
wksImport.Cells(lngZeileImp, 9).Value = .Cells(lngZeileQ, 12).Value
'            wksImport.Cells(lngZeileImp, 10).Value = "" 'bleibt leer
'            wksImport.Cells(lngZeileImp, 11).Value = "" 'bleibt leer
wksImport.Cells(lngZeileImp, 12).Value = "ORDER1"
wksImport.Cells(lngZeileImp, 13).Value = "ORDER2"
wksImport.Cells(lngZeileImp, 14).Value = "ORDER3"
wksImport.Cells(lngZeileImp, 15).Value = "ORDER4"
wksImport.Cells(lngZeileImp, 16).Value = "ORDER5"
wksImport.Cells(lngZeileImp, 17).Value = wksDaten.Range("C15").Value
'            wksImport.Cells(lngZeileImp, 18).Value = "" 'bleibt leer
wksImport.Cells(lngZeileImp, 19).Value = 1 '100%
wksImport.Cells(lngZeileImp, 20).Value = "BELEG"
wksImport.Cells(lngZeileImp, 21).Value = wksDaten.Range("C17").Value
'            wksImport.Cells(lngZeileImp, 22).Value = "" 'bleibt leer
End If
End If
End If
Next
End If
End With
End Select
Next
End Sub


Anzeige
AW: Sorry, benutze leiber die Beispieldatei
02.02.2009 20:05:56
Joachim
Hallo Franz,
Du bist ja ein WAHNSINNSKERL, in so kurzer Zeit so ein Ergebnis. (STAUN)
UNd ich habe schon die Kriese bekommen, Du kannst meine Beispieldatei nicht richtig interpretieren. WOW
Bin gerade beim Testen und anpassen. Also im Moment wird , soweit ich das sehe, alles Richtig eingelesen und befüllt. Das scheint zu klappen.
Hätte nur noch zwei kleine Bitten:
- ich habe vergessen zu erwähnen, so wie in Deinem ersten Beispiel, die Daten in dem Importdatenblatt erst ab Zeile 10 eingefügt werden sollen. (Wegen den Spaltenköpfen).
- In Deinem Code hier werden die betroffenen Tabellenblätter (F3 = "Bestellung") bei mir reinkopiert, das passt. Wie ich heute Mittag erwähnt hatte, brauche ich nun alle Tabellenblätter aus der Quelldatei. Auch wenn diese nicht für das zusammenstallen der Daten benötigt werden, sollen die restlichen Tabellenblätter auch kopiert werden. Ist das noch möglich ?
Ansonsten, wie schon die ganze Zeit, grosse Spitze.
Gruss
Joachim
Anzeige
Ich glaube ich habs gefunden ,...
03.02.2009 09:28:24
Joachim
... habe (glaube) beide Probleme gelöst, melde mich noch mal, ob alles geklappt hat.
Gruss
Joachim
AW: Sorry, benutze leiber die Beispieldatei
03.02.2009 09:39:50
fcs
Hallo Joachim,
je weniger Ausnahmen, desto einfacher werden Prozduren.
Hier die neue Importprozedur zum Kopieren der Blätter. In der Prozedur für das Übertragen der Daten ins Blatt Import muss du nur eine Zeile anpassen.
Gruß
Franz

Sub DatenImport()
'Modifikation 2009-02-02
Dim wbQuelle As Workbook
Dim wbZiel As Workbook
Dim varAuswahl, strVerzeichnisAktuell As String
'Verzeichnis der Quelldatei = Startverzeichnis für Dateiauswahl
Const strPfadQ As String = "D:\Daten"           'ggf. Anpassen!!
'  Const strPfadQ As String = "C:\Lokale Daten\Test"             'ggf. Anpassen!!
'Aktuelles Verzeichnis merken
strVerzeichnisAktuell = VBA.CurDir
'Startverzeichnis für Importdatei-Auswahl setzen
VBA.ChDir strPfadQ
varAuswahl = Application.GetOpenFilename(FileFilter:="Excel(*.xls),*.xls)", _
Title:="Bitte Quelldatei für Daten-Import öffnen")
If Not varAuswahl = False Then
Set wbZiel = ActiveWorkbook
'Quelldatei schreibgeschützt öffnen
Set wbQuelle = Workbooks.Open(Filename:=varAuswahl, ReadOnly:=True)
Application.ScreenUpdating = False
'Alle Tabellen-Blätter aus Quelle in Zieldatei kopieren
wbQuelle.Worksheets.Copy After:=wbZiel.Sheets(wbZiel.Sheets.Count)
wbZiel.Activate
Application.ScreenUpdating = True
'Daten nach Importblatt übertragen
Call DatenNachImport
If MsgBox("Quelldatei wieder schließen?", vbQuestion + vbYesNo, "Daten-Import") _
= vbYes Then
wbQuelle.Close savechanges:=False
End If
End If
'Verzeichnis wieder zurücksetzen
VBA.ChDir strVerzeichnisAktuell
'Datenobjekte aufräumen
Set wbZiel = Nothing: Set wbQuelle = Nothing
End Sub
Anpassung in Sub DatenNachImport()
'Startzeile für Import
With wksImport
'    lngZeileImp = .Cells(.Rows.Count, 1).End(xlUp).Row 'nach letzter Zeile mit Daten einfügen
lngZeileImp = 9 'ab Zeile 10 einfügen               '###2009-02-02
wksImport.Activate                                  '###2009-02-02 (nicht zwingend  _
erforderlich)
End With


Alles bestens, vielen, vielen Dank
03.02.2009 20:33:45
Joachim
Hallo Franz,
hast mir echt super viel geholfen, vielen Dank nochmal
Hoffe, ich muss dich nun nicht mehr belästigen:-)
Gruss
Joachim

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige