PSD-Tutorials.de
Forum für Design, Fotografie & Bildbearbeitung
Tutkit
Agentur
Hilfe
Kontakt
Start
Forum
Aktuelles
Besonderer Inhalt
Foren durchsuchen
Tutorials
News
Anmelden
Kostenlos registrieren
Aktuelles
Suche
Suche
Nur Titel durchsuchen
Von:
Menü
Anmelden
Kostenlos registrieren
App installieren
Installieren
JavaScript ist deaktiviert. Für eine bessere Darstellung aktiviere bitte JavaScript in deinem Browser, bevor du fortfährst.
Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden.
Du solltest ein Upgrade durchführen oder einen
alternativen Browser
verwenden.
Antworten auf deine Fragen:
Neues Thema erstellen
Start
Forum
Sonstiges
Office, Software, Hardware, Technische Fragen
Microsoft Excel, Google Sheets
VBA und seine Dir() Funktion
Beitrag
<blockquote data-quote="Tonl" data-source="post: 2668608" data-attributes="member: 593309"><p>Hallo liebe Comunity,</p><p>Ich habe mehrere Excel-Tabellen in welchen ich Fotos und Informationen dieser Speichern möchte. </p><p>Dabei hat jede Tabelle mehrere Fotos. Die Infos der Fotos sind im Namen dieser verpackt und werden recht einfach über ein paar String spielereien zerstückelt und eingespeichert. </p><p>Soweit so schön. Jetzt möchte ich aber von einem Externen Dokument alle Excel-Tabellen (.xlsx Dateien) öffnen und diese wiederum sollen sich die Fotos "raussuchen" und deren Informationen Verarbeiten.</p><p>Klingt alles ziemlich komisch, ist aber bestimmt realisierbar. </p><p></p><p>In meinem Externen Excel-Dokument habe ich mit Makros und VBA ein Sub geschrieben mit welchem ich die ExcelTabellen nacheinander öffnen kann. Dafür benutze ich die Dir([pfad][dateityp]) - Funktion in kombination mit einer Do While schleife. Am ende ruf ich Dir() auf um zum nächsten Excel-Dokument weiter zu gehen. Jetzt kommt aber das Problem auf dass ich in dieser Do While Schleife ein weiteren Sub aufrufe, der mir die Fotos und deren Infos in meine aktuell geöffnete (aufgerufen und geöffnet über Dir([pfad][dateityp]) - Funktion) Excel Tabelle importiert. Dabei benutze ich aber auch die Dir([pfad][dateityp]) - Funktion, die alle Bilder durchgeht und die gewünschten einfügt.</p><p>Ist mein Sub fertig, geht es in meiner Do-While-Schleife weiter und zuletzt wird wieder Dir() Befehl aufgerufen um zur nächsten Excel-Datei zu springen. Das passiert aber nicht, da sich die Funktion an die zuletzt geschriebene Dir([pfad][dateityp]) - Funktion anpasst. Und damit ist nicht mehr der Pfad der Excel-Tabellen wichtig, sondern der der Bilder und mein Programm wirft eine Fehlermeldung.</p><p>Wie kann ich nun 2 Dir()-Funktionen verschachteln?</p><p></p><p>Im übrigen, die ExcelDokumente nacheinander aufzurufen Funktioniert und das Makro/Sub für die Foto importierung funktioniert auch, wenn ich es aus einer der ExcelDokumente aus starte.</p><p></p><p>Ich hab den Code mal hier rein gepackt. Grober Aufbau:</p><p></p><p>Sub1</p><p>Dir1() pfad der ExcelDat</p><p>Do-While start</p><p>Sub2 wird aufgerufen</p><p>Dir2() pfad der Fotos</p><p>Do-While start</p><p>Dir2() soll zum nächsten Foto gehen</p><p>Do-While ende</p><p>sub2 ende</p><p>Dir1() soll zum nächsten Exel gehen</p><p>Do-While ende</p><p>Sub1 ende</p><p></p><p></p><p><em>Sub ExcelDatAufrufen()</em></p><p><em>Dim strFile As String</em></p><p><em> strPath = "C:\Users\Toni\Desktop\Bearbeitung\" </em></p><p><em> strExt = "*.xlsx*"</em></p><p><em></em></p><p><em> If strPath = "" Then</em></p><p><em> Exit Sub</em></p><p><em> Else</em></p><p><em> <strong>strFile = Dir(strPath & strExt)</strong></em></p><p><em> Do While Len(strFile) > 0</em></p><p><em> Workbooks.Open Filename:=strPath & strFile</em></p><p><em> '</em></p><p><em> Sheets("Seite1").Select</em></p><p><em> MakroFotosEinfügen</em></p><p><em> ActiveWorkbook.Save</em></p><p><em> </em></p><p><em> Workbooks(strFile).Close False ' Arbeitsmappe wird geschlossen</em></p><p><em> <strong>strFile = Dir() ' nächste Datei wird ermittelt</strong></em></p><p><em> Loop</em></p><p><em> End If</em></p><p><em>End Sub</em></p><p><em></em></p><p><em>Sub MakroFotosEinfügen()</em></p><p><em>'</em></p><p><em>Dim myName As String</em></p><p><em>Dim bez As String</em></p><p><em>Dim nr As String</em></p><p><em></em></p><p><em>myName = ActiveWorkbook.FullName</em></p><p><em>namear = Split(myName, "\")</em></p><p><em>bez = namear(UBound(namear))</em></p><p><em>nrs = Split(bez, "_")</em></p><p><em>nr = nrs(1)</em></p><p><em></em></p><p><em>Sheets("Seite1").Select</em></p><p><em></em></p><p><em>Dim arr</em></p><p><em>srcPath = ActiveWorkbook.Path & "\" '& nr</em></p><p><em>MsgBox (srcPath)</em></p><p><em></em></p><p><em>If srcPath = "" Then</em></p><p><em> Exit Sub</em></p><p><em>Else</em></p><p><em></em></p><p><em> <strong> strBild = Dir(srcPath & "*.JPG")</strong></em></p><p><em> If strBild = "" Then</em></p><p><em> Exit Sub</em></p><p><em> End If</em></p><p><em> </em></p><p><em> Do While Len(strBild) > 0</em></p><p><em> Sheets("Seite1").Select</em></p><p><em></em></p><p><em> strBild = Left(strBild, Len(strBild) - 4)</em></p><p><em></em></p><p><em> If strBild = "" Then</em></p><p><em> MsgBox ("Achtung ERROR")</em></p><p><em> Else</em></p><p><em> arr = Split(strBild, " ")</em></p><p><em> End If</em></p><p><em> strNr = arr(0)</em></p><p><em> strPos = arr(1)</em></p><p><em> strZust = arr(2)</em></p><p><em> strKom = arr(3)</em></p><p><em> If UBound(arr) < 4 Then</em></p><p><em> strOrt = "-:-"</em></p><p><em> Else</em></p><p><em> strOrt = arr(4)</em></p><p><em> End If</em></p><p><em> </em></p><p><em> Dim cell As Range</em></p><p><em> Dim actrow As Integer</em></p><p><em> </em></p><p><em> For Each cell In Range("A15", "A56").Cells</em></p><p><em> </em></p><p><em> </em></p><p><em> strV = cell.Value</em></p><p><em> </em></p><p><em> If StrComp(strV, strPos) = 0 Then</em></p><p><em> actrow = cell.Row</em></p><p><em> cell.Offset(0, 6) = ""</em></p><p><em> </em></p><p><em> If StrComp(strZust, "A") = 0 Then</em></p><p><em> cell.Value = "X"</em></p><p><em> ElseIf StrComp(strZust, "B") = 0 Then</em></p><p><em> cell.Offset(0, 7) = "X"</em></p><p><em> ElseIf StrComp(strZust, "C") = 0 Then</em></p><p><em> cell.Offset(0, 8) = "X"</em></p><p><em> ElseIf StrComp(strZust, "D") = 0 Then</em></p><p><em> cell.Offset(0, 9) = "X"</em></p><p><em> End If</em></p><p><em> cell.Offset(0, 14) = strKom</em></p><p><em> End If</em></p><p><em> Next cell</em></p><p><em> </em></p><p><em> Sheets("Seite2").Select</em></p><p><em> </em></p><p><em> For Each cell In Range("A9", "A14").Cells</em></p><p><em> </em></p><p><em> strV = cell.Value</em></p><p><em> If StrComp(strV, strPos) = 0 Then</em></p><p><em> 'MsgBox ("verschiebung bei " & strV & "," & cell.Row)</em></p><p><em> cell.Offset(0, 1) = strOrt</em></p><p><em> End If</em></p><p><em> Next cell</em></p><p><em> <strong>strBild = Dir()</strong></em></p><p><em> Loop</em></p><p><em> End If</em></p><p><em>End Sub</em></p></blockquote><p></p>
[QUOTE="Tonl, post: 2668608, member: 593309"] Hallo liebe Comunity, Ich habe mehrere Excel-Tabellen in welchen ich Fotos und Informationen dieser Speichern möchte. Dabei hat jede Tabelle mehrere Fotos. Die Infos der Fotos sind im Namen dieser verpackt und werden recht einfach über ein paar String spielereien zerstückelt und eingespeichert. Soweit so schön. Jetzt möchte ich aber von einem Externen Dokument alle Excel-Tabellen (.xlsx Dateien) öffnen und diese wiederum sollen sich die Fotos "raussuchen" und deren Informationen Verarbeiten. Klingt alles ziemlich komisch, ist aber bestimmt realisierbar. In meinem Externen Excel-Dokument habe ich mit Makros und VBA ein Sub geschrieben mit welchem ich die ExcelTabellen nacheinander öffnen kann. Dafür benutze ich die Dir([pfad][dateityp]) - Funktion in kombination mit einer Do While schleife. Am ende ruf ich Dir() auf um zum nächsten Excel-Dokument weiter zu gehen. Jetzt kommt aber das Problem auf dass ich in dieser Do While Schleife ein weiteren Sub aufrufe, der mir die Fotos und deren Infos in meine aktuell geöffnete (aufgerufen und geöffnet über Dir([pfad][dateityp]) - Funktion) Excel Tabelle importiert. Dabei benutze ich aber auch die Dir([pfad][dateityp]) - Funktion, die alle Bilder durchgeht und die gewünschten einfügt. Ist mein Sub fertig, geht es in meiner Do-While-Schleife weiter und zuletzt wird wieder Dir() Befehl aufgerufen um zur nächsten Excel-Datei zu springen. Das passiert aber nicht, da sich die Funktion an die zuletzt geschriebene Dir([pfad][dateityp]) - Funktion anpasst. Und damit ist nicht mehr der Pfad der Excel-Tabellen wichtig, sondern der der Bilder und mein Programm wirft eine Fehlermeldung. Wie kann ich nun 2 Dir()-Funktionen verschachteln? Im übrigen, die ExcelDokumente nacheinander aufzurufen Funktioniert und das Makro/Sub für die Foto importierung funktioniert auch, wenn ich es aus einer der ExcelDokumente aus starte. Ich hab den Code mal hier rein gepackt. Grober Aufbau: Sub1 Dir1() pfad der ExcelDat Do-While start Sub2 wird aufgerufen Dir2() pfad der Fotos Do-While start Dir2() soll zum nächsten Foto gehen Do-While ende sub2 ende Dir1() soll zum nächsten Exel gehen Do-While ende Sub1 ende [I]Sub ExcelDatAufrufen() Dim strFile As String strPath = "C:\Users\Toni\Desktop\Bearbeitung\" strExt = "*.xlsx*" If strPath = "" Then Exit Sub Else [B]strFile = Dir(strPath & strExt)[/B] Do While Len(strFile) > 0 Workbooks.Open Filename:=strPath & strFile ' Sheets("Seite1").Select MakroFotosEinfügen ActiveWorkbook.Save Workbooks(strFile).Close False ' Arbeitsmappe wird geschlossen [B]strFile = Dir() ' nächste Datei wird ermittelt[/B] Loop End If End Sub Sub MakroFotosEinfügen() ' Dim myName As String Dim bez As String Dim nr As String myName = ActiveWorkbook.FullName namear = Split(myName, "\") bez = namear(UBound(namear)) nrs = Split(bez, "_") nr = nrs(1) Sheets("Seite1").Select Dim arr srcPath = ActiveWorkbook.Path & "\" '& nr MsgBox (srcPath) If srcPath = "" Then Exit Sub Else [B] strBild = Dir(srcPath & "*.JPG")[/B] If strBild = "" Then Exit Sub End If Do While Len(strBild) > 0 Sheets("Seite1").Select strBild = Left(strBild, Len(strBild) - 4) If strBild = "" Then MsgBox ("Achtung ERROR") Else arr = Split(strBild, " ") End If strNr = arr(0) strPos = arr(1) strZust = arr(2) strKom = arr(3) If UBound(arr) < 4 Then strOrt = "-:-" Else strOrt = arr(4) End If Dim cell As Range Dim actrow As Integer For Each cell In Range("A15", "A56").Cells strV = cell.Value If StrComp(strV, strPos) = 0 Then actrow = cell.Row cell.Offset(0, 6) = "" If StrComp(strZust, "A") = 0 Then cell.Value = "X" ElseIf StrComp(strZust, "B") = 0 Then cell.Offset(0, 7) = "X" ElseIf StrComp(strZust, "C") = 0 Then cell.Offset(0, 8) = "X" ElseIf StrComp(strZust, "D") = 0 Then cell.Offset(0, 9) = "X" End If cell.Offset(0, 14) = strKom End If Next cell Sheets("Seite2").Select For Each cell In Range("A9", "A14").Cells strV = cell.Value If StrComp(strV, strPos) = 0 Then 'MsgBox ("verschiebung bei " & strV & "," & cell.Row) cell.Offset(0, 1) = strOrt End If Next cell [B]strBild = Dir()[/B] Loop End If End Sub[/I] [/QUOTE]
Bilder bitte
hier hochladen
und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Zitate einfügen…
Authentifizierung
Wenn ▲ = 5, ▼ = 2 und ■ = 7, was ist ▲ × ▼ + ■?
Antworten
Start
Forum
Sonstiges
Office, Software, Hardware, Technische Fragen
Microsoft Excel, Google Sheets
VBA und seine Dir() Funktion
Oben