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

Forumthread: application.run

application.run
15.10.2003 12:52:53
Silvia
Hi Leute,
kann mir vielleicht jemand von euch erklären, warum im u.a. Code das erste Application.run einwandfrei funktioniert und das zweite wird rot geschrieben.
Das Ziel-Makro fängt so an: Public Sub AI(tabzahl, AnzahlNC, AnzahlNNC)
Danke, Silvia


Private Sub UF2_berechnen_Click()
Dim cb As Object
Dim tabzahl As Integer
tabzahl = Worksheets.Count
Dim AnzahlNC As Integer
Dim AnzahlNNC As Integer
AnzahlNC = Worksheets(tabzahl).Cells(1, 2).Value
AnzahlNNC = Worksheets(tabzahl).Cells(2, 2).Value
For Each cb In Me.Controls
If TypeName(cb) = "CheckBox" Then
If cb.Value = True Then
Application.Run (Right(cb.name, Len(cb.name) - 2)) 'im Modul 2
Application.Run (Right(cb.name, Len(cb.name) - 2), tabzahl, AnzahlNC, AnzahlNNC)
End If
End If
Next cb
Unload Me
End Sub

Anzeige

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: application.run
15.10.2003 13:01:48
ChrisL
Hi Silvia

Weil es ein String brauch und weil die Klammer nicht stimmt...

aus Zeile 1 wird folgendes...
Application.Run "Makroname"

aus 2
Application.Run "Makroname", "tabzahl", "AnzahlNC", "AnzahlNNC")

statt
Application.Run "Makroname(tabzahl, AnzahlNC, AnzahlNNC)"

Versuch mal so...
Application.Run (Right(cb.name, Len(cb.name) - 2) & "(" & tabzahl & "," & AnzahlNC & "," & AnzahlNNC & ")"

Gruss
Chris
Anzeige
AW: application.run
15.10.2003 13:23:24
Silvia
Hi Chris,
is ja recht kompliziert mit diesen ganzen "" und (), aber schlussendlich hab ichs jetzt doch kapiert was die von dir vorgeschlagene zeile bedeutet.
(Ich denke aber, die Klammer vor Right sollte man weglassen.)

Dennoch mache ich irgendetwas falsch, denn:
mit folgendem Code bekomme ich die Fehlermeldung: Laufzeitfehler 1004, kann das Makro 'AI(2,2,3)' nicht finden.

Private Sub UF2_berechnen_Click()
Dim cb As Object
Dim tabzahl As Integer
tabzahl = Worksheets.Count
Dim AnzahlNC As Integer
Dim AnzahlNNC As Integer
AnzahlNC = Worksheets(tabzahl).Cells(1, 2).Value
AnzahlNNC = Worksheets(tabzahl).Cells(2, 2).Value
For Each cb In Me.Controls
If TypeName(cb) = "CheckBox" Then
If cb.Value = True Then
'Application.Run Right(cb.name, Len(cb.name) - 2) & "(" & tabzahl & "," & AnzahlNC & "," & AnzahlNNC & ")"
'Application.Run Right(cb.name, Len(cb.name) - 2) & "(tabzahl, AnzahlNC, AnzahlNNC)"
Application.Run Right(cb.name, Len(cb.name) - 2) & "(2, 3, 3)"
End If
End If
Next cb
Unload Me
End Sub
Sub AI(tabzahl, AnzahlNC, AnzahlNNC)
MsgBox (tabzahl & AnzahlNC & AnzahlNNC)
End Sub

Anzeige
AW: application.run
15.10.2003 13:42:42
ChrisL
Hi Silvia

Überprüfe mal ob insbesondere der Makroname richtig ist...

MsgBox Right(cb.name, Len(cb.name) - 2) & "(2, 3, 3)"

Theoretisch sollte es gehen... siehe nachstehender Code:

Option Explicit


Sub test()
Dim Makroname As String
Dim Anz1 As Byte, Anz2 As Byte, Anz3 As Byte
Anz1 = 1
Anz2 = 2
Anz3 = 3
Makroname = "AI"
Application.Run Makroname & "(" & Anz1 & "," & Anz2 & "," & Anz3 & ")"
End Sub



Sub AI(tabzahl As Byte, AnzahlNC As Byte, AnzahlNNC As Byte)
MsgBox (tabzahl & AnzahlNC & AnzahlNNC)
End Sub


Gruss
Chris
Anzeige
AW: application.run ???????
15.10.2003 13:54:37
Silvia
Vielen herzlichen Dank für deine Bemühungen,

aber bei mir funkts einfach nicht.
(wenn ich deinen Code einfüge, und die test()-Sub starte, findet er die AI(1,2,3) wieder nicht !!!)

funktioniert dein Code bei dir?
AW: application.run ???????
15.10.2003 14:12:11
ChrisL
Hi Silvia

Klar funktioniert der Code bei mir :-)

Habe mal eine Datei angehängt...
https://www.herber.de/bbs/user/1430.xls

Benutze allerdings Excel 97. Wenn bei dir eine Fehlermeldung kommt, sobald du auf den Knopf drückst, dann muss es fast an der Version liegen.

Gruss
Chris
Anzeige
Versions-Problem ???
15.10.2003 14:24:07
Silvia
Hallo Chris,

es tut mir furchtbar leid, dass du dir wg meinem Problem soviel Mühe gibst und trotzdem funzts nicht bei mir.

Excel XP schreibt:
Microsoft Excel kann das Makro 'AI(1,2,3)' nicht finden

Hat vielleicht sonst jemand, der XP benutzt, einen Lösungsvorschlag für mich?

lg und nochmals Danke an Chris,
Silvia
Anzeige
OFFEN
15.10.2003 14:28:51
ChrisL
Hi Silvia

Vielleicht lässt sich die Katze auch am Schwanz packen. Wie sieht denn der Code, welcher im Sub AI steht eigentlich aus. Vielleicht gibt es ja auch bessere Alternativen.

Gruss
Chris
AW: OFFEN
15.10.2003 14:57:15
Silvia
Hi Leute, Hi Chris,
ich hab mich jetzt einmal ganz genau an die VBA-Hilfe gehalten und hab statt einer aufzurufenden Sub jetzt eine Function genommen,
und siehe da, das funktioniert.
Anscheinend funkt die Application.Run nicht mit Subs.
Kann mir vielleicht jemand eine Alternative zu Application.Run vorschlagen, die für Subs geeignet ist?

BITTE, BITTE
Silvia
Anzeige
AW: OFFEN
15.10.2003 15:21:05
ChrisL
Hi Silvia

Subs geht nur mit Call oder Application.Run. Wobei du für Call keine Variablen verwenden kannst.

Wieso benutzt du jetzt nicht einfach die Funktion. Oder ist eine Funktion für das Problem nicht geeignet.

Wie gesagt müsste man mal wissen, was im Sub überhaupt steht.

Gruss
Chris
Anzeige
AW: OFFEN
15.10.2003 23:06:36
Martin
Hallo Silvia und Chris

ich habe das Makro von Chris bei mir unter XP getestet, und es funktioniert so tatsächlich nicht. Es brauchte aber nur eine kleine Aenderung, dann funktioniert es:


Sub test()
Dim Makroname As String
Dim Anz1 As Byte, Anz2 As Byte, Anz3 As Byte
Anz1 = 1
Anz2 = 2
Anz3 = 3
Makroname = "AI"
Application.Run Makroname, Anz1, Anz2, Anz3
End Sub



Sub AI(tabzahl As Byte, AnzahlNC As Byte, AnzahlNNC As Byte)
MsgBox (tabzahl & AnzahlNC & AnzahlNNC)
End Sub


Gruss
Martin
Anzeige
danke
16.10.2003 11:02:55
Silvia
Herzlichen Dank an Chris und Martin.

Ich habs mittlerweile mit einer Funktion (nicht mit Sub) gelöst. War für meine Problemstellung das Beste:


Private Sub UF2_berechnen_Click()
Dim cb As Object
Dim tabzahl As Integer
tabzahl = Worksheets.Count
Dim AnzahlNC As Integer
Dim AnzahlNNC As Integer
AnzahlNC = Worksheets(tabzahl).Cells(1, 2).Value
AnzahlNNC = Worksheets(tabzahl).Cells(2, 2).Value
Dim zaehler As Integer
zaehler = 2
For Each cb In Me.Controls
If TypeName(cb) = "CheckBox" Then
If cb.Value = True Then
zaehler = Application.Run(Right(cb.name, Len(cb.name) - 2), tabzahl, AnzahlNC, AnzahlNNC, zaehler) + zaehler
End If
End If
Next cb
Unload Me
End Sub
Function AI(tabzahl, AnzahlNC, AnzahlNNC, zaehler)
AI = 1
End Function

lg, Silvia
Anzeige
;
Anzeige

