Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1920to1924
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
Inhaltsverzeichnis

Öffentliche Variable plötzlich leer

Öffentliche Variable plötzlich leer
28.02.2023 19:11:08
Marc
Guten Abend,
ich deklariere in einem Modul eine Variable als öffentliche Variable vom Typ long und weise ihr einen Wert zu.
Anschließend möchte ich den Wert dieser Variable in einem Klassenmodul des gleichen Projekts verwenden aber im Klassenmodul hat die Variable den Wert Null.
Sollte eine öffentliche Variable generell nicht in jeder Prozedur des gleichen Projekts verfügbar sein bzw. den gleichen Wert haben?
VG
Marc

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Öffentliche Variable plötzlich leer
28.02.2023 19:25:58
Daniel
Naja, deine Beschreibung lässt noch viele Fragen bzw Fehlermöglichkeiten offen.
zum einen muss, damit die Variable in allen Modulen zur verfügung steht, in einem allgemeinen Modul (Modul1) als Public außerhalb der Makros deklariert werden.
Dieser Makroname darf dann an keine anderen Stelle deklariert werden, denn damit entsteht dann eine zweite Variable, die zwar den gleichen Namen hat, aber ansonsten eigenständig ist.
die nächste Frage wäre, ob den auch der Code mit der Wertzuweisung ausgeführt wurde, bevor du die Variabel dann in einem anderen Modul verwendest?
du solltest uns schon deinen Code zeigen.
Gruß Daniel
Anzeige
AW: Öffentliche Variable plötzlich leer
28.02.2023 20:22:18
Marc
Hi Daniel,
ich denke, dass ich Deine Hinweise alle korrekt befolgt habe. Das Seltsame ist, dass ich beispielsweise eine Boolean-Variable an den gleichen Stellen deklariere und verwende, die jedoch im Klassenmodul ihren vorher im Modul1 zugewiesenen Wert noch besitzt. (Ich habe es getestet in dem Ich den Wert vor dem Call der Prozedur, die sich im Klassenmodul befindet, auf true gesetzt habe.)
Hier Modul:
Option Explicit
Public ObjTWSControl As Klasse1
Public shName As String 'Öffentliche Variable für den Namen des Auswertungssheets deklarieren
Public Ready As Boolean
Public id As Long
Public row As Long
Sub InitTWSControl()
Set ObjTWSControl = New Klasse1
shName = ActiveSheet.Name  ' Namen des Auswertungssheets als öffentliche Variable festlegen
End Sub
'TWS verbinden
Sub TwsVerbinden()
Dim x As String, y As Long
x = ActiveWorkbook.Worksheets(shName).Range("B4").Value
y = ActiveWorkbook.Worksheets(shName).Range("D4").Value
id = ActiveWorkbook.Worksheets(shName).Range("F4").Value
Call ObjTWSControl.m_TWSControl.Connect(x, y, id, False)
End Sub
'Datenabruf starten
Sub Datenabruf()
Dim row As Long, lastrow As Long
lastrow = ThisWorkbook.Sheets(shName).Cells(Rows.Count, 2).End(xlUp).row
For row = 7 To lastrow
Ready = False
' Suchbegriff abfragen
Dim TickerSymbol As String
Dim id As Long
' Financial Statement abrufen in TWS
'Dim FundID As Long
'FundID = 1700000 + 1
Dim fs As String
fs = "finstat"
' create contract
Set ObjTWSControl.m_contractInfo = ObjTWSControl.m_TWSControl.createContract()
' fill contract strcuture
With ObjTWSControl.m_contractInfo
               
                .symbol = ThisWorkbook.Sheets(shName).Range("B7").Value
                .currency = ThisWorkbook.Sheets(shName).Range("D7").Value
                .exchange = ThisWorkbook.Sheets(shName).Range("E7").Value
                .primaryExchange = ThisWorkbook.Sheets(shName).Range("F7").Value
                .secType = "STK"
                
End With
' get xml data
Call ObjTWSControl.m_TWSControl.reqFundamentalData(id, ObjTWSControl.m_contractInfo, fs)
Do Until Ready = True
   DoEvents
Loop
Application.Wait (Now + TimeValue("0:00:03")) 'Warten bis Daten von TWS vorliegen
Next row
End Sub
Und hier das Klassenmodul:
Option Explicit
Public WithEvents m_TWSControl As TWSLib.Tws
Public m_contractInfo As TWSLib.IContract
' Automatische Erstellung eines neuen Objekts der Klasse TWS.lib bei Instanzierung eines Objekts des Klassenmoduls Klasse 1
Private Sub Class_Initialize()
    
Set m_TWSControl = New TWSLib.Tws
If Not m_TWSControl Is Nothing Then
MsgBox "TWS initialisiert!"
Else
MsgBox "Failed to initialize!"
End If
    
End Sub
Private Sub m_TWSControl_connectAck()
MsgBox "TWS verbunden!"
End Sub
Private Sub m_TWSControl_fundamentalData(ByVal reqId As Long, ByVal data As String)
Dim xmlDoc As Object
Set xmlDoc = CreateObject("Microsoft.XMLDom") 'XMLDocument Object erstellen
xmlDoc.LoadXML (data)
... 
Sheets(shName).Cells(row, 8).Value = csv
Ready = True 'Zeigt der Do Loop Schleife in Modul1, dass der Vorgang beendet ist.
End Sub

Anzeige
AW: Öffentliche Variable plötzlich leer
28.02.2023 23:07:33
Rudi
Hallo,
erst mal solltest du diesen Fehler beseitigen:
Sub Datenabruf()
Dim row As Long, lastrow As Long
Row ist z.B. eine Eigenschaft des Range-Objekts. VBA-Schlüsselwörter (Eigenschaften, Objekte etc.) und sollten niemals als Variable benutzt werden.
-> Dim lngRow as long.
Gruß
Rudi
AW: Öffentliche Variable plötzlich leer
28.02.2023 23:36:46
Marc
Tausend Dank für den Tipp Rudi!
Dadurch hab ich den Fehler gefunden. Ich hatte die Variable doppelt deklariert, einmal als Public und einmal in einer der Prozeduren.
Jetzt läuft es. :)
und warum ....
28.02.2023 23:18:11
Rudi
... arbeitest du nicht einfach mit ActiveSheet statt Sheets(shName) ?
Anzeige
AW: und warum ....
28.02.2023 23:38:06
Marc
Ich weiß es nicht. Ich hatte Teile des Codes aus einem älteren Makro von mir übernommen und es so beibehalten. :)
AW: und warum ....
01.03.2023 01:16:52
onur
noch offen ?

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige