Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Lautstärke ändern per VBA

Lautstärke ändern per VBA
Franz
Guten Morgen Fachleute,
lässt sich die PC-Lautstärke per VBA ändern:
Lautstärke auf 100%
später wieder
Lautstärke auf 50%
Geht das? Und was muss ich bitte machen?
Danke schonmal und Grüße
Franz
Anzeige

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Lautstärke ändern per VBA
02.02.2010 09:35:11
Josef
Hallo Franz,

einfaches Beispiel, es wird immer zwichen 100% und 50% umgeschalten.

' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Private Declare Function waveOutSetVolume Lib "Winmm" (ByVal wDeviceID As _
  Integer, ByVal dwVolume As Long) As Integer

Sub toggleVolume()
  Dim intRet As Integer
  Static vol As Long
  
  vol = IIf(vol = -1, -32768, -1)
  intRet = waveOutSetVolume(0, vol)
End Sub

Gruß Sepp

Anzeige
AW: Lautstärke ändern per VBA
02.02.2010 09:51:13
Franz
Danke Sepp,
aber das hab ich wohl unklar geschrieben. Ich wollte nicht dauerndes Umschalten. Ich benötige nur den Code für 1 Wert, um die Anweisung für die jeweilige Höhe selbst an entsprechender Stelle eintragen zu können. Ich hab nur mal 100% und 50% als Beispiel genannt, um zu sehen, wie diese Werte angegeben werden.
Grüße
Franz
Anzeige
AW: Lautstärke ändern per VBA
02.02.2010 10:01:52
Josef
Hallo Franz,

dann so.

' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Private Declare Function waveOutSetVolume Lib "Winmm" (ByVal wDeviceID As _
  Integer, ByVal dwVolume As Long) As Integer

Sub setVolume(ByVal Volume As Integer)
  Dim intRet As Integer, vol As Long
  If Volume < 0 Then Volume = 0
  If Volume > 100 Then Volume = 100
  vol = Int(65535 / -100 * Volume)
  intRet = waveOutSetVolume(0, vol)
End Sub

Sub changeVolume()
  Dim intVolume As Integer, intRet As Integer
  
  intVolume = 50 '50% ,Wert zwischen 0 und 100!
  
  intRet = setVolume(intVolume)
End Sub

Gruß Sepp

Anzeige
Korrektur!
02.02.2010 10:04:39
Josef
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Private Declare Function waveOutSetVolume Lib "Winmm" (ByVal wDeviceID As _
  Integer, ByVal dwVolume As Long) As Integer

Sub setVolume(ByVal Volume As Integer)
  Dim intRet As Integer, vol As Long
  If Volume < 0 Then Volume = 0
  If Volume > 100 Then Volume = 100
  vol = Int(65535 / -100 * Volume)
  intRet = waveOutSetVolume(0, vol)
End Sub

Sub changeVolume()
  Dim intVolume As Integer, intRet As Integer
  
  intVolume = 50 '50% ,Wert zwischen 0 und 100!
  
  setVolume intVolume
End Sub

Gruß Sepp

Anzeige
AW: Lautstärke ändern per VBA
02.02.2010 10:11:03
Franz
Hallo Sepp,
danke, ich glaube so hätt ich's gern.
Aber es kommt noch die Fehlermeldung "Function oder Variable erwartet" - unterlegt ist "setVolume" in der Zeile
intRet = setVolume(intVolume)
Mach ich was falsch?
Danke und Grüße
Franz
Anzeige
siehe Korrektur! o.T.
02.02.2010 10:13:06
Josef
Gruß Sepp

AW: siehe Korrektur! o.T.
02.02.2010 10:23:11
Franz
Hallo Sepp,
danke, hab's schon, hab vorm Abschicken nicht mehr nachgeschaut.
Aber leider funktioniert's noch nicht richtig:
Auf "0" gestellt ergibt Lautsprecher aus, der ACER-Soundmanager zeigt 0 - das klappt.
Aber alle anderen Werte, egal ob 1 oder 100 ergeben immer die gleiche Lautstärke, und zwar die, die im ACER-SM für das "Gerät" als die höchste eingestellt ist.
Grüße
Franz
P.S.: kann erst in ca 1 Stunde wieder antworten - sorry
Anzeige
noch nicht
02.02.2010 12:06:52
Franz
Hallo Sepp,
also, es geht noch nicht, wie beschrieben:
Auf "0" gestellt ergibt Ton aus - wunderbar
Aber alle anderen Werte, egal ob 1 oder 100 ergeben immer die gleiche Lautstärke, und zwar die im System als höchste eingestellte. Hab ich im System 50% eingestellt, dann spielt er immer mit dieser Lautstärke. Hab ich 100% eingestellt, dann mit 100. Hab ich 10% eingestellt, dann mit 10.
Und wie gesagt, egal ich im Code 1 oder 100 oder irgendwas dazwischen eintrage!
Fragende Grüße
Franz
Anzeige
AW: noch nicht
02.02.2010 12:30:15
Josef
Hallo Franz,

dann probier's mal so.

' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Private Declare Function waveOutSetVolume Lib "Winmm" (ByVal wDeviceID As _
  Integer, ByVal dwVolume As Long) As Integer

Private Declare Function waveOutGetVolume Lib "Winmm" (ByVal wDeviceID As _
  Integer, dwVolume As Long) As Integer

Sub SetVolume(ByVal volume As Integer)
  Dim intRet As Integer, Vol As Long
  If volume < 0 Then volume = 0
  If volume > 100 Then volume = 100
  Vol = Int(655.35 * volume)
  intRet = waveOutSetVolume(0, Vol)
End Sub

Sub changeVolume()
  Dim intVolume As Integer, intRet As Integer
  
  intVolume = 100 '50% ,Wert zwischen 0 und 100!
  
  SetVolume intVolume
End Sub

Gruß Sepp

Anzeige
gut - fast sehr
02.02.2010 13:04:43
Franz
Hallo Sepp,
ja, super, jetzt wird die Lautstärke verändert, lauter oder leiser, wie gewählt.
Allerdings wird das prozentual innerhalb des Bereichs der System-Lautstärke gemacht. D. h.:
steht die Systemlautstärke auf voll: dann ergibt die Wahl "100" im Code auch volle Lautstärke, "30" ergibt 30% der Systemlautstärke.

Steht die Systemlautstärke aber nicht auf "voll", sondern z. B. auf halber Lautstärke:
jetzt ergibt die Vorwahl "100" nicht hundert Prozent der Systems, sondern nur 50 Prozent, also  _
das Maximum der eingestellten Systemlautstärke.
Vorwahl "30" ergibt dann also eine Lautstärke am unteren Ende der gesamtmöglichen Systemlautstärke.

Ich hoffe, ich konnte darstellen was passiert.
Gibt es auch die Möglichkeit, direkt auf die Systemlautstärke einzuwirken und diese absolut zu regeln?
Grüße
Franz
Anzeige
danke
03.02.2010 07:40:24
Franz
Hallo Sepp,
auch wenn's die große Lösung, Eingriff in die Gesamtsystemlautstärke nicht gibt, danke ich Dir trotzdem herzlichst, hast mir sehr geholfen! Auch damit bin ich schon einen Riesenschritt weiter.
Vielen Dank und Grüße
Franz
;
Anzeige
Anzeige

Infobox / Tutorial

Lautstärke ändern per VBA in Excel


Schritt-für-Schritt-Anleitung

Um die Lautstärke deines PCs über VBA zu ändern, kannst du die Funktion waveOutSetVolume verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Öffne den Visual Basic for Applications (VBA) Editor:

    • Drücke ALT + F11 in Excel.
  2. Füge ein neues Modul hinzu:

    • Klicke auf Einfügen und wähle Modul.
  3. Füge den folgenden VBA-Code ein:

    Private Declare Function waveOutSetVolume Lib "winmm.dll" (ByVal wDeviceID As Integer, ByVal dwVolume As Long) As Integer
    
    Sub setVolume(ByVal Volume As Integer)
       Dim intRet As Integer, vol As Long
       If Volume < 0 Then Volume = 0
       If Volume > 100 Then Volume = 100
       vol = Int(65535 / -100 * Volume)
       intRet = waveOutSetVolume(0, vol)
    End Sub
    
    Sub changeVolume()
       Dim intVolume As Integer
       intVolume = 50 ' Setze hier deinen gewünschten Wert zwischen 0 und 100!
       setVolume intVolume
    End Sub
  4. Ändere den Wert in intVolume:

    • Setze intVolume auf den gewünschten Lautstärkegrad (0 bis 100).
  5. Führe das Makro aus:

    • Gehe zurück zu Excel, drücke ALT + F8, wähle changeVolume und klicke auf Ausführen.

Häufige Fehler und Lösungen

  • Fehlermeldung: "Function oder Variable erwartet":

    • Stelle sicher, dass der Funktionsname setVolume korrekt geschrieben ist und dass du die Funktion nicht außerhalb des Moduls aufrufst.
  • Lautstärke wird nicht korrekt eingestellt:

    • Überprüfe, ob die Systemlautstärke auf den gewünschten Wert eingestellt ist. Der Code passt die Lautstärke relativ zur aktuellen Systemlautstärke an.

Alternative Methoden

Wenn du die Lautstärke direkt über Windows steuern möchtest, kannst du folgende Methoden ausprobieren:

  • Verwendung von PowerShell:

    • Du kannst auch PowerShell-Skripte verwenden, um die Systemlautstärke zu erhöhen. Hier ein Beispiel:
      (Get-WmiObject -Class Win32_SoundDevice).SetVolume(50)
  • Drittanbieter-Tools:

    • Es gibt Tools von Drittanbietern, die eine präzisere Steuerung der Systemlautstärke ermöglichen, wie z.B. NirCmd.

Praktische Beispiele

Hier sind einige Beispiele für verschiedene Lautstärkewerte:

  • Lautstärke auf 0% setzen:

    intVolume = 0
    setVolume intVolume
  • Lautstärke auf 100% setzen:

    intVolume = 100
    setVolume intVolume
  • Windows 11 Lautstärke erhöhen über 100%:

    • Dies ist nicht direkt über VBA möglich, da der Befehl waveOutSetVolume die Systemlautstärke nur bis zu 100% anpassen kann. Du kannst jedoch die Systemlautstärke über die Windows-Soundeinstellungen erhöhen.

Tipps für Profis

  • Verwende Static Variablen:

    • Um die aktuelle Lautstärke zu speichern und zwischen verschiedenen Aufrufen zu verwenden, kannst du Static Variablen nutzen.
  • Fehlerbehandlung einfügen:

    • Implementiere Fehlerbehandlung in deinem Code, um unerwartete Probleme zu vermeiden.
  • Systemlautstärke überwachen:

    • Du kannst auch den aktuellen Lautstärkewert abfragen, um sicherzustellen, dass deine Einstellungen korrekt sind.

FAQ: Häufige Fragen

1. Kann ich die Lautstärke über 100% setzen? Ja, über den VBA-Code waveOutSetVolume ist es nicht möglich, die Lautstärke über 100% zu erhöhen. Du kannst jedoch die Systemlautstärke selbst anpassen.

2. Welche Excel-Version benötige ich für diese Funktion? Der VBA-Code sollte in den meisten Versionen von Excel funktionieren, einschließlich Excel 2016, 2019 und Excel für Microsoft 365.

3. Wie kann ich die Lautstärke für verschiedene Anwendungen steuern? Der Code steuert die Gesamtsystemlautstärke und nicht spezifische Anwendungen. Für spezifische Steuerungen sind zusätzliche Tools erforderlich.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige