Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Gentlefolks

Ich habe da ne kleine Sorge.

Vom Chef habe ich die Aufgabe bekommen, ein Excelformular zu erstellen welches automatisch aktualisiert wird.

Nun, habe ich eine Tabelle in einer Arbeitsmappe. (Die Tabelle heisst „Softwareupdate“)

Des weiteren habe ich einen Windowsordner mit weiteren Excel Dateien drin.

Ich soll nun eine kleine VB Applikation schreiben, welche das automatisiert.

Wenn ich die Tabelle Softwareupdate öffne, sollen mir sämtliche Dateinamen der Dateien in dem Ordner in die Tabelle Softwareupdate eingetragen werden.

Wenn ich eine neue Excel Datei in diesen Windowsordner hinzufüge, soll diese auch in der Tabelle Softwareupdates erscheinen.

Konkret. Wie „scane“ ich Windwosordner nach Dateien ab, und lasse mir die vorhandenen Dateinamen dieses Ordners in eine Excel –Tabelle schreiben?

Des weitern sollen mir die in dem Ordner enthaltenen Excelfiles vom Inhalt her gecheckt werden.

Wenn dort bestimmte Zelleneinträge vorhanden sind, sollen mir diese in der Tabellesoftwareupdate auch erscheinen.

Jedes mal wenn die Tabelle Softwareupdates geöffnet wird, soll sie automatisch aktualisiert werden. (Oder ein aktualisierenbutton würd’s auch tun.)

Wäre echt froh, wenn mir jemand einen geistreichen Tip geben könnte.

Danke

Grüsse

rindi

Geschrieben

Hallo rindi,

Original geschrieben von rindi

Konkret. Wie „scane“ ich Windwosordner nach Dateien ab, und lasse mir die vorhandenen Dateinamen dieses Ordners in eine Excel –Tabelle schreiben?

Des weitern sollen mir die in dem Ordner enthaltenen Excelfiles vom Inhalt her gecheckt werden.

Hab Dir mal was zusammengestrickt, vielleicht hilfts ja:


Sub xxtestx()

Dim namen As String

Dim reihe As Long

Dim aktwbk As Workbook

Dim pfad As String

Dim aktsht  As Worksheet

Dim zelle As Range


'Hier den Pfad eintragen

pfad = "C:\"

'aktuelle Reihe zum schreiben

reihe = 1

'Durchsuche das Verzeichnis nach *.xls dateien

namen = dir(pfad & "*.xls")

Do While namen <> ""

    'Name in die Zelle schreiben

    Cells(reihe, 1).Value = namen

    'Als Workbook öffnen

    Set aktwbk = Workbooks.Open(pfad & namen)

    With aktwbk

        'Jedes Tabellenblatt einzeln öffnen

        For Each aktsht In .Sheets

            'Für jede Zelle in jedem Tabellenblatt prüfe auf "Suchbegriff"

            For Each zelle In aktsht.UsedRange

                If zelle.Value = "Suchbegriff" Then

                    'Wenn Suchbegriff gefunden dann schreibe

                    'in die Tabelle hinter den Dateinamen, dass er

                    'gefunden wurde

                    Cells(reihe, 2).Value = "Suchbegriff gefunden!"

                End If

            Next

        Next

        'Schliesse die Tabelle ohne zu speichern

        .Close xlDoNotSaveChanges

    End With

    'zähle die Reihe eins hoch

    reihe = reihe + 1

    'lese weiter im Verzeichnis

    namen = dir

Loop


End Sub

Kannst ja mal Bescheid sagen, ob es das war, was Du brauchtest! :D

CU,

Red Bull

Geschrieben

Sali Red Bull

Besten Dank für Deinen konstruktiven Beitrag. :-)

Genau das habe ich gemeint! Nun liegt es in der Natur der Dinge, dass ich - wie bereits erwähnt - nicht der VB-Gott bin.

Ich habe nun diesen von Dir "geposteten" Code direkt in's VB übernommen. Für mich verständlicherweise habe ich eine Schaltfläche, sprich button (btn_ausführen) kreirt; den Deinen Code dort eingefügt, und die entsprechenden Anpassungen daran vorgenommen.

Als ich nun dass ganze starten/kompilieren wollte, kam mir die Meldung "expected End Sub".

Komischerweise scheint diese Meldung in diesem Fall von unnatürlicher Natur zu sein.

Das Endsub fehlt nirgens.

Aber freilich, der Beruf des Informatikers scheint nicht zuletzt deswegen etwas herausforderndes zu sein.

Selbstverständlich nochmals ein grosses Dankeschön für den Deinen Beitrag.

Mit freundlichen Grüsse

Rolf Rinderknecht

Geschrieben

So will ich den Code kompilieren.




Sub Main()


Private Sub btn_ausführen_Click()

Sub xxtestx()

Dim msexcel As Object

Dim namen As String

Dim reihe As Long

Dim aktwbk As Workbook

Dim pfad As String

Dim aktsht  As Worksheet

Dim zelle As Range


'startet Excel

Set msexcel = CreateObject("excel.application")

'Macht Excelfenster sichtbar

msexcel.Visible = True

'Aktiviert Excelfenster

msexcel.Documents.Add

msexcel.Application.Activate


'Pfad zu den Exceldateien

pfad = "C:\Dokumente und Einstellungen\rrinderknecht\Eigene Dateien\Softwareupdates\Software"

'aktuelle Reihe zum schreiben

reihe = 1

'Durchsuche das Verzeichnis nach *.xls dateien

namen = Dir(pfad & "*.xls")

Do While namen <> ""

'Name in die Zelle schreiben

    Cells(reihe, 1).Value = namen

'Als Workbook öffnen

    Set aktwbk = Workbooks.Open(pfad & namen)

    With aktwbk

'Jedes Tabellenblatt einzeln öffnen

        For Each aktsht In .Sheets

'Für jede Zelle in jedem Tabellenblatt prüfe auf "Suchbegriff"


            For Each zelle In aktsht.UsedRange

                If zelle.Value = "Suchbegriff" Then

'Wenn Suchbegriff gefunden dann schreibe

'in die Tabelle hinter den Dateinamen, dass er

'gefunden wurde

                    Cells(reihe, 2).Value = "Suchbegriff gefunden!"

                End If

            Next

        Next

'Schliesse die Tabelle ohne zu speichern

        .Close xlDoNotSaveChanges

    End With

'zähle die Reihe eins hoch

    reihe = reihe + 1

'lese weiter im Verzeichnis

    namen = Dir

Loop


End Sub

End Sub

End Sub


Geschrieben

Hi!

Du kannst keine Prozeduren ineinander verschachteln, so wie Du es gemacht hast.

---------------------------------------------

Sub Main()

Private Sub btn_ausführen_Click()

Sub xxtestx()

........

.........

End Sub

End Sub

End Sub

---------------------------------------------

Du musst jeden Prozedur einzelnd beenden. zB:

Sub Main()

End Sub

----------------

Private Sub btn_ausführen_Click()

End Sub

----------------

Sub xxtestx()

........

.........

End Sub

Gruss

Geschrieben

Alles klar, jetzt hab ich's soweit verstanden.

Ich mag wohl tod nervig sein, trotzdem trübt es mich nicht weiter zu fragen.

Wenn ich das nun soweit zusammen habe, meldet der Kompiler,

sich mit einem Fehler. "USER-DEFINED TYPE NOT DEFINED".

Ich habe versucht, mich diesbezüglich etwas schlau zu machen, und kam zum Ergebnis, dass ich noch irgendwelche (eine Art) Libarys einbinden muss; des weitern seien noch weitere Code Zeilen hinzuzufügen. Die Objekte "Woksheet" und "Workbook" müssen noch defniert werden.

das ganze sieht nun wie folgt aus, wobei die Änderungen in den obersten Zeilen vorgenommen werden müssen.

Sorry, für die Fragerei, bin aber eine totale VB-Null.

Grüsse

rindi



Private Sub btn_generieren_Click()


Dim objExcel As Object

Set objExcel = CreateObject("Excel.Application")

objExcel.Workbook.Add

objExcel.Worksheet.Add


Dim namen As String

Dim reihe As Long

Dim pfad As String

Dim aktsht  As Worksheet

Dim aktwbk As Workbook

Dim zelle As Range



'Pfad

pfad = "C:\Dokumente und Einstellungen\rrinderknecht\Desktop\sw projekt\Software"

'aktuelle Reihe zum schreiben

reihe = 1

'Durchsuche das Verzeichnis nach *.xls dateien

namen = Dir(pfad & "*.xls")

Do While namen <> ""

    'Name in die Zelle schreiben

    cells(reihe, 1).Value = namen

    'Als Workbook öffnen

    Set aktwbk = Workbooks.Open(pfad & namen)

    With aktwbk

        'Jedes Tabellenblatt einzeln öffnen

        For Each aktsht In .Sheets

            'Für jede Zelle in jedem Tabellenblatt prüfe auf "Suchbegriff"

            For Each zelle In aktsht.UsedRange

                If zelle.Value = "Suchbegriff" Then

                    'Wenn Suchbegriff gefunden dann schreibe

                    'in die Tabelle hinter den Dateinamen, dass er

                    'gefunden wurde

                    cells(reihe, 2).Value = "Suchbegriff gefunden!"

                End If

            Next

        Next

        'Schliesse die Tabelle ohne zu speichern

        .Close xlDoNotSaveChanges

    End With

    'zähle die Reihe eins hoch

    reihe = reihe + 1

    'lese weiter im Verzeichnis

    namen = Dir

Loop


End Sub


Geschrieben

Patsch *mitderHandvordenKopfschlag*! :D

Ja, wenn ich genauer lesen würde, wäre ich schon eher drauf gekommen!

Du versuchst ja, das ganze in einen reinen VB-Code zu packen.

Das, was ich Dir da geschrieben habe, hab ich mit VBA unter Excel geschrieben.

Das heisst jetzt für Dich, dass Du die Typen "Workbook", "Worksheet", usw. neu kreieren muss.

Alternativ dazu, und vielleicht sogar noch besser, wäre es, die Excel-Library in dein Projekt einzubinden!

Aber mal 'ne andere Frage:

Warum willst Du das ganze unter VB machen.

Mach Dir doch unter Excel ein Add-In, mit dem Du dann den Code ausführst.

Informationen zum "Add-In"-Schreiben findest Du hier und in der Excel-Hilfe! :D

CU,

Red Bull

Geschrieben

Och nöd, jetzt beginnst auch noch mit der Strinpatscherei.

Entschuldige Red Bull, ich geb ja zu in dieser Hinsicht etwas Begriffsstutzig zu sein.

Okay, habe das jetzt in ein VBA Projekt eingefügt.

Dumm nur, dass sich da überhaupt nichts regt, wenn ich die Schaltfläche zum ausführen dieses Codes betätige.

Ich bin schlimm... :-(

Anyway, mir ist wohl nicht mehr zu helfen.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...