Index außerhalb des gültigen Bereiches

  • Excel

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von peterfido.

    Index außerhalb des gültigen Bereiches

    Visual Basic-Quellcode

    1. Private Sub UserForm_Activate()
    2. Dim iRow As Byte
    3. iRow = 2
    4. cboBestehendenBenutzerAuswählen.Clear
    5. Do Until IsEmpty(ThisWorkbook.Sheets("Passwörter").Cells(iRow, 2)) Or iRow = 255
    6. cboBestehendenBenutzerAuswählen.AddItem (Sheets("Passwörter").Cells(iRow, 1) & " " & Sheets("Passwörter").Cells(iRow, 3))
    7. iRow = iRow + 1
    8. Loop
    9. End Sub


    Ich bekomme hier die Fehlermeldung Index außerhalb des gültigen Bereiches... könnt ihr mir sagen, wo mein Fehler liegt?
    VBA streikt in der 6. Zeile...
    "Der Visual Basic ist nur so schlau wie der, der davor sitzt" - Na schön! Dann steh ich eben auf!

    "Wenn du denkst es geht nicht mehr kommt irgendwo ein Lichtlein her"
    If Tunnel.Licht = JemandImTunnelDerVerzweifeltIst Then Licht.Aus = True
    Das Sheet referenziere ich so ziemlich überall, das gibt es seit anbeginn der Mappe. Der Witz an der Sache ist, dass es hin und wieder klappt, obwohl sich nichts verändert.
    "Der Visual Basic ist nur so schlau wie der, der davor sitzt" - Na schön! Dann steh ich eben auf!

    "Wenn du denkst es geht nicht mehr kommt irgendwo ein Lichtlein her"
    If Tunnel.Licht = JemandImTunnelDerVerzweifeltIst Then Licht.Aus = True
    Hallo,

    manchmal ist da eine Leerstelle im Namen, welche man übersieht. Dann gibt es gelegentlich Probleme mit Umlaute und Sonderzeichen. Ich habe mir angewöhnt sowas beim Programmieren nicht zu nutzen.
    Gruß
    Peterfido

    Keine Unterstützung per PN!
    ich habe noch nie mit debug gearbeitet und die online hilfen dazu durchschaue ich nicht...
    Ich habe bisher unter Debuggen > Überwachungsfenster die Werte überwacht während ich den ganzen spaß im Einzelschrittmodus durchlaufen habe... aber da die iRows den korrekten Wert haben konnte ich nichts finden. Ich habe jetzt mal versucht ihm einfach sein Sheet genauer zu definieren und hab ThisWorkbook. davor gehauen... Bisher gibt er jetzt keine Mukken... ob es wohl wirklich daran gelegen hat? ich meine, wenn man nur .Sheets und so weiter schreibt geht der meiner Meinung nach doch auch von ThisWorkbook aus, oder nicht?

    Ach ja und könnte mich jemand sagen welche Eigenschaft ich ansprechen muss um bei einer Combo-Box das angezeigte Element entweder auf "" zu setzen oder eine Clear-Methode die aber meine Liste nicht angreift sondern nur das was oben in dem ausgewählten Element steht löscht?
    "Der Visual Basic ist nur so schlau wie der, der davor sitzt" - Na schön! Dann steh ich eben auf!

    "Wenn du denkst es geht nicht mehr kommt irgendwo ein Lichtlein her"
    If Tunnel.Licht = JemandImTunnelDerVerzweifeltIst Then Licht.Aus = True

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Kathleen“ ()

    Hallo,

    Wenn das Direktfenster eingeschaltet ist, kannst Du per

    Visual Basic-Quellcode

    1. Debug.print "Info"
    zwischendurch Werte darin ausgeben, ohne eine MsgBox dauernd zu bestätigen.

    Visual Basic-Quellcode

    1. ComboBox.Listindex=-1
    sollte das sein, was Du suchst.
    Gruß
    Peterfido

    Keine Unterstützung per PN!
    ok... Das mit dem Debug.Print verstehe ich jetzt noch nicht so ganz... also was ist ein Direktfenster? Ist das nicht sowas wie das Überwachungsfenster?
    Listindex kann man nur abfragen, nicht bearbeiten. Ich habe das jetzt über die .Text-Eigenschaft gelöst, denn das Item war ja schon korrekterweise nicht in der liste sondern nur noch oben im Auswahlfenster. Letzteres habe ich somit auf "" gesetzt und da stand folglich nichts mehr. Trotzdem Vielen Dank!

    Der Index Fehler tritt nicht mehr auf, also Schlussfolgere ich, dass es vba einfach gestört hat dass da keine Mappe vorstand...

    LG Kathleen
    "Der Visual Basic ist nur so schlau wie der, der davor sitzt" - Na schön! Dann steh ich eben auf!

    "Wenn du denkst es geht nicht mehr kommt irgendwo ein Lichtlein her"
    If Tunnel.Licht = JemandImTunnelDerVerzweifeltIst Then Licht.Aus = True
    Hallo,

    das Direktfenster gibt es in der IDE unter Ansicht>Direktfenster. Oder STRG+G.
    Evtl. musst Du es etwas größer ziehen, damit dessen Inhalt sichtbar wird.

    Darin kannst Du auch einfache Befehle ausführen und das Ergebnis anzeigen lassen. Quasi wie in einer Konsole auch.

    Im Bild mal ein Beispiel. Ist zwar in Word, gilt aber für Excel und Co. auch.

    Edit:

    Visual Basic-Quellcode

    1. KomboBox.text=""
    fällt auf die Nase, wenn der Style auf Dropdown steht.
    Bilder
    • Direktfenster.jpg

      48,09 kB, 753×478, 275 mal angesehen
    Gruß
    Peterfido

    Keine Unterstützung per PN!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „peterfido“ ()

    Visual Basic-Quellcode

    1. Private Sub cmdMitarbeiterlöschen_Click()
    2. Dim Pfad As String
    3. Dim Mitarbeiter As String
    4. Dim MyWorkbook As Workbook
    5. Dim Mitarbeiternummer As Byte
    6. Mitarbeiter = Mid(cboBestehendenBenutzerAuswählen.Value, 3)
    7. If Left(cboBestehendenBenutzerAuswählen.Value, 1) > 0 Then Mitarbeiternummer = Left(cboBestehendenBenutzerAuswählen.Value, 1)
    8. Pfad = ThisWorkbook.path & "\" & Mitarbeiter & "\" & Mitarbeiter & "-" & Year(Date) & ".xlsx"
    9. If Mitarbeiter = "" Then
    10. MsgBox "Es ist kein Mitarbeiter ausgewählt", vbCritical
    11. Exit Sub
    12. Else
    13. Set MyWorkbook = Workbooks.Open(Pfad)
    14. Select Case MsgBox("Sind Sie sicher, dass der ausgewählte Benutzer gelöscht werden soll?", vbYesNo)
    15. Case vbYes
    16. On Error GoTo Blattexistiertnochnicht
    17. If Not MyWorkbook.Sheets(MonthName(Month(Date))) = 0 Then
    18. MyWorkbook.Sheets.Add.Name = "ErsatzDatenblatt" 'Sollte das Arbeitsblatt das Einzige in der Mappe sein wird hiermit ausgeschlossen, dass ein Fehler auftritt
    19. Application.DisplayAlerts = False 'Alle Meldungen werden automatisch ohne Benutzerrückfragen mit der Defaultantwort beantwortet
    20. MyWorkbook.Sheets(MonthName(Month(Date))).Delete 'Das Sheet mit diesem Namen wird gelöscht
    21. ThisWorkbook.Sheets(Mitarbeiter).Copy After:=MyWorkbook.Sheets("ErsatzDatenblatt") 'Das Sheet wird kopiert und in die Mappe eingefügt
    22. FileSystem.SetAttr Pfad, vbHidden 'Verstecke die Datei
    23. With MyWorkbook 'Alle Anweisungen in der With Schleife werden für das bennante Objekt angewendet
    24. .Sheets("ErsatzDatenblatt").Delete 'Das ErsatzDatenblatt wird gelöscht
    25. .Sheets(Mitarbeiter).Name = MonthName(Month(Date)) 'Das eingefügte Datenblatt wird umbenannt
    26. .Save 'Es wird gespeichert
    27. .Close 'Es wird geschlossen
    28. End With
    29. ThisWorkbook.Sheets(Mitarbeiter).Delete 'Lösche das Mitarbeiterdatenblatt aus der aktuellen Arbeitsmappe
    30. ThisWorkbook.Sheets("Passwörter").Range(Cells(Mitarbeiternummer + 2, 2), Cells(Mitarbeiternummer + 2, 3)).Value = ""
    31. Application.DisplayAlerts = True 'Die Rückfragen werden wieder gestellt
    32. cboBestehendenBenutzerAuswählen.RemoveItem (Mitarbeiternummer) 'Lösche den Mitarbeiter aus der ComboBox
    33. cboBestehendenBenutzerAuswählen.Text = ""
    34. End If
    35. Case vbNo
    36. Exit Sub
    37. End Select
    38. End If
    39. Blattexistiertnochnicht:
    40. ThisWorkbook.Sheets(Mitarbeiter).Copy After:=Workbooks(Pfad).Sheets(MonthName(Month(Date) - 1)) 'Kopiere es und füge es mit dem Namen ein, der vor dem Gleichheitszeichen definiert wird.
    41. MyWorkbook.Save 'Speichere die Datei
    42. MyWorkbook.Close 'Schließe die Datei


    Hey,
    ich habe mal wieder einen Fehler mit dem Index außerhalb des gültigen Bereiches.

    Eigentlich hatte das erstellen und löschen der Tabellenblätter bisher funktioniert, aber spontan wenn er nun den neuen Monat vor der Nase hat will er nicht mehr. VBA springt wie es soll in die Sprungmarke (die ich vorher mit If---Then abgedeckt hatte) aber hat dann keine lust mehr aus dem aktuellen Datum den Monat und dessen Namen auszugeben. Wenn Monat eine Zahl ausgibt sollte man doch -1 rechnen können... Zeitweise sagt er auch einfach, er kennt MonthName nicht.

    Könnt ihr mir da eventuell helfen?
    "Der Visual Basic ist nur so schlau wie der, der davor sitzt" - Na schön! Dann steh ich eben auf!

    "Wenn du denkst es geht nicht mehr kommt irgendwo ein Lichtlein her"
    If Tunnel.Licht = JemandImTunnelDerVerzweifeltIst Then Licht.Aus = True
    Hallo,

    Year, Month und Co vermeide ich. Die sind abhängig von den Regionseinstellungen von Windows. Vor Zahlen baut VBA da immer eine Leerstelle rein, vergleicht aber evtl. tolerant, fällt dann aber später auf die Nase, wenn Zahlen mit Strings kombiniert werden. Ich nutzer immer Format$ bei Strings.

    Visual Basic-Quellcode

    1. debug.Print Format$(now(),"YYYY")
    2. 2017
    3. debug.Print Format$(now(),"YY")
    4. 17
    5. debug.Print year(now())
    6. 2017
    7. debug.Print trim(year(now()))
    8. 2017
    9. debug.Print trim(year(now()))=2017
    10. Wahr
    11. debug.Print year(now())=2017
    12. Wahr
    13. debug.Print month(now())
    14. 4
    15. debug.Print Format$(now(),"MM")
    16. 04
    17. debug.Print Format$(now(),"MMM")
    18. Apr
    19. debug.Print Format$(now(),"MMMM")
    20. April
    21. debug.Print Format$(now(),"HH:NN:SS")
    22. 17:51:40


    NN für die Minuten, da MM schon für den Monat belegt ist.
    Gruß
    Peterfido

    Keine Unterstützung per PN!

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „peterfido“ ()