Das Clever-Excel-Forum.de - Treffen
findet vom 15. - 17. September 2017 in Thüringen / Region Großer Inselsberg statt. Hotelbuchung ab sofort möglich.


Variablendeklaration & Festlegung feststehender Werte auf Variablen > ändern
#1
Exclamation 
Hallo @all
hier erstmal die Codeschnipsel:
Code:
Sub Cmd_Aktualisieren_Click()
                    'BEGINN: VARIABLENDEKLARATION
                    Dim strErgebnisse As String                     'Tabelle mit Ergebnissen
                    Dim strDaten As String                          'Tabelle mit Daten
                    Dim intErsteLeereZeile As Integer               'Erste leere Zeile
                    Dim intZeileAuffuellen As Integer               'Aufzufüllende Zeile
                    Dim intCtr_1 As Integer                         'Zähler 1
                    Dim intSpielIDSpalte As Integer                 'Spalte mit Spiel-ID
                    Dim intKeglerSpalte As Integer                  'Spalte mit Kegler
                    Dim intSpielBeendetSpalte As Integer            'Spalte Spiel beendet?
                    '----------------------------------------------------------------------------------------------
                    'FESTLEGUNG FESTSTEHENDER WERTE auf VARIABLEN
                    'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
                    'hier den Wert will ich automatisch ändern lassen
                    strErgebnisse = "25.09.2014" ' <-----
                    'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
                    strDaten = "Daten"
                    intSpielIDSpalte = 3
                    intKeglerSpalte = 4
                    intSpielBeendetSpalte = 41
                    intZeileAuffuellen = 0 'Startwert
                   '----------------------------------------------------

und

Code:
Sub CmdEingabe_Click()
'----------------------------------------------------------------------------------------------
                    'BEGINN: VARIABLENDEKLARATION
                    Dim strErgebnisse As String                     'Tabelle mit Ergebnissen
                    Dim strDaten As String                          'Tabelle mit Daten
                    Dim intErsteLeereZeile As Integer               'Erste leere Zeile
                    Dim intZeileAuffuellen As Integer               'Aufzufüllende Zeile
                    Dim intCtr_1 As Integer                         'Zähler 1
                    Dim intCtr_2 As Integer                         'Zähler 2
                    Dim intSpielIDSpalte As Integer                 'Spalte mit Spiel-ID
                    Dim intKeglerSpalte As Integer                  'Spalte mit Kegler
                    Dim intSpielBeendetSpalte As Integer            'Spalte Spiel beendet?
                    '----------------------------------------------------------------------------------------------
                    'FESTLEGUNG FESTSTEHENDER WERTE auf VARIABLEN
                    'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
                    'hier den Wert will ich automatisch ändern lassen
                    strErgebnisse = "25.09.2014" ' <-----
                    'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
                    intCtr_2 = 0
                    strDaten = "Daten"
                    intSpielIDSpalte = 3
                    intKeglerSpalte = 4
                    intSpielBeendetSpalte = 41
                    intZeileAuffuellen = 0 'Startwert
                   '----------------------------------------------------
                    'BESTIMMUNG DER ERSTEN LEEREN ZEILE
                    intCtr_1 = 2 'Beginne erst bei Zeile 3 zu zählen! Wegen Leerzeile 2
                    Do
                    intCtr_1 = intCtr_1 + 1
                    Loop Until (ActiveWorkbook.Worksheets(strErgebnisse).Cells(intCtr_1, 1).Value = "")
                    intErsteLeereZeile = intCtr_1
                    'BESTIMMUNG DER RICHTIGEN ZEILE ZUM SCHREIBEN
                        For intCtr_1 = 1 To intErsteLeereZeile
                            'Suche nach NICHT BEENDETEN SPIELEN
                            If ActiveWorkbook.Worksheets(strErgebnisse).Cells(intCtr_1, intSpielBeendetSpalte).Value = "" Then
                                'Suche nach RICHTIGER SPIEL-ID
                                If ActiveWorkbook.Worksheets(strErgebnisse).Cells(intCtr_1, intSpielIDSpalte).Value = CboSpiel.Value Then
                                    'Suche nach RICHTIGEM SPIELER
                                    If ActiveWorkbook.Worksheets(strErgebnisse).Cells(intCtr_1, intKeglerSpalte).Value = CboKegler.Value Then
                                        'RICHTIGE ZEILE ZUM SCHREIBEN MERKEN
                                        intZeileAuffuellen = intCtr_1
                                        intCtr_1 = intErsteLeereZeile 'Abbruch der Schleife erzeugen
                                    End If
                                End If
                            End If
                        Next intCtr_1
                        If intZeileAuffuellen = 0 Then
                            intZeileAuffuellen = intErsteLeereZeile
                        End If
Mit dieser Codezeile ist es möglich die Listbox in der Ansicht zu beeinflussen (Herkunft=Tabellenblatt)
Code:
ListBox1.RowSource = Sheets(Worksheets("Start").Range("b2").Text).Range("B2:AA30").Address(External:=True)
was ich erreichen möchte:
strErgebnisse = "25.09.2014" auch ändern sofern es funktionieren könnte den Fokus auf das neue Blatt zu lenken

Habe es mit der Zeile
Code:
strErgebnisse = Sheets(Worksheets("Start").Range("b2").Text).Range("B2:AA30").Address(External:=True)
versucht, ohne Ergebnis bzw. Fehlermeldung "Index ausserhalb Bereich"
Debugger hält bei markierter Codezeile:
Code:
Loop Until (ActiveWorkbook.Worksheets(strErgebnisse).Cells(intCtr_1, 1).Value = "")

Warum klappt meine Vorgehensweise so nicht?
Bitte erkläre mir das, wenn du gewillt bist.
Zur Zeit muss ich im Code das neue Blatt manuell einfügen/ändern strErgebnisse = "25.09.2014"
Kann mir einer von euch VBAlern helfen
vorab Danke für deine/eure freiwillge Hilfe
?mage
to top
#2
Hallo Frank,

das verstehe ich nicht. Mit dieser Codezeile

Code:
strErgebnisse = Sheets(Worksheets("Start").Range("b2").Text).Range("B2:AA30").Address(External:=True)

weißt Du der Variablen strErgebnisse doch eine Bereichsadresse zu. Wie heißt denn dein Tabellenblatt bzw. wie soll es heißen?
Gruß Stefan
Win 7 / Office 2007
to top
#3
(23.10.2014, 18:13)Steffl schrieb: ...verstehe ich nicht. Mit dieser Codezeile

Code:
strErgebnisse = Sheets(Worksheets("Start").Range("b2").Text).Range("B2:AA30").Address(External:=True)

weißt Du der Variablen strErgebnisse doch eine Bereichsadresse zu. Wie heißt denn dein Tabellenblatt bzw. wie soll es heißen?
Hallo Stefan,
verkehrt reinkopiert, es sollte lauten:
Code:
strErgebnisse = Sheets(Worksheets("Start").Range("b2").Text).Address(External:=True)
Der Tabellenblattname wird aus der Zelle B2 aus dem Tab.bl. Start übergeben, hier z.b. "25.10.2014"

Danke für dein Statement
?mage
to top
#4
Hallo Frank,

(23.10.2014, 18:23)WergibtmirRat schrieb: verkehrt reinkopiert, es sollte lauten:
Code:
strErgebnisse = Sheets(Worksheets("Start").Range("b2").Text).Address(External:=True)
Der Tabellenblattname wird aus der Zelle B2 aus dem Tab.bl. Start übergeben, hier z.b. "25.10.2014"

Das paßt meiner Meinung nach überhaupt nicht, denn ein Sheet hat keine Address-Eigenschaft.
Gruß Stefan
Win 7 / Office 2007
to top
#5
(23.10.2014, 18:34)Steffl schrieb:
Code:
strErgebnisse = Sheets(Worksheets("Start").Range("b2").Text).Address(External:=True)
Das paßt meiner Meinung nach überhaupt nicht, denn ein Sheet hat keine Address-Eigenschaft.
Okay, neuer Versuch es zu erklären:
Die Variable ist gesetzt: strErgebnisse = "25.09.2014"
wenn ich nun über einen Button auf dem UF klicke, erzeugt der Button mit diesem Code
Code:
Private Sub Cmd_Erstelle_Click()
'Neues Datenblatt wird erstellt aus der Zelle "B2" vom Tabellenblatt "Start" im anschluß wird der Tabellenaufbau aus dem Tabellenblatt "Mustervorlage" mit dem Bereich "A1:CV700" reinkopiert

Dim neuSheet As Worksheet
If Not BlattExists(Worksheets("Start").Range("b2")) Then Sheets.Add(Type:=xlWorksheet).Name = (Worksheets("Start").Range("b2"))
Set neuSheet = Worksheets(CStr(Worksheets("Start").Range("b2")))
Worksheets("Mustervorlage").Range("A1:CV700").Copy neuSheet.Range("A1")
End Sub
das neue Tabellenblatt mit dem Zelleninhalt aus B2
Dank einer Formel die das nächste Kegel zu heute zeigt "=TEXT(INDEX(A:A;VERGLEICH(HEUTE();A:A;1)+1);"TT.MM.JJJJ")" kann über den oben genannten Button das TAb.bl. erzeugt werden.
Was zur Zeit händisch passiert, der Name des aktuell neuen Tab.bl. muss geändert werden.
Die Variable ist zu ändern: strErgebnisse = "25.09.2014"

Darauf wollt ich hinaus, hoffe es genau beschrieben zu haben
?mage
to top
#6
Hallo Frank,

irgendwie bin ich schwer vom Begriff. Vielleicht solltest Du die Datei hier hochladen. Oder mal ein Schuss ins Blaue.

Code:
strErgebnisse =  Worksheets(Worksheets.Count).Name ' "25.09.2014"
Gruß Stefan
Win 7 / Office 2007
to top
#7
Hallo Frank,

wo genau steht den nun das Datum?
Du schreibst doch in Deiner Erklärung, auf dem Blatt Start in B2.
Also hier:
Worksheets("Start").Range("b2").Text
Wenn Deine Variable nur den Blattnamen - also das Datum - enthält, dann hat da nichts anderes was zu suchen. Also kurz und Bündig
strErgebnisse = Worksheets("Start").Range("b2").Text
   \\\|///      Hoffe, geholfen zu haben.
   ( ô ô )      Grüße, André aus G in T  
 ooO-(_)-Ooo    (Excel 97-2016)
to top
#8
Hallo Frank,

Excel bringt Dir den Fehler Fehlermeldung "Index ausserhalb Bereich" u.a. auch dann, wenn Du den Button "Eingabe" vor Erzeugung des Blattes drückst. Eine andere Ursache kann sein, wenn Du z.B. eine andere Datei beim Start Deiner Kegelliste offen hast. In der anderen Datei gibt es wahrscheinlich weder die nötigen Blätter noch die Daten darin.

In Deinem Ablauf erzeugst Du bei Betätigung des entsprechenden Buttons ein Blatt mit dem aktuellen Datum. Dieses soll dann umbenannt werden. Den entsprechenden code hast Du hier leider nicht gepostet.
Ich habe hier mal nur MsgBox Me.CboKegeln.Text
eingefügt. Die Eigenschaft Text solltest Du auch beim Füllen von TxtDatumZahl verwenden, dann hast Du dort auch das Datum drin und nicht die Datumszahl.

Code:
Private Sub CboKegeln_Change()
Dim i As Integer
Dim tb As TextBox
    With UserForm1.CboKegeln
        If .Value <> "" Then
            UserForm1.TxtDatumZahl.Value = .List(.ListIndex, 1)
            MsgBox Me.CboKegeln.Text
        Else
            UserForm1.TxtDatumZahl.Value = ""
        End If
    End With
End Sub

Wenn Du Objekte im gleichen Userform aufrufst, kannst Du auch Me schreiben statt dem Namen. Das hat noch den Vorteil, falls Du es mal umbenennst, brauchst Du in dessen code nichts zu ändern. Allerdings geht das mit Suchen und Ersetzen im Projekt auch schnell.

Dann wäre es von Vorteil, wenn Du an einigen Stellen Prüfungen einfügst. Ich schrieb schon oben was zum Button "Eingabe". Dann wäre noch eine Frage, was passiert, wenn es beim Anlegen oder Umbenennen das Excel-Blatt schon gibt. Beim Anlegen hast Du das gelöst - If Not BlattExists(Worksheets("Start").Range("b2")) Then ... - Bei der Änderung des Namens brauchst Du das dann auch. Ich weiß jetzt allerdings nicht, ob es gut ist, das Blatt, wenn es vorhanden ist, ungefragt zu überschreiben. Eventuell hat der Nutzer aus Langeweile oder Versehen auf den Knopf "Tabellenblatt erstellen" gedrückt oder er wollte am gleichen Tag eine zweite Auswertung anlegen ...

Was mir noch aufgefallen ist - das Blatt heißt zwar 25.10.2014, im Blatt steht aber 26.10.2014. Da hab ich jetzt noch nicht geschaut, woran das liegt.
   \\\|///      Hoffe, geholfen zu haben.
   ( ô ô )      Grüße, André aus G in T  
 ooO-(_)-Ooo    (Excel 97-2016)
to top
#9
Lightbulb 
Hallo André,
danke für deine rasche Rückmeldung,
nun zum Auseinanderklamüssern der ganzen offen Fragen:

(26.10.2014, 06:19)schauan schrieb: ..."Index ausserhalb Bereich" u.a. auch dann, wenn Du den Button "Eingabe" vor Erzeugung des Blattes drückst. Eine andere Ursache kann sein, wenn Du z.B. eine andere Datei beim Start Deiner Kegelliste offen hast. In der anderen Datei gibt es wahrscheinlich weder die nötigen Blätter noch die Daten darin.

Antwort:
Die Vorgehensweise ist wie folgt in den Schritten: 1 - 2 - 3 - Wurf aktualisieren - Keglerliste leeren (nur zur Vorsicht) - 4.
Nun werden die Wurftextfelder befüllt anschließend per Eingabebutton in die Datenliste übergeben.

Zitat:In Deinem Ablauf erzeugst Du bei Betätigung des entsprechenden Buttons ein Blatt mit dem aktuellen Datum. Dieses soll dann umbenannt werden. Den entsprechenden code hast Du hier leider nicht gepostet.

Antwort:
Per Button "Neues Tabellenblatt erzeugen" wird das Datum aus dem Tabellenblatt "Start" von der Zelle "B2" übernommen,
zuständig ist Private Sub Cmd_Erstelle_Click() dafür, mit den Zeilen

PHP-Code:
If Not BlattExists(Worksheets("Start").Range("b2")) Then Sheets.Add(Type:=xlWorksheet).Name = (Worksheets("Start").Range("b2"))
Set neuSheet Worksheets(CStr(Worksheets("Start").Range("b2"))) 

Zitat:Ich habe hier mal nur MsgBox Me.CboKegeln.Text
eingefügt. Die Eigenschaft Text solltest Du auch beim Füllen von TxtDatumZahl verwenden, dann hast Du dort auch das Datum drin und nicht die Datumszahl.

Antwort:
Die Datumszahl wird zum erstellen der Spiel-ID mit numerischer Datumszahl benötigt,
zuständig ist Private Sub TextBoxSumme_Change() dafür, mit den Zeilen
PHP-Code:
Label43.Caption TxtDatumZahl TextBox11
rechne 
'Makro 


Zitat:Wenn Du Objekte im gleichen Userform aufrufst, kannst Du auch Me schreiben statt dem Namen

Antwort:
Eine gute Variante, ich muss dann wohl alles umschreiben.

Zitat:...an einigen Stellen Prüfungen einfügst...noch eine Frage, was passiert, wenn es beim Anlegen oder Umbenennen das Excel-Blatt schon gibt.

Antwort:
Der Einwand ist berechtigt, eine Ja/Nein/Abbrechen Option wäre hier von Vorteil (Hab ich garnicht bedacht)

Zitat:...das Blatt heißt zwar 25.10.2014, im Blatt steht aber 26.10.2014

Antwort:
Das neu anzulegende Tab.bl. wird wie oben erwähnt aus der Zelle B2 generiert.
Zum einen im oder unter Tabellenblatt "Tabelle3 "Start" durch Beverly's Code bei Änderung des Datum direkt, steht dann in der Registerleiste ganz rechts,
zum anderen mittels Button (Schritt: 1) "Neues Tabellenblatt erzeugen" wird diese links in der Registerleiste erzeugt neben 'Start'.
Im Vorfeld habe ich versucht mit den Zellen M3:M7 im Tab.bl. Start zu arbeiten, aber wieder verworfen.
Unter Schritt:2 wird zur Zeit das aktuelle Datum für das Label43 erzeugt was widerum im Textfeld "TxtDatumZahl" mit der Spiel-ID verkettet ausgegeben erscheint.
Mit diese Zahl in der Spalte AQ erfolgt die Errechnung der Rangfolge jeden Spiel's für die Rangfolgenspalte BC

Danke André für dein Engagement mir ein wenig zu helfen
?mage
to top


Möglicherweise verwandte Themen...
Thema Verfasser Antworten Ansichten Letzter Beitrag
  VARIABLEN MITTELWERT AUF ANDERE ZELLEN ÜBERTRAGEN (relativer Spaltenbezug) suncruiser 4 69 24.11.2016, 06:11
Letzter Beitrag: BoskoBiati
  Nutzung von Variablen beim zugriff auf Tabellen maderv 5 85 10.11.2016, 15:40
Letzter Beitrag: BoskoBiati
  Histogramm mit 2 Variablen erstellen köfte 4 279 28.10.2016, 16:42
Letzter Beitrag: schauan
  Globale Variablen in VBA Kash 12 190 26.10.2016, 04:28
Letzter Beitrag: schauan
  Matrix in Formel aus festen und variablen Werten zusammensetzen zmichael27 14 246 25.10.2016, 14:02
Letzter Beitrag: neopa
  Index (Vergleichsbefehl) mit mehreren Variablen? Franzi 79 5 94 21.10.2016, 22:31
Letzter Beitrag: Jockel
  SVERWEIS mit 3 Variablen raphi08981739 8 262 09.09.2016, 07:57
Letzter Beitrag: raphi08981739
  Werte auf kleinste/größte Werte einer anderen Spalte zuordnen MaxiL 2 228 21.07.2016, 10:24
Letzter Beitrag: MaxiL
  Variablen Text in Formel einbinden HHT 4 313 23.06.2016, 11:40
Letzter Beitrag: Jockel
  Nichtdiskrete Zunahme einer Variablen Anne Haubrich 12 604 20.06.2016, 16:21
Letzter Beitrag: snb

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste