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

Application.Goto(Reference: Erklärung

Application.Goto(Reference: Erklärung
09.11.2020 16:53:17
Peer
Hallo.
Ich habe durch die tatkräftigen Hilfen im Forum mein Projekt weit gebracht und einiges lernen können.
Leider kann ich folgenden Code (noch) nicht verstehen.

Private Sub lst_Dienstreise_Click()
' bei Klick wird der Datensatz in der Tabelle markiert (frm_Dienstreise auf Showmodal = False   _
_
setzen)
Dim avntAddress As Variant
With lst_Dienstreise
avntAddress = Split(.List(.ListIndex, 1), "|")
'        If .List(.ListIndex, 10) > 0 Then
'            Me.lbl_Status = .List(.ListIndex, 10).Value
'        Else: Exit Sub
'        End If
End With
Call Application.Goto(Reference:=Worksheets(avntAddress(0)).Cells(avntAddress(1), 0))
End Sub
Er soll eigentlich bei Klick auf einen Eintrag in der ListBox den Datensatz im Sheet selektieren.
Noch bleibt der Debugger aber bei folgender Zeile hängen.

Call Application.Goto(Reference:=Worksheets(avntAddress(0)).Cells(avntAddress(1), 0))

Kann mir jemand erklären, was hier gemeint ist?
Vielen Dank
Gruß
Peer

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Application.Goto(Reference: Erklärung
09.11.2020 17:29:46
Nepumuk
Hallo Peer,
die Spalte 0 gibt es nicht. Versuch es so:
Call Application.Goto(Reference:=Worksheets(avntAddress(0)).Cells(avntAddress(1), 1))
Gruß
Nepumuk
AW: Application.Goto(Reference: Erklärung
09.11.2020 18:28:09
max.kaffl@gmx.de
Hallo Peer,
ich habe es dir mal eingebaut:
' **********************************************************************
' Modul: frm_Dienstreisen Typ: Userform
' **********************************************************************

Option Explicit

Private mBaseArray As Variant

Private Sub btn_OK_Click()
    Unload Me
End Sub

Private Sub UserForm_Initialize()
    '############### Variante 1 #####################################################################
    'Dim lngMonth As Long, ialngIndex As Long, lngRow As Long, lngColumn As Long
    'Dim avntValues() As Variant, avntTemp As Variant, vntItem As Variant
    'Dim datReisezeit As Date
    '
    ' For lngMonth = 1 To 2 'auf 12 Monate erhöhen!!!
    ' lngRow = 6
    ' With Worksheets(MonthName(Month:=lngMonth))
    ' Do
    ' lngRow = .Cells(lngRow, 4).End(xlDown).Row 'letzte Zeile Beginn Spalte 4
    ' If lngRow < .Rows.Count Then
    ' ReDim Preserve avntValues(18, ialngIndex)
    ' lngColumn = 0
    ' avntTemp = .Range(.Cells(lngRow, 4), .Cells(lngRow, 18)).Value
    '
    ' For Each vntItem In avntTemp
    ' Select Case lngColumn
    ' Case 2, 6, 9 'BeginnZeit, EndeZeit, Dauer
    ' avntValues(lngColumn, ialngIndex) = Format$(vntItem, "Hh:Nn")
    ' If lngColumn = 9 Then
    ' Select Case vntItem
    ' Case Is < TimeSerial(8, 0, 0)
    ' avntValues(9, ialngIndex) = "00,00 €"
    ' Case Is >= TimeSerial(24, 0, 0)
    ' avntValues(9, ialngIndex) = "24,00 €"
    ' Case Is > TimeSerial(8, 0, 0)
    ' avntValues(9, ialngIndex) = "12,00 €"
    ' Case Else
    ' avntValues(9, ialngIndex) = "Fehler"
    ' Debug.Print vntItem
    ' End Select
    ' End If
    ' Case Else
    ' avntValues(lngColumn, ialngIndex) = vntItem
    ' End Select
    ' lngColumn = lngColumn + 1
    ' Next
    ' ialngIndex = ialngIndex + 1
    ' Else
    ' Exit Do
    ' End If
    ' Loop
    ' End With
    ' Next
    ' lst_Dienstreise.Column = avntValues
    
    '############## Variante 2 ##########################################################################
    
    '----------- ListBox mit Daten von allen Sheets füllen mit Hilfe von ralf_b von herber.de ------ _
        _
        ---------------------------------------

    
    Dim lngMonth As Long, ialngIndex As Long, lngRow As Long
    Dim lngColumn As Long, lngDauer As Long
    Dim datBeginn As Date, datEnde As Date, strBeginnOrt As String
    Dim strEndeOrt As String, strReiseOrt As String
    Dim avntValues() As Variant, avntTemp As Variant, vntItem As Variant
    Dim datAbgabe As Date, datAnnahme As Date, datGezahlt As Date
    
    For lngMonth = 1 To 2 'auf 12 Monate erhöhen!!!
        lngRow = 12
        With Worksheets(MonthName(Month:=lngMonth))
            Do
                
                If ialngIndex = 4 Then MsgBox "x"
                If IsEmpty(.Cells(lngRow + 1, 26).Value) Then
                    lngRow = .Cells(lngRow, 26).End(xlDown).Row
                Else
                    lngRow = lngRow + 1
                End If
                If lngRow < .Rows.Count Then
                    'Festlegung der Listenspalten (hier 8)
                    Redim Preserve avntValues(11, ialngIndex)
                    
                    lngColumn = 0
                    datBeginn = CDate(.Cells(lngRow, "AA")) + CDate(.Cells(lngRow, "AB"))
                    datEnde = CDate(.Cells(lngRow, "AD")) + CDate(.Cells(lngRow, "AE"))
                    lngDauer = DateDiff("h", datBeginn, datEnde)
                    strBeginnOrt = Left(.Cells(lngRow, "AC"), 1)
                    strEndeOrt = Left(.Cells(lngRow, "AF"), 1)
                    datAbgabe = .Cells(lngRow, "AH").Value
                    datAnnahme = .Cells(lngRow, "AI").Value
                    
                    'Werte für Spalten 1-8 aus Spalte 26 bis 32 Sheets(oder 38 für AL)
                    avntTemp = .Range(.Cells(lngRow, 26), .Cells(lngRow, 35)).Value
                    
                    'Array Spaltengröße erhöhen und 2 Spalten hinzufügen
                    Redim Preserve avntTemp(1 To 1, UBound(avntTemp, 2) + 1)
                    
                    avntTemp(1, 7) = .Cells(lngRow, "AE") - .Cells(lngRow, "AB").Value '(Dauer)
                    avntTemp(1, 9) = datAbgabe
                    avntTemp(1, 10) = ""
                    
                    Select Case lngDauer
                        Case Is <= 8 'der Wert <= 8
                            avntTemp(1, 8) = "00,00 €"
                        Case Is >= 24
                            avntTemp(1, 7) = "24:00"
                            If strBeginnOrt = "A" Or strEndeOrt = "A" Then
                                avntTemp(1, 8) = "40,00 €"
                            ElseIf strBeginnOrt = "I" Or strEndeOrt = "I" Then
                                avntTemp(1, 8) = "40,00 €"
                            Else
                                avntTemp(1, 8) = "28,00 €"
                            End If
                        Case Is > 8
                            If strBeginnOrt = "A" Or strEndeOrt = "A" Then
                                avntTemp(1, 8) = "27,00 €"
                            ElseIf strBeginnOrt = "I" Or strEndeOrt = "I" Then
                                avntTemp(1, 8) = "27,00 €"
                            Else
                                avntTemp(1, 8) = "14,00 €"
                            End If
                        Case Else
                            avntTemp(1, 8) = "Fehler"
                            Debug.Print vntItem
                    End Select
                    
                    For Each vntItem In avntTemp
                        Select Case lngColumn
                            Case 2, 5, 7
                                avntValues(lngColumn, ialngIndex) = Format$(vntItem, "Hh:Nn")
                                lngColumn = lngColumn + 1
                            Case Else
                                avntValues(lngColumn, ialngIndex) = vntItem
                                lngColumn = lngColumn + 1
                        End Select
                    Next
                    avntValues(11, ialngIndex) = MonthName(Month:=lngMonth) & "|" & CStr(lngRow) '******************************************
                    ialngIndex = ialngIndex + 1
                Else
                    Exit Do
                End If
            Loop
        End With
    Next
    lst_Dienstreise.Column = avntValues
    '--------- Ende Füllen ListBox ---------------------------------------------------------------
    
    '--------- ComboBox "Monat" mit Monatsnamen vom Sheet füllen ---------------------------------
    Dim j As Integer
    
    'cbx_FilterMonat.Clear
    cbx_FilterMonat.AddItem "alle Monate"
    For j = 1 To 2 'auf 12 Monate ändern
        cbx_FilterMonat.AddItem Worksheets(j).name
    Next j
    cbx_FilterMonat.ListIndex = 0 'ersten Eintrag als Standard
    
    
    '--------- ComboBox "Reisezweck" füllen --------------------------------------------------------
    cbx_FilterZweck.AddItem "alle Reisezwecke"
    
    cbx_FilterZweck.ListIndex = 0
    
    '--------- ComboBox "offene Abrechungen" füllen ------------------------------------------------
    cbx_FilterOffen.AddItem "keine"
    
    cbx_FilterOffen.ListIndex = 0
    
End Sub

Private Sub lst_Dienstreise_Click()
    ' bei Klick wird der Datensatz in der Tabelle markiert (frm_Dienstreise auf Showmodal = False setzen)
    Dim avntAddress As Variant
    With lst_Dienstreise
        avntAddress = Split(.List(.ListIndex, 11), "|")
        If .List(.ListIndex, 9) > 0 And .List(.ListIndex, 10) <= 0 And .List(.ListIndex, 11) <= 0 Then
            Me.lbl_Status = "eingereicht"
        ElseIf .List(.ListIndex, 9) = 0 Then
            Me.lbl_Status = "nicht eingereicht"
        ElseIf .List(.ListIndex, 10) > 0 Then
            Me.lbl_Status = "geprüft"
        ElseIf .List(.ListIndex, 11) > 0 Then
            Me.lbl_Status = "abgerechnet"
        Else
            Exit Sub
        End If
        ' Select Case .List
        ' Case .ListIndex, 9 > 0: Me.lbl_Status = "eingereicht"
        ' Case .ListIndex, 9 = 0: Me.lbl_Status = "nicht eingereicht"
        ' Case .ListIndex, 10 > 0: Me.lbl_Status = "geprüft"
        ' Case .ListIndex, 11 > 0: Me.lbl_Status = "abgerechnet"
        ' End Select
    End With
    Call Application.GoTo(Reference:=Worksheets(avntAddress(0)).Cells(Clng(avntAddress(1)), 26))
End Sub

Gruß
Nepumuk
Anzeige
AW: Application.Goto(Reference: Erklärung
09.11.2020 18:34:47
Peer
Hallo Nepumuk.
Vielen Dank.
Genial.
Aber was macht die eingefügte Zeile?
Gruß
Peer
AW: Application.Goto(Reference: Erklärung
09.11.2020 18:39:10
Nepumuk
Hallo Peer,
die schreibt den Tabellennamen und die Zeile getrennt durch ein Pipe in das Array.
Gruß
Nepumuk
Vielen Dank, Nepumuk, für deine Hilfe (owT)
09.11.2020 18:45:56
Peer
Ist für mich aktuell hohe Mathematik.
AW: Application.Goto(Reference: Erklärung
09.11.2020 18:37:24
onur
Ach - in Spalte 12 waren die benötigten Daten versteckt ! :)
AW: Application.Goto(Reference: Erklärung
09.11.2020 17:30:31
onur
Du bist doch oft genug in diesem Forum dass du eigentlich wissen müstest, das die Aussage "bleibt der Debugger aber bei folgender Zeile hängen" OHNE die Fehlermeldung zu nennen Müll ist.
Cells(avntAddress(1), 0) gibt es nicht, weil es keine Spalte 0 gibt.
Anzeige
AW: Application.Goto(Reference: Erklärung
09.11.2020 17:43:11
Peer
Sorry onur.
"Laufzeitfehler 9 (Index außerhalb des Bereichs"
Gebe ich Spalte 1 eine, sagt das Lokalfenster den Wert der Spalte 2 (in diesem Fall das Datum).
Trotzdem bleibt der Fehler.
Die ListBox hat 8 Spalten, aber egal welche Spaltenzahl ich eingebe, erfolgreich bin ich nicht.
Deshalb wollte ich gern wissen, was die Anweisung aussagt.
Gruß
Peer
AW: Application.Goto(Reference: Erklärung
09.11.2020 17:56:53
onur
Der Code Zerstückelt die zweite Spalte (offenbar - warum auch immer - wurden dort mehrere Daten - durch "|" getrennt - reingequetscht) und nimmt den ZWEITEN Eintrag als Zeilennummer. Welche Spaltennummer, weisst nur du, da du die Datei hast.
Selbst wenn die Zeilennummer korrekt wäre - Splitfunktion spuckt Strings aus, die musst du erst in Long oder Int umwandeln.
Anzeige
AW: Application.Goto(Reference: Erklärung
09.11.2020 17:59:21
Peer
Hallo onur.
Vielen Dank für deine Erklärung.
Gruß
Peer
AW: Application.Goto(Reference: Erklärung
09.11.2020 18:15:19
onur
Verstehe den Code nicht - er versucht z.B. Blatt "Schulung" zu öffnen - aber es gibt kein solches Blatt.
WAS GENAU SOLL DENN JETZT DER CODE MACHEN ?
AW: Application.Goto(Reference: Erklärung
09.11.2020 18:28:31
Peer
Er soll bei Klick in lst_Dienstreise die dazugehörige Zeile im Sheet selektieren.
Wie kommst du auf Blatt "Schulung"?
Ich sende mal die Datei. Ich habe ebenfalls die Splitfunktion rausgenommen, aber es hat keine Einfluss.
Lass dich nicht beirren von meinen Code-Versuchen. In dem genannten Event möchte ich eine Abfrage über Einträge in der ListBox in lbl_Status einbauen. Da bin ich noch am Überlegen, wie ich das bewerkstellige, wenn Einträge vorhanden sind und/oder nicht.
Du kommst im Reiter "Erfassungsbeleg" mit dem Button "Dienstreise" auf die UF.
https://www.herber.de/bbs/user/141439.xlsm
Gruß
Peer
Anzeige
AW: Application.Goto(Reference: Erklärung
09.11.2020 20:44:25
ralf_b
Hallo Peer,
Da du den Code aus einer anderen Verwendung heraus für diese Listbox angepasst haben mußt, kannst du die Adresse der Zeile nicht finden.
Einen Lösungsvorschlag hätte ich. Um die entsprechende Addresse zu erhalten, sollte sie auch in der Listbox in einer oder zwei versteckten(nicht angzeigten) Spalten verfügbar gemacht werden.
Indem du avntValues um 2 Elemente vergrößerst und beim Schleifendurchlauf Tabellenname und Zeilennummer des Datensatzes reinschreibst, ist es später leicht möglich beim Klick die Werte aus der Listbox abzufragen. Wie das geht hast du dir hier erklären lassen wollen.
gruß
RB
Anzeige
AW: Application.Goto(Reference: Erklärung
09.11.2020 18:27:10
onur
Der Code ist bestimmt nicht auf deinem Mist gewachsen.
Irgend Jemand hat die Datei genommen und am Code herumgepfuscht, ohne die geringste Ahnung zu haben.
Z.B. werden die Daten in der ersten Spalte der Listbox durch "/" (Schulung / Seminar / ....) getrennt, aber der Code splittet die Spalte später nach "|", um sie wieder zu trennen.
usw usw
AW: Application.Goto(Reference: Erklärung
09.11.2020 17:59:35
Planlos
Weil nicht sichergestellt ist daß das Array auch die entsprechende Anzahl der Elemente hat welche du mit avntAddress(0) und avntAddress(1) erfragen tust.

190 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige