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

Variable deklarieren

Variable deklarieren
07.04.2022 07:28:02
Antonio
Guten Morgen,
Ich versuche eine Variable im Code zu deklarieren und zuweisen:

Sub BassProc()
KillTimer 0&, hTimerBas: hTimerBas = 0                     ' Bass-Timer löschen
With ThisWorkbook.Sheets("Midi")
Do
Dim iVoiceNum As Integer
Dim iVolume As Integer
iVoiceNum = .Cells(2, 15)  'Variable Instrument
iVolume = .Cells(3, 15)    'Variable Volume
iZeileBas = iZeileBas + 1
If iZeileBas > .Cells(.Rows.Count, "K").End(xlUp).Row Then
If hTimerBeg = 0 Then midiOutClose hMidiOut: hMidiOut = 0
Exit Sub
End If
If Val(.Cells(iZeileBas, 13).Value) > 0 Then Exit Do
Loop
If iZeileBas > 2 Then _
PlayMIDI .Cells(iZeileBas - 1, 11).Value, .Cells(iZeileBas - 1, 12).Value, 0
PlayMIDI iVoiceNum, .Cells(iZeileBas, 12).Value, iVolume
If cTimerBas = 0 Then cTimerBas = (Timer * 1000)
cTimerBas = cTimerBas + .Cells(iZeileBas, 13).Value
hTimerBas = SetTimer(0&, 0&, cTimerBas - (Timer * 1000), AddressOf BassProc)
End With
End Sub
Sub PlayMIDI(iVoiceNum As Integer, vNoteNum As Variant, Optional iVolume As Integer = 127)
Dim i As Integer, vArr As Variant, iFound As Long
If hMidiOut = 0 Then Exit Sub                                  ' Kein Handle=>raus
If iVoiceNum > 0 Then _
midiOutShortMsg hMidiOut, (256 * iVoiceNum) + 192          ' Instrument wählen
vArr = Split(vNoteNum, ",")                                     ' Noten zusamenstellen
On Error Resume Next
For i = 0 To UBound(vArr)
If Val(vArr(i)) = 0 Then
With ThisWorkbook.Sheets("Midi")
iFound = 0
iFound = WorksheetFunction.Match(vArr(i), .Columns(35), 0)
If iFound > 0 Then
vArr(i) = .Cells(iFound, 34).Value
End If
End With
End If
midiOutShortMsg hMidiOut, RGB(144, vArr(i), iVolume)   '144 = h90
Next i
DoEvents
End Sub
aber funzt nicht, habe sie vielleicht an der falsche Stelle?
Soll evtll. im Sub PLAYMIDI sein?
Ich bitte um ein wenig Hilfe
Vielen Dank im Voraus
LG Antonio

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Variable deklarieren
07.04.2022 08:58:22
Rudi
Hallo,
Dimensionierungen gehören an den Anfang.

Sub BassProc()
Dim iVoiceNum As Integer
Dim iVolume As Integer
KillTimer 0&, hTimerBas: hTimerBas = 0                     ' Bass-Timer löschen
With ThisWorkbook.Sheets("Midi")
Do
iVoiceNum = .Cells(2, 15)  'Variable Instrument
iVolume = .Cells(3, 15)    'Variable Volume
Gruß
Rudi
AW: Variable deklarieren
07.04.2022 08:59:01
volti
Hallo Antonio,
mit dieser etwas zu allgemeinen Fragestellung wirst Du m.E. kaum eine Antwort bekommen.
Formuliere Dein Ansinnen noch etwas genauer.
Welche Variable soll deklariert und mit welchem Wert zugewiesen werden?
Wo wird die Variable eingesetzt? In einer Sub/Function, in mehreren Subs?
Die Variablen hMidiOut, hTimerBeg, hTimerBas, iZeileBas und cTimerBas müssen alle außerhalb der Sub BassProc deklariert sein.
Die Variablen iVoiceNum und iVolume solltest Du (muss aber nicht) am Anfang des Codes in der Sub platzieren.
Tipp:
If hTimerBeg = 0 Then midiOutClose hMidiOut: hMidiOut = 0
ändern in
If (hTimerMel + hTimerBeg + hTimerBas) = 0 Then midiOutClose hMidiOut: hMidiOut = 0
Grund: Midi soll erst geschlossen werden, wenn alle drei Timer abgelaufen sind.
viele Grüße
Karl-Heinz
Anzeige
AW: Variable deklarieren
07.04.2022 09:40:45
Antonio
Hallo Rudi,
Ich werde eine Mappe hoch laden.
Hallo Karl-Heinz,
du hast recht, daher die Mappe, dann kann man sich das besser vorstellen.
"Zeile ersetzt" Danke
LG Antonio
AW: Variable deklarieren
07.04.2022 09:56:59
Antonio
Hallo,
https://www.herber.de/bbs/user/152316.xlsm
wie aus der Mappe, versuche ich Instrument und Volume als globale Variable wie in den Blaue Felder angegeben.
Mit dem Vorschlag von Rudi, spielt zwar aber ich muss ganz unten in Instrumentenspalte die Variable angeben,
geht auch ohne?
Sonst funzt alles.
LG Antonio
AW: Variable deklarieren
07.04.2022 10:17:03
Rudi

als globale Variable
globale Variablen werden außerhalb einer Prozedur (Sub) ganz oben in einem Modul deklariert.

Option Explicit
Public varTEST
Sub aaaa()
varTEST = "abc"
Call bbb
End Sub
Sub bbb()
MsgBox varTEST
End Sub
Gruß
Rudi
Anzeige
AW: Variable deklarieren
07.04.2022 10:52:19
Antonio
Hallo Rudi,
Hatte schon mal probiert mit dem Tipp von Piet vom "2022-03-25 07:43:43"
Falls die Mappe angeschaut hast wirdst du merken was ich meine.
....und ohne GLOBAL?
Weil es sind 6 Spalten zu bedienen und wenn global ist kann ich den wert für alle ändern aber nicht einzeln.
LG Antonio
AW: Variable deklarieren
07.04.2022 17:56:50
volti
Hallo Antonio,
habe interessehalber das ganze mal ein wenig umgebaut und zusammengezogen.
Teste es mal, ob noch alles läuft.
PS: Alle Buttons haben jetzt einen Namen bekommen und es ist immer die gleiche Sub zugeordnet. Anhand des Namens wird dann die Aktion ausgeführt.
Dadurch können einige Sub's wegfallen.
Wenn in der Spalte kein Instrument oder Volume angegeben ist, wird es automatisch aus der 2. und 3. Zeile entnommen.
PlayMidiMusik.xlsm
Ich denke, es hört sich jetzt alles ganz schön an. :-)
Gruß
Karl-Heinz
Anzeige
AW: Variable deklarieren
08.04.2022 06:48:56
Antonio
Hallo Karl-Heinz,
es ist der reine Wahnsinn,
jetzt läuft sehr gut und sogar zum Schluss wird nicht abrupt beendet.
Mit Dem Code ist eine super Sache, bin dabei ihn zu verstehen und wie was geändert würde.
Da mein Projekt sich langsam sehr ausdehnt und für den Forum zu groß
frag ich dich höflich nochmal nach deine E-Mail addresse um evtll. weiter zu komunizieren.
Hier ist auf jedenfall meiner:
mazzatoni24@gmail.com
Danke zunächst für deine Einsatz.
Zur Info: habe ein kleines programm (VBA) für DRUM es läuft sehr gut aber ich schaffe es nicht
ihn in der Gesamtheit zu integrieren, mein Problem ist das wenn ich die Gitarre abspiele, lässt sich DRUM nicht einschalten und umgekeht.
Wäre ich hier für ein wenig Hilfe auch dankbar
LG Antonio
Anzeige
AW: Erledigt
11.04.2022 07:41:40
Antonio
Danke an alle

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige