Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema CommandButton
BildScreenshot zu CommandButton CommandButton-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Label
BildScreenshot zu Label Label-Seite mit Beispielarbeitsmappe aufrufen

Object Error bei Function

Betrifft: Object Error bei Function von: Bay
Geschrieben am: 22.10.2014 19:56:48

Hallo zusammen, ich habe eine Function abgeändert um nach Eingabe des Ticker-Symbols den Beta Paramater der Aktie von reuters.com zu erhalten.

'Beta Function. Posted by mybeam. Code für Reuters.com angepasst

Function GetBeta(ByVal tRange As Range) As Single

    Dim xHttp As Object
    Dim t, Ticker  As String
    
    Set xHttp = CreateObject("Microsoft.XMLHTTP")
    
    Ticker = tRange.Text
    
xHttp.Open "GET", "http://www.reuters.com/finance/stocks/overview?symbol=" & Ticker, False
    xHttp.Send
    t = xHttp.responseText
    
    t = Mid(t, InStr(t, ">Beta:<") + 1)
    t = Mid(t, InStr(t, ">") + 1)
    t = Mid(t, InStr(t, ">") + 1)
    t = Mid(t, InStr(t, ">") + 1)
    
    GetBeta = Val(Left(t, InStr(t, "<") - 1))

End Function
Die Function scheint zu funktionieren. Wenn ich die folgende Sub starte und in Zelle E14 EDF.PA (das Ticker-Symbol von Electricité de France) steht, erhalte ich den korrekten Beta-Wert von 0.95.
Private Sub CommandButton4_Click()
Dim Beta As Double

Beta = GetBeta(Worksheets("Home").Range("E14"))

MsgBox Beta
End Sub

Nun würde ich die Function gerne in mein Userform einbauen und schlussendlich über eine select case Abfrage das Ticker-Symbol zuweisen. Allerdings habe ich bereits Schwierigkeiten, wenn die Function nicht auf Zelle E14 zugreifen soll, sondern auf eine von mir bestimmte Variable (trange).
Private Sub CommandButton5_Click()
Dim Beta As Double
Dim trange As Range

trange = EDF.PA
Beta = GetBeta(trange)

MsgBox Beta
End Sub

Wenn ich auf den CommandButton5 klicke erhalte ich immer einen Runtime error 424 object required.

Vermutlich habe ich was mit den Variabeln durcheinandergebracht, komm aber leider einfach nicht weiter.

Besten Dank für eure Hilfe!

  

Betrifft: AW: Object Error bei Function von: Patrick
Geschrieben am: 22.10.2014 21:42:27

Hallo Bay

Versuche es mit:

Private Sub CommandButton5_Click()
    Dim Beta As Double
    Beta = GetBeta(Worksheets("Home").Range("E14"))
    Label1.Caption = Beta
End Sub
Gruss
Patrick


  

Betrifft: AW: Object Error bei Function von: Bay
Geschrieben am: 22.10.2014 21:48:36

Hallo Patrick,

Danke für deine Antwort. Vielleicht habe ich mich unglücklich ausgedrückt. Die function, die auf das Worksheet zugreift, funktioniert. Wenn ich aber nicht auf das worksheet "home" zugreifen will, sondern direkt auf eine Variable (welche mir durch eine vorgestellte select case Auswahl ausgegeben wird) habe ich Probleme. Die untenstehende Sub funktioniert nicht wie gewünscht.

Private Sub CommandButton5_Click()
 Dim Beta As Double
 Dim trange As Range
 
 trange = EDF.PA
 Beta = GetBeta(trange)
 
 MsgBox Beta
 End Sub



  

Betrifft: AW: Object Error bei Function von: Patrick
Geschrieben am: 22.10.2014 22:02:44

Hallo Bay

Neuer Versuch :)

Private Sub CommandButton5_Click()
 Dim Beta As Double
 Dim trange As Range
 Beta = GetBeta(trange)
 MsgBox Beta
End Sub
Bei mir hat es so funktioniert! Einfach das
trange = EDF.PA
herauslöschen :)

Gruss
Patrick


  

Betrifft: AW: Object Error bei Function von: Bay
Geschrieben am: 22.10.2014 22:10:32

Mhmm :) Aber ich würde gerne auf die variable trange zugreifen. Mir schwebt was im folgenden Stil vor. Zuerst wähle ich mit einer Combobox den Aktientitel aus (da die Ticker-Symbole nicht immer aussagekräftig sind). Die Function soll dann das Resultat des Select Case übernehmen. Somit kann ich die Variable trange nicht einfach weglassen.

Private Sub CommandButton5_Click()

 Dim Beta As Double
 Dim trange As Range

Select Case Userform1.ComboBox_D.Value
Case "ACCOR"
    trange = "AC.PA"
Case "ELECTRICITE DE FRANCE"
    trange = "EDF.PA"

 Beta = GetBeta(trange)
 
 MsgBox Beta
 End Sub



  

Betrifft: Dann muss 'trange' aber 'As String' sein und ... von: Luc:-?
Geschrieben am: 22.10.2014 22:23:46

…das dürfte dann auch weder ein Bereich noch sein Name sein, Bay,
falls das in deiner Mappe nicht schon so angelegt ist.
Luc :-?


  

Betrifft: Was ist 'EDF.PA', ein Text oder ein Objekt? von: Luc:-?
Geschrieben am: 22.10.2014 22:19:28

Davon hängen nämlich die Schreibweise und ÜbergabeForm ab, Bay;
da du das nicht deklariert hast, kann man sonstwas vermuten. trange ist aber als Range deklariert, also ein Objekt, und so etwas muss man Setzen. Dann sollte EDF.PA also auch einen Bereich bezeichnen, somit ein Name und damit Text sein. Damit kann ganz auf trange verzichtet wdn, denn deine Fkt erwartet ohnehin einen Bereich. Also würde in der Deklaration Const naBer$ = "EDF.PA" und dann Beta = GetBeta(Range(naBer)) oder gleich nur Beta = GetBeta(Range("EDF.PA")) reichen (dann musst du den auch nicht am PgmEnde Nothing Setzen).
Gruß, Luc :-?