bischoff
Goto Top

VBA Case Abweisung mit Variablen

Hallo zusammen


Ich habe folgendes Problem.
Ich Arbeite zur Zeit in einer Mühle im Getreidesilo.
Dort werden allen Warenein-ausgänge in einem Buch aufgeschrieben und um die Arbeit zu erleichtern,
habe ich in Excel Tabellenblätter für jedes Silo erstellt bzw. habe ich vor.

Momentan habe ich ca 10-15 Silos erfasst es sind aber ca. 60 an der Zahl und um die Arbeit in Excel zu erleichtern,
habe ich Formulare erstellt in denen ich Umläufe und Wareneingänge verbuche.

Die Silos werden über eine Combobox ausgewählt z.b. Silo 15.
Das Tabellenblatt wähle ich mit einer Case Anweisung aus und die Daten werden dort eingetragen.

Nun zu meiner Frage:

Die Caseanweisung sieht momentan so aus:


Select Case Silo1
Case 13
Sheets("13").Select
Range("A6").Select
Case 14
Sheets("14").Select
Range("A6").Select
Case 15
Sheets("15").Select
Range("A6").Select
End Select


Die Zahlen stehen für die Silonummern.
Ich habe schon erfolglos versucht die Nummern durch eine Variable zu ersetzen, um nicht 50 solcher Case Anweisungen schreiben zu müssen,
was auch ziemlich unübersichtlich wäre.

Ja meine Frage ist hier ob das überhautp mit Variablen funktioniert oder ob es evtl. andere oder bessere Lösung gibt.

Hoffe mir kann hier jemand helfen.
Danke schonmal im Vorraus

Mfg Bischoff

Content-ID: 131433

Url: https://administrator.de/contentid/131433

Ausgedruckt am: 22.11.2024 um 10:11 Uhr

Xolger
Xolger 10.12.2009 um 17:12:09 Uhr
Goto Top
Hallo,

hab mal ein Beispiel erzeugt mit dem es meiner Meinung nach einfacher geht:

Sub testsilo()
Dim silo1 As Integer
Dim Blatt As String

silo1 = 1 'Ändern zur Übergabe der Combobox
Blatt = "" & silo1 & ""
Sheets(Blatt).Select
Cells(1, 1) = "Treffer" 'Einfügen der Anweisungen

End Sub

Gruß
Xolger
76109
76109 10.12.2009 um 17:46:03 Uhr
Goto Top
Hallo Bischoff!

In der Annahme, das die ComboBox den Silo im Format "Silo 1" zurückgibt und die Sheets nur die Nummer 1 - 60 haben, dann in etwa so:
Private Sub ComboBox1_Change()
    Sheets(Split(ComboBox1.Text)(1)).Activate:  ActiveSheet.Range("A6").Select  
End Sub

Gruß Dieter
Bischoff
Bischoff 10.12.2009 um 20:35:04 Uhr
Goto Top
Also erstmal vielen Dank an euch beide!!!

Ich hab jetz die erste Version genommen, bei der zweiten hats net funktioniert kann evtl. an der Split funktion gelegen haben kenn mich damit allerdings net so gut aus trotzdem danke.

MfG
Bischoff
76109
76109 11.12.2009 um 08:50:05 Uhr
Goto Top
Hallo Bischoff!

Sorry, war wohl ein Missverständnis.

Letztes Beispiel war:
Klicke in ComboBox z.B. den Eintrag "Silo 1", dann aktiviere Sheet("1")

In diesem Beispiel:
Klicke in ComboBox z.B. den Eintrag "15", dann aktiviere Sheet("15")
Private Sub ComboBox1_Change()
    Sheets(ComboBox1.Text).Activate:  ActiveSheet.Range("A6").Select  
End Sub

Hier zum besseren Verständnis noch ein Beispiel, dass beim anzeigen der UserForm die ComboBox mit den Nummern 1-60 im Format "01", "02", "60" initialisiert, den ersten Eintrag "01" als Vorauswahl in das Editierfeld schreibt und das dazugehörige Sheet("01") aktiviert.

Das würde dann im Ganzen z.B. so aussehen:
Option Explicit

Const SiloBeg = 1
Const SiloEnd = 60

Private Sub UserForm_Initialize()
    Dim i As Integer

    For i = SiloBeg To SiloEnd
        ComboBox1.AddItem Right("0" & i, 2)  
    Next
    
    ComboBox1.ListIndex = 0 
   'Löst ein Change-Ereignis aus und aktiviert Sheets("01")  
End Sub

Private Sub ComboBox1_Change()
    Sheets(ComboBox1.Text).Activate
End Sub

Gruß Dieter