Infobox / Tutorial

Anwendung von Application.Run in Excel VBA


Schritt-für-Schritt-Anleitung

  1. Makro erstellen: Zuerst benötigst du ein Makro, das du mit Application.Run aufrufen möchtest. Dies könnte so aussehen:

    Public Sub AI(tabzahl As Integer, AnzahlNC As Integer, AnzahlNNC As Integer)
       MsgBox (tabzahl & " " & AnzahlNC & " " & AnzahlNNC)
    End Sub
  2. Application.Run verwenden: Um das Makro aus einem anderen Sub aufzurufen, kannst du Application.Run verwenden. Achte darauf, dass du den richtigen Namen und die Parameter übergibst:

    Application.Run "AI", tabzahl, AnzahlNC, AnzahlNNC
  3. Fehlerbehandlung: Stelle sicher, dass der Name des Makros korrekt ist. Bei Fehlern, wie dem Laufzeitfehler 1004, überprüfe die Schreibweise und die Anzahl der Parameter.


Häufige Fehler und Lösungen

  • Laufzeitfehler 1004: Dieser Fehler tritt auf, wenn das angegebene Makro nicht gefunden wird. Überprüfe, ob der Makroname korrekt ist und ob er in dem Modul verfügbar ist, von dem du ihn aufrufst.

  • Falsche Argumente: Wenn du Application.Run verwendest, stelle sicher, dass die Argumente die richtigen Datentypen haben. Wenn dein Makro AI Integer-Parameter erwartet, übergib auch Integer-Werte.

  • Syntaxfehler: Achte darauf, dass du die Klammern und Anführungszeichen korrekt verwendest. Der richtige Aufruf sieht so aus:

    Application.Run "Makroname", arg1, arg2, arg3

Alternative Methoden

Wenn du Application.Run nicht verwenden möchtest, kannst du auch die Call-Anweisung verwenden. Beachte jedoch, dass dies keine Parameterübergabe erlaubt:

Call AI(tabzahl, AnzahlNC, AnzahlNNC)

Eine andere Möglichkeit ist die Verwendung von Public Function anstelle von Sub, da dies in vielen Fällen flexibler ist:

Function AI(tabzahl As Integer, AnzahlNC As Integer, AnzahlNNC As Integer) As Integer
    AI = tabzahl + AnzahlNC + AnzahlNNC
End Function

Praktische Beispiele

Hier ist ein Beispiel, das zeigt, wie du Application.Run in einem Button-Klick-Ereignis verwenden kannst:

Private Sub UF2_berechnen_Click()
    Dim tabzahl As Integer
    tabzahl = Worksheets.Count
    Dim AnzahlNC As Integer
    Dim AnzahlNNC As Integer
    AnzahlNC = Worksheets(tabzahl).Cells(1, 2).Value
    AnzahlNNC = Worksheets(tabzahl).Cells(2, 2).Value
    Application.Run "AI", tabzahl, AnzahlNC, AnzahlNNC
End Sub

In diesem Beispiel wird die Funktion AI mit den Werten der Arbeitsblätter aufgerufen. Achte darauf, dass AI korrekt definiert ist, damit die Anwendung funktioniert.


Tipps für Profis

  • Debugging: Verwende MsgBox oder Debug.Print, um die Werte der Variablen vor dem Aufruf von Application.Run zu überprüfen. So kannst du sicherstellen, dass die richtigen Werte übergeben werden.

  • Modularer Code: Halte deinen Code modular und strukturiert, indem du häufig verwendete Funktionen in separaten Modulen speicherst. Dies erleichtert das Testen und die Wartung.

  • Versionskompatibilität: Achte darauf, dass dein Code mit verschiedenen Excel-Versionen kompatibel ist, da einige Funktionen in älteren Versionen nicht unterstützt werden.


FAQ: Häufige Fragen

1. Warum funktioniert Application.Run nicht mit Subs?
Application.Run funktioniert nur mit Funktionen, da es die Rückgabewerte erwartet. Verwende Call, um Subs aufzurufen.

2. Was ist der Unterschied zwischen Application.Run und Call?
Application.Run kann Strings und Variablen übergeben, während Call nur ohne Parameter funktioniert.

3. Wie kann ich sicherstellen, dass mein Makro gefunden wird?
Überprüfe, ob das Makro im richtigen Modul definiert ist und dass der Name exakt übereinstimmt, einschließlich der Groß- und Kleinschreibung.

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