Pointer VBA - SpeicherAdr auf andr. Obj.Attr Point
03.09.2015 19:24:33
ExtremeExceling
Hallo
an alle die sich mit VBA und DLLs und Zeigern (pointer) bzw. der Speicher-Adressierung bzw. deren Inhalte auskennen.
Fokus dieses Threads sind unteranderem die DLL-Funktionen DispCallFunc() und AddressOf() in Verbindung mit VBA
ich bin neu im Forum wobei ich es schon gut zum Lesen nutze.
ich weiß jetzt nicht ob mein Text-Formatierungen gegen irgendwelche Foren Richtlinien stoßen
ehrlich gesagt hatte ich mir diese nicht durchgelesen.
die Formatierungen Fett sollen die Wichtigkeit der Bereiche hervorheben.
Ich bedanke mich bei allen im Voraus für Eure Hilfe und Unterstützung.
viel Spaß beim lesen Rechtschreib-Fehler können häufiger vorkommen.
Thema:
Range( ).Value oder ein Object.Attribut verweisen lassen auf eine Speicheradresse bzw. den Inhalt der Speicheradresse eines sich ändernden unabhängigen Object.Attribut,.
Das sich ändernde Objekt ist eine PowerPoint.Player.currentPosition eines video mit der aktuellen Videozeit in Millisekunden.
Gut es funktioniert einwandfrei dieses Objekt bzw. dessen Attribut zu Adressieren und den Wert mit Umrechnung in eine Zelle schreiben mit Range( .).Value= einPlayerObject .currentPosition etc.
Das ist aber nicht mein Fokus momentan, wen jemand fragen hat kann er sich melden. Dann versuche ich das irgendwie reinzustellen.
Die Methode wäre eigentlich das richtige, jedoch soll diese Zelle ständig alle jede Sekunde aktualisiert werden, während das Video abgespielt wird.
Dann dachte ich wie könnte ich es ggf. Auslösung durch ein Änderungsereignis sobald sich die Videozeit ändert dann per Event. Aber PowerPoint bietet hier keine Events dafür an.
hier eine kurze oder teil Liste der Ereignisse die PowerPoint zur Verfügung stellt.
http://www.pptfaq.com/FAQ00004_Make_your_VBA_code_in_PowerPoint_respond_to_events.htm
Es gäbe einerseits die Methode Worksheet.onTime etc.
bzw. https://www.herber.de/forum/archiv/788to792/790080_Event_zur_bestimmten_Systemzeit_ausloesen.html
besser dieses hier
http://www.online-excel.de/excel/singsel_vba.php?f=133
aber die onTime Methode finde ich nicht so passend für dieses Problem.
in dem Artikel ist unten eine Empfehlung für dieses Beispiel -> Link http://www.online-excel.de/excel/singsel_vba.php?f=96 beschrieben gibt es für so etwas eine bessere Lösung. Den Code hatte ich eine Excel Datei kopiert und versuchte diesen zu verstehen, weil das in etwa genau das ist was ich brauche.
zum letzten Link Menüleiste wird bei die Beispiel unter MS-Office 2013 unter dem Ribbon Menü Reiter Add-ins in dem Rahmen benutzerdefinierte Menüs angezeigt sobald sich diese Funktion öffnet. Beim Schließen des Workbooks werden die Menü Buttons wieder entfernt.
Problem gab es mit dem enable=false was soweit mir bekannt ein MS Office seitiges-Problem seit Version 2010 darstellt. Da gibt es ein Lösungsweg, habe es mit makro versucht jedoch mit win 7-10 hat man nicht gleich schreibrechte darauf da, sollte man da per Explorer im Admin Modus oder per Admin-User mit cmd oder Explorer per Admin machen, die Sicherheitseinstellungen bei Windows sind schon ein komisch, aber das ist ein anderes Thema.
Zurück zum Beisiel:
ich stellte dabei fest, die wichtigen Funktionen von .dlls genutzt werden.
Die wichtigsten sind diese:
AddressOf()
Infos:
https://msdn.microsoft.com/de-de/library/y72ewk2b.aspx
https://msdn.microsoft.com/en-us/library/office/gg264099.aspx
https://msdn.microsoft.com/de-de/library/office/Gg264347.aspx
Ziemlich gute Erklärung
https://www.herber.de/mailing/vb/html/vaopraddressof.htm (Erklärung)
https://www.herber.de/mailing/vb/html/vaopraddressofx.htm (Beispiel)
sehr gute Info und beste Erklärung die ich gefunden hatte (leider auf Englisch).
http://www.thevbzone.com/secrets.htm#AddressOf
und
http://www.vbforums.com/showthread.php?344319-Call-function-by-address-%28make-your-own-callbacks%29
das hier ist auch ganz aufschlussreich
http://codingdomain.com/visualbasic/win32api/callback/
DispCallFunc()
http://www.vbforums.com/showthread.php?798325-What-exactly-are-the-parameters-for-the-API-method-called-DispCallFunc
Allgemeines zu Pointer in VBA
http://www.codeproject.com/Articles/712/How-to-do-pointers-in-Visual-Basic
Allgemeines zu byVal und byRef
https://msdn.microsoft.com/en-us/library/eek064h4.aspx
ggf. sind die solche themen wie deepCopy und swallowCopy hier passend.
Anmerkung z.B. was ist wenn das Ziel-objekt nicht mehr im Speicher ist, dann kann ja vor der Speicheradressen-Zuweisung einfach das eobject zwischenspeichern in ein virtueles range object mit byVal.
Im Fall wenn der referenzierte Speicher des anderen Objects nicht mehr vorhanden ist, dann einfach dieses ObjeKt wieder auf den das ursprüngliche Range-Objekt zurückschreiben, so die einfach vorstellung
das jetzt mal so ganz grob pseudo-Code mäßig geschrieben.
public globalAPointerObject as object
Sub irgendEineSubRoutine()
Set globalAPointerObject =speicherAddresZeiger (Range(aB2).value)
sets Zeiger von Range(aB2).value auf Speicheraddresse Object.Attribut
on error ( bzw. (If speicherAdrresse nicht meinem object zugewiesen)) next
set speicheraddresse von Range(aB2).value set = speicherAddresZeiger (globalARangeObject)
err.clear
End Sub
--------------------
Also meine Frage ist unabhängig von meinem Problem bzw. allgemein.
unabhängig von Power-point oder Kombination von Excel mit PowerPoint
Info für die, welche es nicht kennen:
http://www.online-excel.de/excel/singsel_vba.php?f=43
Z.B. angewendet auf den Zellinhalt einer Excel Zelle ohne dieses ständig aufrufen zu müssen.
denn dieses letzte Beispiel
( http://www.online-excel.de/excel/singsel_vba.php?f=96 )
hatte genau das geschafft, nur nicht in eine Zelle sondern in ein Menü-Feld.
Sogar mit Verweis auf di Addresse + Umrechnung
Ich benötige einfach eine Methode möglichst als sub oder function um:
die Speicheradresse von einem ein Attribut eines anderen Objektes zu Pointen(Zeigen (als hat mit Zeiger bzw. Pointer zu tun)) zu einem anderen Object.attribute zu Pointen, besser wäre das Ganze noch mit möglicher Umrechnung zwischen drinnen.
naja vielleicht ist hier auch so eine Art ShallowCopy oder wie das heißt Sinnvoll
Könnt Ihr mir ein paar Beispiele machen, einfach das Beispiel aufgreifen in dem der Wert, anstatt in eine Menü-Leiste in ein Range( ).Value gespeichert und automatisch richtig referenziert wird. Bei Unklarheiten bitte fragen.
einfach ein konkreten sehr kurzen Beispiel-Code.
Da ich diese .dll Methoden nicht so ganz durchgehend verstanden habe kann.
Ich denke die Methoden dich benötige für mein Vorhaben sind DispCallFunc() in Verbindung mit AddressOf() und mit ggf. weiteren DLL basierten Funktionen.
Ich bedanke mich nochmals für die Hilfe