Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1608to1612
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

Initialisierung eines Objektes "WMP" (global)

Initialisierung eines Objektes "WMP" (global)
18.02.2018 12:55:12
Rainer
Hallo Excelfreunde,
ich versuche einen Windows Media Player Control zu erzeugen. Das klappt auch soweit. Aber wenn ich den Control gleichzeitig als Objekt definieren will, dann geht es nicht.
Nach dem ersten Durchlauf ist der WMP erstellt, aber keine einzige globale Variable definiert.
Wenn ich die Schleife 2mal ausführe, dann klappt es? (Bei der zweiten Durchführung besteht das WMP Object bereits).

Public STOPPEN As Boolean
Public UMP1 As Object
Public shtPlaylist As Worksheet
Public shtBeamer As Worksheet
Public FirstSong As Integer
Sub Initialize()
Set shtPlaylist = ThisWorkbook.Sheets("Playlist")
Set shtBeamer = ThisWorkbook.Sheets("Beamer")
STOPPEN = False
On Error Resume Next
Set UMP1 = Sheets("MediaPlayer").WindowsMediaPlayer1
If Err.Number  0 Then
UMP1 = Sheets("MediaPlayer").OLEObjects.Add(ClassType:="WMPlayer.OCX.7", _
Link:=False, _
DisplayAsIcon:=False, _
Left:=0, _
Top:=0, _
Width:=200, _
Height:=100 _
)
End If
End Sub
Danke und Gruß,
Rainer

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

Betreff
Datum
Anwender
Anzeige
AW: Initialisierung eines Objektes "WMP" (global)
18.02.2018 14:48:59
Sepp
Hallo Rainer,
Set fehlt!
Modul Modul1
Option Explicit 
 
Public STOPPEN As Boolean 
Public UMP1 As Object 
Public shtPlaylist As Worksheet 
Public shtBeamer As Worksheet 
Public FirstSong As Integer 
 
Sub Initialize() 
 
  If shtPlaylist Is Nothing Then Set shtPlaylist = ThisWorkbook.Sheets("Playlist") 
  If shtBeamer Is Nothing Then Set shtBeamer = ThisWorkbook.Sheets("Beamer") 
  STOPPEN = False 
 
  On Error Resume Next 
  If UMP1 Is Nothing Then Set UMP1 = Sheets("MediaPlayer").WindowsMediaPlayer1 
     
  If Err.Number <> 0 Then 
    Set UMP1 = Sheets("MediaPlayer").OLEObjects.Add(ClassType:="WMPlayer.OCX.7", _
      Link:=False, _
      DisplayAsIcon:=False, _
      Left:=0, _
      Top:=0, _
      Width:=200, _
      Height:=100 _
      ) 
  End If 
   
  Err.Clear 
  On Error GoTo 0 
 
End Sub 
 
 

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0

Gruß Sepp

Anzeige
AW: Initialisierung eines Objektes "WMP" (global)
18.02.2018 14:58:12
Rainer
Hallo Sepp,
danke für deine Hilfe. Aber dein Code hat genau das gleiche Verhalten. Wenn er
Set UMP1 = Sheets("MediaPlayer").OLEObjects.Add(ClassType:="WMPlayer.OCX.7", ...

durchläuft (also eine Err.Number vorhanden war, weil kein UMP1 existiert), dann sind am Ende der Sub keine globalen Variablen definiert.
Gruß,
Rainer
AW: Initialisierung eines Objektes "WMP" (global)
18.02.2018 15:21:36
Rainer
Auch dieser Versuch führt nicht zum Ziel...
Wenn ich den Call auf Stufe 2 weglasse und "von Hand" starte, dann klappt es wie es soll. Aber mit Aufruf geht es nicht.
Jede Hilfe ist willkommen!
Merkwürdig ist auch, dass die Meldung "Haltmodus nicht möglich" erscheint, aber NACHDEM das OLEObject erstellt wurde. Ich sehe hier also erst die MsgBox und dann die Meldung. Wenn kein Object erstellt werden muss, dann geht auch der Haltemodus weiter. Ich bin verwirrt...
Sub Initialize()
On Error Resume Next
Set UMP1 = Sheets("MediaPlayer").WindowsMediaPlayer1
If Err.Number  0 Then
Set UMP1 = Sheets("MediaPlayer").OLEObjects.Add(ClassType:="WMPlayer.OCX.7", _
Link:=False, _
DisplayAsIcon:=False, _
Left:=0, _
Top:=0, _
Width:=200, _
Height:=100 _
)
MsgBox "Hallo"
End If
Call Stufe2
End Sub
Sub Stufe2()
Set shtPlaylist = ThisWorkbook.Sheets("Playlist")
Set shtBeamer = ThisWorkbook.Sheets("Beamer")
STOPPEN = False
Set UMP1 = Sheets("MediaPlayer").WindowsMediaPlayer1
End Sub

Anzeige
AW: Initialisierung eines Objektes "WMP" (global)
18.02.2018 16:00:52
Sepp
Hallo Rainer,
kann dein problem nicht nachvollziehen.
Modul Modul1
Option Explicit 
 
Public STOPPEN As Boolean 
Public UMP1 As Object 
Public shtPlaylist As Worksheet 
Public shtBeamer As Worksheet 
Public FirstSong As Integer 
 
Sub Initialize() 
 
  If shtPlaylist Is Nothing Then Set shtPlaylist = ThisWorkbook.Sheets("Playlist") 
  If shtBeamer Is Nothing Then Set shtBeamer = ThisWorkbook.Sheets("Beamer") 
  STOPPEN = False 
 
  On Error Resume Next 
  If UMP1 Is Nothing Then Set UMP1 = Sheets("MediaPlayer").WindowsMediaPlayer1 
     
  If Err.Number <> 0 Then 
    Set UMP1 = Sheets("MediaPlayer").OLEObjects.Add(ClassType:="WMPlayer.OCX.7", _
      Link:=False, _
      DisplayAsIcon:=False, _
      Left:=0, _
      Top:=0, _
      Width:=200, _
      Height:=100 _
      ) 
  End If 
   
  Err.Clear 
  On Error GoTo 0 
 
End Sub 
 
Sub test() 
 
Call Initialize 
 
MsgBox UMP1.Name & vbLf & shtPlaylist.Name & vbLf & shtBeamer.Name 
End Sub 

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0

Gruß Sepp

Anzeige
AW: Initialisierung eines Objektes "WMP" (global)
18.02.2018 16:28:18
Rainer
Hallo Sepp,
ich auch nicht. Aber ich bin dir dankbar für deine Mühe.
Die MsgBox in deinem Code sehe ich auch, alles richtig. Wenn ich die Sub erneut starte (oder jede andere) mit F8, dann sind alle globalen Variablen wieder weg.
Folgendes habe ich probiert:

Sub test()
Call Initialize
UMP1.Controls.stop        'Hier kommt der Fehler
MsgBox UMP1.Name & vbLf & shtPlaylist.Name & vbLf & shtBeamer.Name
Call BEENDEN
End Sub
Es endet mit Laufzeitfehler 438. Die Err.Number ist 40040.
Aber eben nur, wenn er in diesem Versuch das OLEObject für den Media Player neu erstellen muss.
Gruß,
Rainer
Anzeige
AW: Initialisierung eines Objektes "WMP" (global)
18.02.2018 16:53:49
Sepp
Hallo Rainer,
das ist doch normal, wenn du im VBE mit F8 rummachst, dann werden meistens die globalen Variablen zurückgesetzt.
Gruß Sepp

AW: Initialisierung eines Objektes "WMP" (global)
18.02.2018 16:53:54
Sepp
Hallo Rainer,
das ist doch normal, wenn du im VBE mit F8 rummachst, dann werden meistens die globalen Variablen zurückgesetzt.
Gruß Sepp

AW: Initialisierung eines Objektes "WMP" (global)
18.02.2018 17:09:40
Rainer
Hallo Sepp,
Den Fehler bekomme ich aber genauso wenn ich es ohne F8 mache.
Warum löscht VBA globale Variablen, wenn ich debuggen will? Das verstehe ich noch weniger.
Produziert die Sub aus meinem letzten Beitrag bei dir keinen Fehler?
Danke und Gruß,
Rainer
Anzeige
Nein, kein Fehler! o.T.
18.02.2018 17:16:38
Sepp
Gruß Sepp

AW: Nein, kein Fehler! o.T.
18.02.2018 17:36:22
Rainer
Verdammt.
Danke fürs Testen.
Ich werde es morgen auf der Arbeit nochmal probieren. Da habe ich Windows 7 und Excel 2013.
Gruß,
Rainer
Vereinfachter Code (produziert bei meinem Excel 2016 unter Windows 10 den Fehler):
Option Explicit
Public UMP1 As Object
Sub test()
Call Initialize
UMP1.Controls.stop      'Fehler hier?
MsgBox UMP1.Name
End Sub
Sub Initialize()
On Error Resume Next
If UMP1 Is Nothing Then Set UMP1 = Sheets(1).WindowsMediaPlayer1
If Err.Number  0 Then
Set UMP1 = Sheets(1).OLEObjects.Add(ClassType:="WMPlayer.OCX.7", _
Link:=False, _
DisplayAsIcon:=False, _
Left:=0, _
Top:=0, _
Width:=200, _
Height:=100 _
)
End If
Err.Clear
On Error GoTo 0
End Sub

Anzeige
AW: Initialisierung eines Objektes "WMP" (global)
18.02.2018 17:36:49
Mullit
Hallo,
yup, das ist ne böse Falle, wenn Du ActiveX-Controls (auch per Code..) in ein TabBlatt einfügst, wechselt Excel in den Entwurfsmodus und alle globalen und stat. Variablen werden auf ihren Initialisierungswerte zurückgesetzt...
Das kannst Du nur mit nem Timer lösen, wie hat Isi hier beschrieben...
Gruß, Mullit
Gelöst! Danke Mullit!
18.02.2018 18:08:48
Rainer
Hallo Mullit,
Besten Dank! Das wars!
Die Prozedur beenden lassen und über Application.Ontime nochmal starten.
So funktioniert es:
Sub Initialize()
On Error Resume Next
Set UMP1 = Sheets(1).WindowsMediaPlayer1
If Err.Number  0 Then
Set UMP1 = Sheets(1).OLEObjects.Add(ClassType:="WMPlayer.OCX.7", _
Link:=False, _
DisplayAsIcon:=False, _
Left:=0, _
Top:=0, _
Width:=200, _
Height:=100 _
)
  Call Application.OnTime(EarliestTime:=Now, _
Procedure:="Initialize")
End
End If
Err.Clear
On Error GoTo 0
End Sub

Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige