Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Sub oder Function nicht definiert?

Sub oder Function nicht definiert?
11.06.2024 13:18:26
Christian
Hallo,

Ich bitte um eure Hilfe.

Ich habe 4 Makros, mit dem Namen Makro1, Makro2, Makro3 und Makro4.

Die wollte ich alle nacheinander ausführen und habe gegooglet wie ich das machen könnte...

und hab dann ein Makro gemacht

Sub Download()


Call Makro1
Call Makro2
Call Makro3
Call Makro4

End Sub


aber da meint Excel jetzt Sub oder Function nicht definiert. Was mache ich da falsch?

Danke
Christian
Anzeige

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Sub oder Function nicht definiert?
11.06.2024 13:23:37
Onur
Wo sind denn Makro1, Makro2, Makro3 und Makro4. genau?
AW: Sub oder Function nicht definiert?
11.06.2024 13:24:44
daniel
Hi
wie sehenden deine Makros aus (Kopf- und Endzeile reicht)?
in welchem Modul stehen die Makros?
arbeitest du mit Option Explicit?
AW: Sub oder Function nicht definiert?
11.06.2024 13:28:08
Christian
Hallo ihr beiden,

so sehen die Makros aus: Sie unterscheiden sich nur durch Namen und Tabellenblatt (Tabelle 1-4).
Die Makros liegen in den entsprechenden Blättern, das Makro Download in einem Modul.

Public Sub Makro1()

Dim objIE As Object
Dim objLinks As Object
Dim objLink As Object
Dim lngCount As Long

Dim lloRow As Long, lshTab2 As Worksheet

Set lshTab2 = Sheets("Tabelle1")

For lloRow = 1 To lshTab2.Cells(lshTab2.Rows.Count, 1).End(xlUp).Row
Set objIE = CreateObject("InternetExplorer.Application")
With objIE
.navigate lshTab2.Range("A" & lloRow).Text
Do While .busy
Do While .busy
DoEvents
Loop
Loop
.Visible = False
Set objLinks = .Document.Links
For Each objLink In objLinks
lngCount = lngCount + 1
lshTab2.Cells(lngCount, 2) = objLink.href
lshTab2.Cells(lngCount, 3) = "'" & objLink.outertext
Next
.Quit
End With

Application.Wait (Now + TimeValue("0:00:10"))

Next

Set objIE = Nothing
Set lshTab2 = Nothing

End Sub

Anzeige
AW: Sub oder Function nicht definiert?
11.06.2024 13:36:29
Onur
Dass sie Public deklariert sind, bedutet NICHT zwingend, dass sie ohne weiteres in der ganzen Datei verfügbar sind, dafür müssten sie auch noch in einem all. Modul stehen.
Ausserdem brauchst du, wenn sie sich nur durch den Blattnamen unterscheiden, keine 4 Makros, ein Makro genügt. Du musst halt den Blattnamen mit angeben:
Public Sub Makro1(sh as string)

Dim objIE As Object
Dim objLinks As Object
Dim objLink As Object
Dim lngCount As Long
Dim lloRow As Long, lshTab2 As Worksheet
Set lshTab2 = Sheets(sh)
For lloRow = 1 To lshTab2.Cells(lshTab2.Rows.Count, 1).End(xlUp).Row
Set objIE = CreateObject("InternetExplorer.Application")
With objIE
.navigate lshTab2.Range("A" & lloRow).Text
Do While .busy
Do While .busy
DoEvents
Loop
Loop
.Visible = False
Set objLinks = .Document.Links
For Each objLink In objLinks
lngCount = lngCount + 1
lshTab2.Cells(lngCount, 2) = objLink.href
lshTab2.Cells(lngCount, 3) = "'" & objLink.outertext
Next
.Quit
End With
Application.Wait (Now + TimeValue("0:00:10"))
Next
Set objIE = Nothing
Set lshTab2 = Nothing
End Sub

Dann kannst du sie so aufrufen:
Call Makro1 ("Tabelle1")

Call Makro1 ("Tabelle2")
Call Makro1 ("Tabelle3")
Call Makro1 ("Tabelle4")
Anzeige
AW: Sub oder Function nicht definiert?
11.06.2024 14:06:57
daniel
Hi
wenn man Makros aufrufen will, die in Tabellenblattmodulen liegen, dann muss man beim Aufruf den jeweiligen Modulnamen voranstellen, also: Call Tabelle1.Makro1
Das liegt daran, dass der Name eines Makros in einem Tabellenblattmodul nicht im ganzen Projekt eindeutig sein muss, sondern der selbe Name in einen anderen Tabellenblattmodul wiederverwendet werden darf.
das muss so sein, weil sonst das Konzept mit den Eventmakros, die ja in jedem Tabellenblattmodul den gleichen Namen haben, nicht funktionieren würde.
über die Sinnhaftigkeit deines Vorgehens bist du ja mit Onur im Austausch.
Gruß Daniel
Anzeige
AW: Sub oder Function nicht definiert?
11.06.2024 15:00:09
Christian
danke für die ausführliche Erklärung, wieder etwas gelernt.
AW: Sub oder Function nicht definiert?
11.06.2024 13:43:34
Christian
Hallo Onur,

ich hoffe ich habe verstanden, wie das jetzt funktionieren soll. Im Call steht der String der dann an die Variable sh übergeben wird. Und diese ändert sich dann mit jedem Aufruf?

Ich gehe mal davon aus, dass ich das Makro dann in ein zusätzliches allgemeines Modul packe, nicht mehr wie vorher in ein Tabellenblatt... oder?

Danke
Christian
Anzeige
AW: Sub oder Function nicht definiert?
11.06.2024 13:47:32
Onur
"Und diese ändert sich dann mit jedem Aufruf? " -Natürlich nur, wenn du bei jedem Aufruf einen anderen Blattnamen mit angibst.
Genau für sowas gibt es ja Variablenübergabe an Subs oder Makros - damit man NICHT vier Makros braucht.
Du hast doch schon ein allg. Modul, da brauchst du kein zweites. Einfach da rein packen.
Anzeige
AW: Sub oder Function nicht definiert?
11.06.2024 13:50:33
Christian
Wieder etwas gelernt, danke für die Erklärung.

Habs grad getestet, beim 1. Blatt hat es funktioniert, bis das zweite drankommt, dauert es jetzt erstmal ein paar Stunden, es werden jetzt erstmal alleine 2500 mal 10 Sekunden Pause gemacht.
Aber ich gehe jetzt einfach mal davon aus, dass es auch mit den anderen Blättern gehen wird.

Wünsche euch noch einen schönen Tag und danke für die Mühe
Christian
Anzeige
Gerne !
11.06.2024 13:51:40
Onur
Anmerkung
11.06.2024 21:43:41
Christian
Inzwischen hat das Makro mit dem 2. Blatt weitergemacht, also auch der Wechsel scheint zu klappen
AW: Sub oder Function nicht definiert?
11.06.2024 14:06:20
Zwenn
Warum baust Du denn eine 10 Sekunden Pause ein? Du wartest 7h für nix, nix und wieder nix. Der IE sollte eigentlich soweiso nicht mehr verwendet werden, weil er veraltet ist. Aber für Dein Anliegen scheint er ja noch zu funktionieren. Du brauchst den aber nicht nach jedem Seitenaufruf zu beenden und dann neu zu instanziieren.

Es reicht aus, wenn Du nur jedesmal .navigate lshTab2.Range("A" & lloRow).Text neu aufrufst. Danach nur warten, bis die neue Seite geladen wurde. Je nach Seite funktioniert das wieder mit Do While .busy : DoEvents : Loop (das restliche Schleifengerümpel an dieser Stelle kannst Du löschen) oder man überwacht ein HTML Element auf sein auftauchen.

Sind Deine 2.500 Links pro Tabelle alles Unterseiten einer Domain oder sind das alles ganz verschiedene Domains?
Anzeige
AW: Sub oder Function nicht definiert?
11.06.2024 14:59:28
Christian
Hallo Zwenn,

erstmal danke für deine Antwort.
eins nach dem anderen.

Die Daten um die es hier geht, sind mir zu privat. Daher möchte ich auf ein an diese Daten und diese URL angepasstes Makro verzichten.

Wenn es trotzdem eine Alternative gibt, die mit jeder URL und ohne den IE funktioniert, bin ich natürlich daran interessiert.

Zu den anderen Anmerkungen:
Also die 10 Sekunden Pause habe ich eingebaut, weil ansonsten, warum auch immer die Inhalte vereinzelter Seiten fehlen.
Zum zweiten, in diesem Umfang ist es eine einmalige Sache, wenn ich es überhaupt nochmal wiederhole, dann mit maximal 50 Links, statt wie jetzt 8300, da spielen dann die 10 Sekunden kaum noch eine Rolle.
Zu dem neu instanzieren, da muss ich zugeben, ich habe das Makro in einer ähnlichen Form im Internet gefunden, nicht selber geschrieben. Ich war froh dass es funktioniert und habe mir darum keine Gedanken gemacht.
Und ja, es ist alles dieselbe Domain.


Gruß
Christian
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige