Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
456to460
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
456to460
456to460
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Änderung der Alarmzeit

Änderung der Alarmzeit
20.07.2004 10:04:52
Konni
Hallo Freaks,
warum funktioniert die Alarmzeit (hier: 00:00:30) nur bei der Einstellung 30 s?
Wenn ich andere Werte eingebe, z.B. 10 s, 20 s, 40 s u.s.w, wird keine Wavdatei abgespielt. - Und wie baue ich in den Code ein, dass ab 10 s alle Sekunde, bis Erreichen 0 s, ein Signal abgespielt wird? (Countdown).
Nachstehenden Code habe ich mit freundlicher Unterstützung dieses Forums an meine Bedürfnisse angepasst. - Ich bin eine absolute VBA-Null.
Vielen Dank im voraus: Konni
ARBEITSMAPPE
Option Explicit

Private Sub Workbook_Open()
DaZeit = "0:01:00"
ThisWorkbook.Worksheets("Submissionen 1-50").Range("A11") = CDate(DaZeit)
Zeitmakro
End Sub


Private Sub Workbook_BeforeClose(Cancel As Boolean)
On Error Resume Next
Application.OnTime EarliestTime:=ET, Procedure:="Zeitmakro", Schedule:=False
End Sub


Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
ThisWorkbook.Worksheets("Submissionen 1-50").Range("A11") = DaZeit
End Sub

MODUL 1
Option Explicit
Public ET As Variant
Public DaZeit As Date
Private Declare Function sndPlaySound32 Lib "winmm.dll" _
Alias "sndPlaySoundA" (ByVal lpszSoundName _
As String, ByVal uFlags As Long) As Long
Sub Zeitmakro()
With ThisWorkbook.Worksheets("Submissionen 1-50").Range("A11")
.Value = .Value - CDate("00:00:01")
If .Value 0 Then
ET = Now + TimeValue("00:00:01")
If .Value = TimeValue("00:00:30") Then
Call sndPlaySound32("C:\Winnt\media\klingel.wav", 1)
End If
Application.OnTime ET, "Zeitmakro"
Else
ThisWorkbook.Close True 'speichern
' Meldung bei Excel immer in Vordergrund
' Dim mldg
' mldg = MsgBox("Endzeit erreicht", 1048576, "Endzeit")
' 1048576 entspricht vbMsgBoxRtlReading
End If
End With
End Sub
Sub MacrosON()
'Dieses Macro ausführen wenn der Code zwischen
'Application.EnableEvents = False und
'Application.EnableEvents = True
'angehalten wurde oder abstürzt
Application.EnableEvents = True
End Sub

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Änderung der Alarmzeit
20.07.2004 10:35:43
ANdreas
Hallo Konni,
hatte das gerade unten schon gelesen. :-)
Kleiner Hinweis zu dem was Du unten geschrieben hattest, es fehlte kein End If, irgendwie ist Dir beim Kopieren meines Codes hinter der einen If-Bedingung der _ verloren gegangen (mit dem Unterstrich kann man sich das End if sparen wenn nur eine Bedingung dahinter ausgeführt werden soll (Zeile drunter).
So aber zu dem Problem, es liegt hier an einer der internen Rechengenauigkeit von Excel, das kann dazu führen, dass die Zahlen minimal abweichen und nicht mehr gleich sind. Somit wurde der Sound dann teilweise nicht mehr abgespielt.
Hab jetzt mal eine Toleranz eingeführt, somit sollte es nun klappen:
Public ET As Variant
Public DaZeit As Date
Private Declare

Function sndPlaySound32 Lib "winmm.dll" _
Alias "sndPlaySoundA" (ByVal lpszSoundName _
As String, ByVal uFlags As Long) As Long

Sub Zeitmakro()
Const Rundung As Double = 0.0000005
With ThisWorkbook.Worksheets("Submissionen 1-50").Range("A11")
.Value = WorksheetFunction.Max(CDate(.Value) - CDate("00:00:05"), 0)
If .Value <> 0 Then
ET = Now + TimeValue("00:00:05")
If Abs(.Value - CDbl(TimeValue("00:00:40"))) < Rundung Then _
Call sndPlaySound32("C:\Winnt\media\klingel.wav", 1)
Application.OnTime ET, "Zeitmakro"
Else
ThisWorkbook.Close True 'speichern
End If
End With
End Sub

Gruß
Andreas
Anzeige
AW: Änderung der Alarmzeit
Konni
Hallo Andreas, Du treue Seele,
schön von Dir zu hören. Es hat geklappt! Danke!
Aber wie funktioniert das mit dem Countdown? - In meiner Tabelle soll z.B. bei Erreichen von 30 s eine Vorwarnung gegeben werden, dann ab 10 s bis 0 s alle Sekunde ein Ton als letzte Warnung vor dem Schließen der Tabelle.
Vielleicht ist auch ein Bezug auf 2 Zellen meiner Tabelle möglich; in der 1. Zelle erzeuge ich einen Wert (durch Uhr ermittelt) für die Vorwarnung, in der 2. Zelle einen Wert (auch durch Uhr ermittelt) für die Letztwarnung. - Ist dies die komfortablere Lösung?
Nochmals Danke für Deine Unterstützung: Konni
Anzeige
AW: Änderung der Alarmzeit
20.07.2004 11:47:46
ANdreas
Hallo Konni,
hier nochmal komplett :)
DieseArbeitsmappe:

Private Sub Workbook_Open()
DaZeit = "0:02:00" 'oder DaZeit = ThisWorkbook.Worksheets("Tabelle1").Range("A1").Value
IntervalCountdown = "00:00:02" 'oder IntervalCountdown = ThisWorkbook.Worksheets("Tabelle1").Range("A2").Value
Vorwarnung = "00:00:40" 'oder analog siehe oben...
Letztwarnung = "00:00:10" '...
ThisWorkbook.Worksheets("Submissionen 1-50").Range("A11") = CDate(DaZeit)
Zeitmakro
End Sub


Private Sub Workbook_BeforeClose(Cancel As Boolean)
On Error Resume Next
Application.OnTime EarliestTime:=ET, Procedure:="Zeitmakro", Schedule:=False
End Sub


Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
ThisWorkbook.Worksheets("Submissionen 1-50").Range("A11") = DaZeit
End Sub

Standardmodul:
Public ET As Variant
Public DaZeit As Date
Public IntervalCountdown As Date
Public Vorwarnung As Date
Public Letztwarnung As Date
Private Declare Function sndPlaySound32 Lib "winmm.dll" _
Alias "sndPlaySoundA" (ByVal lpszSoundName _
As String, ByVal uFlags As Long) As Long
Sub Zeitmakro()
Const Rundung As Double = 0.0000005
With ThisWorkbook.Worksheets("Submissionen 1-50").Range("A11")
.Value = WorksheetFunction.Max(CDate(.Value) - IntervalCountdown, 0)
If .Value 0 Then
ET = Now + IntervalCountdown
Select Case .Value
'Vorwarnung
Case Vorwarnung - Rundung To Vorwarnung + Rundung
Call sndPlaySound32("C:\Winnt\media\klingel.wav", 1)
'Letztwarnung
Case 0 To Letztwarnung + Rundung
'kann natürlich auch andere Wav-Datei
Call sndPlaySound32("C:\Winnt\media\klingel.wav", 1)
End Select
Application.OnTime ET, "Zeitmakro"
Else
ThisWorkbook.Close True 'speichern
End If
End With
End Sub
Du kannst in Workbook_Open die Werte bestimmen oder aus der Tabelle einlesen lassen...
Von der Letztwarnung an bis 0 wird im Interval immer der Sound ausgegeben!
Gruß
Andreas
Anzeige
AW: Änderung der Alarmzeit
Konni
Hallo Andreas,
ich finde es toll, dass es Leute wie Dich gibt, die anderen selbstlos und aus Spaß an der Freud (mein Eindruck) unter die Arme greifen. Deine Lösung ist eine gute Lösung. Durch Zufall habe ich von einem Bekannten von dessen Bekannten erfahren, der VBA auch beherscht. - Ich glaube, diese Lösung ist etwas komfortabler. Für Dein Angagement bedanke ich mich sehr und sende Dir die andere Lösung für Deinen Gebrauch.
Aber eine Frage an Dich habe ich noch, ist mir gerade eingefallen: Wie integriere ich in meine Tabelle WAV-Dateien, die jedem Nutzer zur Verfügung stehen und somit von seinen PC-spezifischen WAV-Dateien unabhängig ist?
Nun der neue VBA-Code:
ARBEITSMAPPE
Option Explicit

Private Sub Workbook_Open()
DaZeit = "0:01:00"
ThisWorkbook.Worksheets("Submissionen 1-50").Range("A11") = CDate(DaZeit)
Zeitmakro
End Sub


Private Sub Workbook_BeforeClose(Cancel As Boolean)
On Error Resume Next
Application.OnTime EarliestTime:=ET, Procedure:="Zeitmakro", Schedule:=False
End Sub


Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
ThisWorkbook.Worksheets("Submissionen 1-50").Range("A11") = DaZeit
End Sub

MODUL 1
Option Explicit
Public ET As Variant
Public DaZeit As Date
Private Declare Function sndPlaySound32 Lib "winmm.dll" _
Alias "sndPlaySoundA" (ByVal lpszSoundName _
As String, ByVal uFlags As Long) As Long
Sub Zeitmakro()
With ThisWorkbook.Worksheets("Submissionen 1-50").Range("A11")
.Value = .Value - CDate("00:00:01")
If .Value 0 Then
ET = Now + TimeValue("00:00:01")
If Second(.Value) = 30 Then
Call sndPlaySound32("D:\Windows\media\ringin.wav", 1)
End If
If Second(.Value) Call sndPlaySound32("D:\Windows\media\Windows XP-sprechblase.wav", 1)
End If
Application.OnTime ET, "Zeitmakro"
Else
ThisWorkbook.Close True 'speichern
' Meldung bei Excel immer in Vordergrund
' Dim mldg
' mldg = MsgBox("Endzeit erreicht", 1048576, "Endzeit")
' 1048576 entspricht vbMsgBoxRtlReading
End If
End With
End Sub
Sub MacrosON()
'Dieses Macro ausführen wenn der Code zwischen
'Application.EnableEvents = False und
'Application.EnableEvents = True
'angehalten wurde oder abstürzt
Application.EnableEvents = True
End Sub
Ich hoffe, dass Du mir nicht böse bist, weil ich persönlich die andere Lösung für besser halte.
Andreas, höre ich von Dir? Gruß: Konni
Anzeige
AW: Änderung der Alarmzeit
22.07.2004 12:13:12
ANdreas
Hallo Konni,
die Lösung ist ja vom Prinzip nicht anders, ob nun mit Select Case oder If, oder ob Du die Werte so wie in meinem letzten Beispiel gleich definierst und aus der Tabelle auslesen kannst oder so wie es vorher war - bleibt sich ja gleich.
Das mit den Wav-Dateien ist nicht so komfortabel. Die musst Du separat mit der Tabelle mitliefern. Also die Exceldatei + die 2 Wav-Dateien in einem Verzeichnis.
Du kannst dann so darauf zugreifen:
Call sndPlaySound32(Thisworkbook.Path & "\ringin.wav", 1)
bzw.
Call sndPlaySound32(Thisworkbook.Path & "\Windows XP-sprechblase.wav", 1)
Dazu musst die beiden wav-Dateien aber mit der Exceldatei mitliefern.
So musste ich es ja z.B. auch bei meinem kleinen Excel-Spiel machen.
Versuch einfach mal Nibbles für Excel
Gruß
Andreas
Anzeige
AW: Änderung der Alarmzeit
Konni
Hallo Andreas,
die Lösung ist O.K.. Vielen Dank für Deine Unterstützung.
Gruß: Konni

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige