Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

VBA - Ausgewählte Zeilen in Listbox alle kopieren

Frage Entwicklung VB for Applications

Mitglied: manuel5

manuel5 (Level 1) - Jetzt verbinden

11.10.2008, aktualisiert 12.10.2008, 9571 Aufrufe, 8 Kommentare

Moin moin,

wie schaffe ich es das er mir aus meiner Listbox (mit Kontrollkästchen) die angehackten "Zeilen" kopiert.
Das kopieren klappt nur leider nur den letzten Eintrag der Listbox

01.
Private Sub cmdRechnungKopieren_Click() 
02.
 
03.
Dim strDirDate As String 
04.
Dim strDirPath As String 
05.
Dim strCopyVon As String 
06.
Dim strSender As String 
07.
Dim pfad As String 
08.
 
09.
nDate = Format(frmTickets.DTPicker3, "yymmdd") 
10.
strDirDate = nDate 
11.
strSender = txtKW 
12.
strCopyVon = Label54 
13.
strDirPath = txtSpeicherPfad 
14.
strCopyVonPath = Left(strCopyVon, InStrRev(strCopyVon, "\") - 1) 
15.
strCopyVonFolder = Mid(strCopyVonPath, InStrRev(strCopyVonPath, "\") + 1) 
16.
 
17.
CreateObject("Scripting.FileSystemObject").CopyFolder strCopyVonPath, strDirPath & "\" & strCopyVonFolder 
18.
 
19.
End Sub
Ist es überhaupt möglich?



Gruß Manuel
Mitglied: bastla
11.10.2008 um 22:39 Uhr
Hallo manuel5!

Wenn Du eine MultiSelect-ListBox verwendest, kannst Du die gewählten Elemente so auslesen bzw gleich für jedes einzelne Element eine Kopierroutine - im Beispiel "Sub KopiereRechnungEinzel(Pfad)" - aufrufen:
01.
For i = 0 To ListBox1.ListCount - 1 
02.
    If ListBox1.Selected(i) = True Then 
03.
        KopiereRechnungEinzel ListBox1.List(i) 
04.
    End If 
05.
Next i
Grüße
bastla
Bitte warten ..
Mitglied: manuel5
12.10.2008 um 10:52 Uhr
Moin bastla,

so in etwa dachte ich es mir. Nur wo soll ich diese Routine eingeben?
Soll ich hierfür nen eigenen Sub anlegen? Hmmm......

Oder cmdRechnungKopieren_Click() ) ich denke hier wäre die Auslese besser aufgehoben oder?

Gruß Manuel
Bitte warten ..
Mitglied: bastla
12.10.2008 um 11:06 Uhr
Hallo manuel5!

An sich gehört diese Routine dort hin, wo Du bisher schon den Eintrag aus der ListBox ausgelesen hast (diesen Code-Teil hast Du hier nicht gepostet) - allerdings müssen jetzt ja gleich alle gewählten Einträge verarbeitet werden, sodass der Zwischenschritt über das Anzeigen im "Label54" eigentlich entfallen kann und für jede gewählte Datei, wie von mir skizziert, ein Sub zur Ausführung des Kopiervorganges aufzurufen, oder das Kopieren gleich in der Schleife selbst abgewickelt werden sollte.

Grüße
bastla
Bitte warten ..
Mitglied: manuel5
12.10.2008 um 11:21 Uhr
Ja, klar -

01.
Private Sub cmdRechnungSuchen_Click() 
02.
Dim sInhalt As String 
03.
Dim strDirDate As String 
04.
Dim strSender As String 
05.
Dim strVerzeichnis As String 
06.
 
07.
 
08.
 
09.
strDirDate = DTPicker3 
10.
strSender = TextBox41 
11.
nDate = Format(DTPicker3, "yymmdd") 
12.
strDirDate = nDate 
13.
sInhalt = txtSuchBox 
14.
Pfad = strVerzeichnis & "\" & strDirDate & "\" & strSender & "\*.*" 
15.
Suchbegriff = txtSuchBox 
16.
ListBox2.Clear 
17.
 
18.
If txtSpeicherPfad = "" Then 
19.
MsgBox "Bitte Ordner anlegen" 
20.
cmdOrdnerAnlegen.SetFocus 
21.
Else 
22.
If txtSuchBox = "" Then 
23.
MsgBox "Bitte erst Suchbegriff eingeben" 
24.
txtSuchBox.SetFocus 
25.
Else 
26.
Set objShell = CreateObject("WScript.Shell") 
27.
 
28.
CommandLine = "%comspec% /c findstr /m /s /i /c:""" & Suchbegriff & """ """ & Pfad & """ " 
29.
 
30.
Set objExecObject = objShell.Exec(CommandLine) 
31.
    If Not objExecObject.StdOut.AtEndOfStream Then 
32.
        Filelist = Split(Trim(objExecObject.StdOut.ReadAll()), vbCrLf) 
33.
        For i = 0 To UBound(Filelist) - 1 
34.
            ListBox2.AddItem Filelist(i) 
35.
             
36.
            Label54 = Filelist(i) 
37.
        Next 
38.
        Else 
39.
        ListBox2.AddItem "Datei nicht gefunden" 
40.
        End If 
41.
    End If 
42.
End If 
43.
 
44.
End Sub
Wenn ich es bei " For i = 0 To UBound(Filelist) - 1" einfüge, dann findet er mir garnichts mehr . Von daher denke ich hab ich irgendwo nen Denkfehler drin.

Also -Schritt 1- Files suchen - Schritt 2 - Gefunden Files in Listbox anzeigen - Dann die ausgwählten Files in Schleife und diese dann kopieren.

So sollte es laufen oder?

Gruß Manuel
Bitte warten ..
Mitglied: bastla
12.10.2008 um 12:11 Uhr
Hallo manuel5!

Die Schritte 1 und 2 hattest Du ja schon, und diese sollen sich auch gar nicht ändern. Das Ergebnis - die "ListBox2" mit allen gefundenen Einträgen - bildet dann die Grundlage für den nächsten Schritt.

Da für den Schritt 3 ja zunächst einmal Voraussetzung ist, dass die gewünschten Dateien ausgewählt wurden (wofür der Benutzerin/dem Benutzer Zeit zu geben ist), muss dieser Schritt (über den Button "cmdRechnungKopieren") getrennt gestartet werden.

Grüße
bastla
Bitte warten ..
Mitglied: manuel5
12.10.2008 um 19:31 Uhr
Servus bastla,

sorry, ich check das ned.

Hab ja meine Suche -->

01.
Private Sub cmdRechnungSuchen_Click() 
02.
Dim sInhalt As String 
03.
Dim strDirDate As String 
04.
Dim strSender As String 
05.
Dim strVerzeichnis As String 
06.
 
07.
 
08.
 
09.
strDirDate = DTPicker3 
10.
strSender = TextBox41 
11.
nDate = Format(DTPicker3, "yymmdd") 
12.
strDirDate = nDate 
13.
sInhalt = txtSuchBox 
14.
Pfad = strVerzeichnis & "\" & strDirDate & "\" & strSender & "\*.*" 
15.
Suchbegriff = txtSuchBox 
16.
ListBox2.Clear 
17.
 
18.
If txtSpeicherPfad = "" Then 
19.
MsgBox "Bitte Ordner anlegen" 
20.
cmdOrdnerAnlegen.SetFocus 
21.
Else 
22.
If txtSuchBox = "" Then 
23.
MsgBox "Bitte erst Suchbegriff eingeben" 
24.
txtSuchBox.SetFocus 
25.
Else 
26.
Set objShell = CreateObject("WScript.Shell") 
27.
 
28.
CommandLine = "%comspec% /c findstr /m /s /i /c:""" & Suchbegriff & """ """ & Pfad & """ " 
29.
 
30.
Set objExecObject = objShell.Exec(CommandLine) 
31.
    If Not objExecObject.StdOut.AtEndOfStream Then 
32.
        Filelist = Split(Trim(objExecObject.StdOut.ReadAll()), vbCrLf) 
33.
        For i = 0 To UBound(Filelist) - 1 
34.
        '    For i = 0 To Ubound(ListBox2.ListCount - 1 
35.
    If ListBox2.Selected(i) = True Then 
36.
        KopiereRechnungEinzel ListBox2.List(i) 
37.
    End If 
38.
Next i 
39.
       ' Next 
40.
        Else 
41.
        ListBox2.AddItem "Datei nicht gefunden" 
42.
        End If 
43.
    End If 
44.
End If 
45.
 
46.
End Sub
Und hier muss ich dann das gefundene in die Schleife packen -->

01.
Sub KopiereRechnungEinzel(Pfad) 
02.
For i = 0 To ListBox2.ListCount - 1 
03.
    If ListBox2.Selected(i) = True Then 
04.
        KopiereRechnungEinzel ListBox2.List(i) 
05.
    End If 
06.
Next i 
07.
End Sub
So - und dann den Schleifeninhalt in mein Ziel-Pfad kopieren -->

01.
Private Sub cmdRechnungKopieren_Click() 
02.
'Dim strDirZiel As String 
03.
Dim strDirDate As String 
04.
Dim strDirPath As String 
05.
Dim strCopyVon As String 
06.
Dim strSender As String 
07.
Dim Pfad As String 
08.
Dim i As Long 
09.
 
10.
 
11.
nDate = Format(frmTickets.DTPicker3, "yymmdd") 
12.
'strDirZiel = "Z:\test\" 
13.
strDirDate = nDate 
14.
strSender = txtKW 
15.
strCopyVon = ListBox2.List(i) 
16.
strDirPath = txtSpeicherPfad 
17.
strCopyVonPath = Left(strCopyVon, InStrRev(strCopyVon, "\") - 1) 
18.
strCopyVonFolder = Mid(strCopyVonPath, InStrRev(strCopyVonPath, "\") + 1) 
19.
 
20.
CreateObject("Scripting.FileSystemObject").CopyFolder strCopyVonPath, strDirPath & "\" & strCopyVonFolder 
21.
 
22.
End Sub
ABER - wo\wie übergebe ich den Inhalt der Schleife?

Kanns drehen und wenden - sorry ich komm ned drauf.

Gruß Manuel
Bitte warten ..
Mitglied: bastla
12.10.2008 um 19:52 Uhr
Hallo manuel5!

Du brauchst eigentlich nur zwei Teile:
01.
Private Sub cmdRechnungSuchen_Click() 
02.
Dim sInhalt As String 
03.
Dim strDirDate As String 
04.
Dim strSender As String 
05.
Dim strVerzeichnis As String 
06.
 
07.
 
08.
 
09.
strDirDate = DTPicker3 
10.
strSender = TextBox41 
11.
nDate = Format(DTPicker3, "yymmdd") 
12.
strDirDate = nDate 
13.
sInhalt = txtSuchBox 
14.
Pfad = strVerzeichnis & "\" & strDirDate & "\" & strSender & "\*.*" 
15.
Suchbegriff = txtSuchBox 
16.
ListBox2.Clear 
17.
 
18.
If txtSpeicherPfad = "" Then 
19.
    MsgBox "Bitte Ordner anlegen" 
20.
    cmdOrdnerAnlegen.SetFocus 
21.
Else 
22.
    If txtSuchBox = "" Then 
23.
        MsgBox "Bitte erst Suchbegriff eingeben" 
24.
        txtSuchBox.SetFocus 
25.
    Else 
26.
        Set objShell = CreateObject("WScript.Shell") 
27.
 
28.
        CommandLine = "%comspec% /c findstr /m /s /i /c:""" & Suchbegriff & """ """ & Pfad & """ " 
29.
 
30.
        Set objExecObject = objShell.Exec(CommandLine) 
31.
        If Not objExecObject.StdOut.AtEndOfStream Then 
32.
            Filelist = Split(Trim(objExecObject.StdOut.ReadAll()), vbCrLf) 
33.
            For i = 0 To UBound(Filelist) - 1 
34.
                ListBox2.AddItem Filelist(i)  
35.
            Next 
36.
        Else 
37.
            ListBox2.AddItem "Datei nicht gefunden" 
38.
        End If 
39.
		 
40.
    End If 
41.
End If 
42.
 
43.
End Sub
Wenn der Button "cmdRechnungSuchen" angeklickt wurde, ist (aufgrund des obigen Sub) das Ergebnis die Liste aller gefundenen Rechnungen (oder eben "Datei nicht gefunden") in "ListBox2".

Sobald nun das Kopieren mit Klick auf "cmdRechnungKopieren" gestartet wird, soll jede gewählte Datei (zu erkennen an der "Selected()"-Eigenschaft des jeweiligen "ListBox2"-Eintrages) kopiert werden. Das Kopieren kann in ein eigenes Sub ausgelagert, oder, wie unten gezeigt, gleich in die Ausleseschleife integriert werden:
01.
Private Sub cmdRechnungKopieren_Click() 
02.
'Dim strDirZiel As String 
03.
Dim strDirDate As String 
04.
Dim strDirPath As String 
05.
Dim strCopyVon As String 
06.
Dim strSender As String 
07.
Dim Pfad As String 
08.
Dim i As Long 
09.
 
10.
 
11.
 
12.
nDate = Format(frmTickets.DTPicker3, "yymmdd") 
13.
'strDirZiel = "Z:\test\" 
14.
strDirDate = nDate 
15.
strSender = txtKW 
16.
strDirPath = txtSpeicherPfad 
17.
 
18.
For i = 0 To ListBox2.ListCount - 1 
19.
    If ListBox2.Selected(i) = True Then 
20.
        strCopyVon = ListBox2.List(i) 
21.
        strCopyVonPath = Left(strCopyVon, InStrRev(strCopyVon, "\") - 1) 
22.
        strCopyVonFolder = Mid(strCopyVonPath, InStrRev(strCopyVonPath, "\") + 1) 
23.
 
24.
        CreateObject("Scripting.FileSystemObject").CopyFolder strCopyVonPath, strDirPath & "\" & strCopyVonFolder 
25.
 
26.
	End If 
27.
Next i 
28.
 
29.
End Sub
Dabei gelten dann für alle Dateien die selben Werte für "strDirDate", "strSender" und "strDirPath".

Grüße
bastla
Bitte warten ..
Mitglied: manuel5
12.10.2008 um 20:13 Uhr
Oh mein Gott - natürlich! Mannmannmann!

Danke dir, abundzu steht ich echt aufn Schlauch

Super danke dir !

Gruß Manuel
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
VB for Applications
gelöst Xml-Datei laden bzw. auf Festplatte kopieren und per VBA in eine Access-Tabelle speichern (22)

Frage von machohunk zum Thema VB for Applications ...

VB for Applications
gelöst VBA: Wert von einer Website (pdf-Dokument) auslesen und in Excel kopieren (16)

Frage von Stern123 zum Thema VB for Applications ...

VB for Applications
gelöst Excel VBA: Listbox per AddItem befüllen (5)

Frage von hesper zum Thema VB for Applications ...

VB for Applications
Excel VBA Sortierung von Daten (5)

Frage von easy4breezy zum Thema VB for Applications ...

Heiß diskutierte Inhalte
Windows Tools
gelöst Aussendienst Datensynchronisierung (12)

Frage von lighningcrow zum Thema Windows Tools ...

Windows Server
Suche passender Treiber (12)

Frage von stolli zum Thema Windows Server ...

Peripheriegeräte
Wlan stört Funkmaus (11)

Frage von Falaffel zum Thema Peripheriegeräte ...

Peripheriegeräte
gelöst USB Festplatte verliert Laufwerksbuchstabe (9)

Frage von cese4321 zum Thema Peripheriegeräte ...