application.run

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
CheckBox MsgBox
Bild

Betrifft: application.run
von: Silvia
Geschrieben am: 15.10.2003 12:52:53

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

Bild


Betrifft: AW: application.run
von: ChrisL
Geschrieben am: 15.10.2003 13:01:48

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


Bild


Betrifft: AW: application.run
von: Silvia
Geschrieben am: 15.10.2003 13:23:24

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



Bild


Betrifft: AW: application.run
von: ChrisL
Geschrieben am: 15.10.2003 13:42:42

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


Bild


Betrifft: AW: application.run ???????
von: Silvia
Geschrieben am: 15.10.2003 13:54:37

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?


Bild


Betrifft: AW: application.run ???????
von: ChrisL
Geschrieben am: 15.10.2003 14:12:11

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


Bild


Betrifft: Versions-Problem ???
von: Silvia
Geschrieben am: 15.10.2003 14:24:07

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


Bild


Betrifft: OFFEN
von: ChrisL
Geschrieben am: 15.10.2003 14:28:51

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


Bild


Betrifft: AW: OFFEN
von: Silvia
Geschrieben am: 15.10.2003 14:57:15

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


Bild


Betrifft: AW: OFFEN
von: ChrisL
Geschrieben am: 15.10.2003 15:21:05

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


Bild


Betrifft: AW: OFFEN
von: Martin
Geschrieben am: 15.10.2003 23:06:36

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


Bild


Betrifft: danke
von: Silvia
Geschrieben am: 16.10.2003 11:02:55

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


 Bild

Beiträge aus den Excel-Beispielen zum Thema " Arbeiten im Hintergrund"