Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
828to832
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
828to832
828to832
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

cells(y,x)= mit Fehler in public function

cells(y,x)= mit Fehler in public function
26.12.2006 14:31:36
talljohn
Hallo Experts,
wenn ich
Worksheets("Daten").cells(1,1)=123
in einer public function aufrufe, endet das mit Fehler 1004.
Woran liegt's? Geht das überhaupt und wie in einer public function?
Dank und Gruß,
Johannes

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: cells(y,x)= mit Fehler in public function
26.12.2006 14:40:07
Nepumuk
Hallo Johannes,
wie lautet denn der Fehlertext? 1004 gibst es nämlich in vielen Varianten.
Gruß
Nepumuk
AW: cells(y,x)= mit Fehler in public function
26.12.2006 16:19:53
Herby
Hallo Johannes,
unabhängig ob Public oder Private ist das Ziel einer Funktion aus dem ggf. mitgegebenen Argument ein Ergebnis zu ermitteln. Dieses Ergebnis wird nach Beendigung der Funktion über den Funktionsnamen zurückgegeben.
Beispiel ohne Argument
Public

Function Wer() as String
Wer = Application.UserName
End Function

Beispiel mit Argument
Public

Function Inhalt(Zelle As Range) As String
Application.Volatile
Inhalt = CStr(Zelle.Value)
End Function

Wenn Du wie in Deinem Beispiel den Wert einer Zelle ändern willst, funktioniert das im allgemeinen nicht über eine Funktion, sondern über eine Prozedur:

Sub test()
Worksheets("Daten").cells(1,1)=123
End Sub

Diese Prozedur kann Public oder Private sein. Mit Public kannst Du diese Prozedur von allen Modulen aus aufrufen. Mit Private kannst Du den Aufruf auf das Modul begrenzen, in dem sich diese

Sub befindet.
Viele Grüße
Herby

Anzeige
AW: cells(y,x)= mit Fehler in public function
26.12.2006 22:14:39
talljohn
Danke, Herby,
sollte wohl noch erwähnen, dass ich diese public function zur Berechnung einer Zelle nutze, dort also als "selbstdefinierte Funktion" aufrufe, die natürlich ein Ergebnis zurückgeben soll, aber gleichzeitig ein paar Zwischenergebnisse in ein paar andere Zellen schreiben sollte. Das geht wohl partout nicht.
Johannes
Function und Procedure
26.12.2006 22:41:50
Herby
Hallo Johannes,
die UDF kannst du von der Tabelle aus aufrufen. Damit hast Du das Endergebnis. Die Zwischenergebnisse kannst Du ggf. über eine Procedure in der Du auch die UDF verwenden kannst, auch in anderen Zellen anzeigen lassen. Anbei ein kleines Beispiel:
https://www.herber.de/bbs/user/39193.xls
Viele Grüße
Herby
Anzeige
AW: Function und Procedure
27.12.2006 05:57:42
Nepumuk
Hallo Johannes,
es ist, ohne einen kleinen Trick, nicht möglich andere Zellen aus einer UDF heraus zu ändern.
Gruß
Nepumuk
AW: Function und Procedure
27.12.2006 13:21:10
Herby
Hallo Nepumuk,
Du hast mich neugierig gemacht. Rufst Du aus einer Funktion eine Prozedur auf, die dann die Einträge in den anderen Zellen vornimmt ?
Ich habs probiert, aber es klappt nicht.
Danke vorab für das Knowhow.
Viele Grüße
Herby
AW: Function und Procedure
27.12.2006 15:14:58
Nepumuk
Hallo Herby,
klar mach ich das. Ich lass mich doch von Excel nicht vergackeiern.
Gruß
Nepumuk
AW: Function und Procedure
27.12.2006 17:46:14
Herby
Hallo Nepumuk,
ich habs mal so probiert:

Function Endergebnis(Zelle As Range) As Integer
Application.Volatile
Dim Wert As Integer
Endergebnis = CInt(Zelle.Value * 4)
If Zelle.Value > 9 Then
Wert = Zelle.Value
Call Zwischenergebnis(Wert)
End If
End Function


Sub Zwischenergebnis(ByRef Wieviel As Integer)
Range("D2").Value = Wieviel
End Sub

Schaut zwar super aus, aber funtkioniert nicht. Hast Du ne Idee was falsch sein könnte ?
Viele Grüße
Herby
Anzeige
AW: Function und Procedure
27.12.2006 17:55:58
Nepumuk
Hallo Herby,
so geht's natürlich nicht, aber so:
' **********************************************************************
' Modul: Modul2 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Private Declare Function KillTimer Lib "user32.dll" ( _
    ByVal hWnd As Long, _
    ByVal nIDEvent As Long) As Long
Private Declare Function SetTimer Lib "user32.dll" ( _
    ByVal hWnd As Long, _
    ByVal nIDEvent As Long, _
    ByVal uElapse As Long, _
    ByVal lpTimerFunc As Long) As Long
Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" ( _
    ByVal lpClassName As String, _
    ByVal lpWindowName As String) As Long

Private Const GC_CLASSNAMEMSEXCEL = "XLMAIN"

Private Wert As Integer
Private hWnd As Long

Private Sub prcStartTimer()
    hWnd = FindWindow(GC_CLASSNAMEMSEXCEL, Application.Caption)
    SetTimer hWnd, 0&, 100&, AddressOf prcTimer
End Sub

Private Sub prcStopTimer()
    KillTimer hWnd, 0&
End Sub

Private Sub prcTimer(ByVal hWnd As Long, ByVal nIDEvent As Long, _
        ByVal uElapse As Long, ByVal lpTimerFunc As Long)

    On Error Resume Next
    Call prcStopTimer
    Call Zwischenergebnis
End Sub

Function Endergebnis(Zelle As Range) As Integer
    Endergebnis = Cint(Zelle.Value * 4)
    If Zelle.Value > 9 Then
        Wert = Zelle.Value
        Call prcStartTimer
    End If
End Function

Sub Zwischenergebnis()
    Range("D2").Value = Wert
End Sub

Gruß
Nepumuk
Anzeige
Was es nicht alles gibt !
27.12.2006 18:32:28
Herby
Hallo Nepumuk,
Du hast mich soeben fertig gemacht. Dein Code sieht nicht nur schöner aus, er funktioniert auch noch. Muss ich die ganzen API-Aufrufe eigentlich verstehen.
Mit der UDF wird die prcStartTimer gestartet. Diese wiederum startet die prcTimer. Diese startet prcStopTimer und dann die Sub Zwischenergebnis. Kannst Du mir einen kleinen Überblick geben, was grob dahintersteckt ?
So langsam erhole ich mich wieder und sage Danke !
Herby
AW: Was es nicht alles gibt !
27.12.2006 19:11:40
Nepumuk
Hallo Herby,
den Ablauf hast du ja schon verstanden. Der ganze Trick dabei ist, dass sich der Timer in einer externen DLL befindet und damit nicht von Excel kontrolliert werden kann. Mit OnTime würde es aus diesem Grund nicht funktionieren. Das heißt, die Ereigniskette wird unterbrochen und läuft unabhängig von der Funktion weiter. Das API - Gedöns muss du dabei nicht verstehen, Hauptsache es funktioniert. Oder?
Gruß
Nepumuk
Anzeige
AW: Was es nicht alles gibt !
27.12.2006 22:00:25
Herby
Hallo Nepumuk,
ich hab mich zwar wieder etwas regeneriert (beim Abendessen)
und Deine geistige Nahrung aufgenommen aber noch nicht verdaut.
Ich sage Dir für dieses Knowhow herzlich D A N K E und
denke wieder einmal über den Satz nach "Ich weiss dass ich nichts weiss !"
Viele Grüße
Herby

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige