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

VBA Fehler: Index ausserhalb gültigen Bereichs

VBA Fehler: Index ausserhalb gültigen Bereichs
27.07.2013 10:19:08
Bernd
Hallo zusammen,
in Kundenliste sollen Daten erfasst werden, immer in der nächsten freien Zeile. Daten kommen von Tabelle "Person & Objekt". Dies habe ich sonst immer durch nachfolgenden Code erledigt. Nur jetzt kommt der besagte Fehler "Index ausserhalb gültigen Bereichs". Und der Debugger hält in der Zeile "Set wksZ = Worksheets("Kundenliste")" an.
Private Sub cmdPersonendaten_an_Liste_Click()
   Dim lngNewR As Long
   Dim wksQ As Worksheet
   Dim wksZ As Worksheet
   Set wksQ = Worksheets("Person & Objekt")
   Set wksZ = Worksheets("Kundenliste")
   lngNewR = wksZ.Cells(wksZ.Rows.Count, 12).End(xlUp).Row + 1
    With wksZ
        .Cells(lngNewR, 1) = wksQ.Cells(5, 4)   'KdNr 
        .Cells(lngNewR, 2) = wksQ.Cells(6, 4)   'Anrede 
        .Cells(lngNewR, 3) = wksQ.Cells(7, 4)   'Vorname 
        .Cells(lngNewR, 4) = wksQ.Cells(8, 4)   'Name 
        .Cells(lngNewR, 5) = wksQ.Cells(9, 4)   'geb. 
        .Cells(lngNewR, 6) = wksQ.Cells(10, 4)  'Strasse 
        .Cells(lngNewR, 7) = wksQ.Cells(11, 4)  'PLZ 
        .Cells(lngNewR, 8) = wksQ.Cells(12, 4)  'Ort 
        .Cells(lngNewR, 9) = wksQ.Cells(13, 4)  'Vorwahl 
        .Cells(lngNewR, 10) = wksQ.Cells(14, 4) 'Telefon 
        .Cells(lngNewR, 11) = wksQ.Cells(15, 4) 'Mobil 
        .Cells(lngNewR, 12) = wksQ.Cells(16, 4) 'Email 
    End With
End Sub
Kann mir jemand helfen?
Gruß
Bernd

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Fehler: Index ausserhalb gültigen Bereichs
27.07.2013 10:27:21
ransi
Hallo
Der Fehler besagt das es kein Worksheets("Kundenliste") gibt.
ransi

AW: VBA Fehler: Index ausserhalb gültigen Bereichs
27.07.2013 10:47:44
Bernd
Hallo ransi,
ist mir das peinlich, hatte zwar geprüft, aber übersehen, dass die Tabelle falsch geschrieben war und zwar anstatt "Kundenliste" "Kundensliste".
Peinlich, peinlich. Danke dir sehr für deinen Hinweis ☺ ☺ ☺
Gruß
Bernd

AW: VBA Fehler: Index ausserhalb gültigen Bereichs
27.07.2013 11:02:00
Luschi
Hallo Bernd,
genau aus diesem grund benutze ich nicht mehr die persönlich verschönerten Tabellennamen, sondern nur noch die Vba-Codenamen.
Also statt:
Worksheets("Mein schönster Tag").Range("A6") nur noch
Tabelle6.Range("A6")
Gruß von Luschi
aus klein-Paris

Anzeige
...Was sehr schnell in d.Hose gehen kann, wenn ...
27.07.2013 11:23:24
Luc:-?
…man mit mehreren Mappen gleichzeitig arbeitet, Luschi!
Deshalb ändere ich die StandardInternNamen bei VB-Projekten, so sind sie eindeutig.
Gruß + schöheiWE, Luc :-?

AW: ...Was sehr schnell in d.Hose gehen kann, wenn ...
28.07.2013 09:25:09
Luschi
Hallo Luc,
damit bei mir nichts in die Hose geht, mache ich das bei mehreren gleichzeitig geöffneten AM so: _

Sub test2()
Dim wb1 As Workbook, wb2 As Workbook
Dim ws1 As Worksheet, ws2 As Worksheet
Set wb1 = ThisWorkbook
Set wb2 = Workbooks("86192.xlsx")
Set ws1 = sucheTabelle(wb1, "Tabelle1")
Debug.Print ws1.Name
Debug.Print ws1.Parent.Name
Set ws2 = sucheTabelle(wb2, "Tabelle1")
Debug.Print ws2.Name
Debug.Print ws2.Parent.Name
'usw.
End Sub
Private Function sucheTabelle(ByVal xWb As Workbook, ByVal xTab As String) As Worksheet
Dim ws As Worksheet
For Each ws In xWb.Worksheets
If ws.CodeName = xTab Then
Set sucheTabelle = ws
Exit For
End If
Next ws
Set ws= Nothing
End Function
Die Fehler-Routinenerkennung lasse ich hier mal außen vor.
Gruß von Luschi
aus klein-Paris

Anzeige
Ändern der InternNamen wäre aber einfacher! ;-)
29.07.2013 15:36:01
Luc:-?
Gruß Luc :-?

AW: Ändern der InternNamen wäre aber einfacher! ;-)
29.07.2013 20:24:25
Luschi
Hallo Luc,
aber eben in vba auch fast tötlich!
Gruß von Luschi
aus klein-Paris

Wieso fast tödlich? Mach'ich oft! Gruß owT
30.07.2013 03:31:51
Luc:-?
:-?

AW: VBA Fehler: Index ausserhalb gültigen Bereichs
27.07.2013 11:24:19
Bernd
Hallo Luschi,
schön wieder von dir zu hören. Werde deinen Rat jetzt gleich mal umsetzen.
Melde mich später wieder, eventl. auch erst nächste Woche, mal sehen, wie weit ich komme.
Lasse bitte dein wachsames Auge auf meinen Beitrag.
Gruß
Bernd

@Luschi und Luc
27.07.2013 11:30:50
Bernd
Hallo zusammen,
Hier mein Code, den ich als VBA Laie zusammen gebastelt habe. Wie und wo kann er verändert werden damit die Konflikte gar nicht erst entstehen. Ich hatte immer eine neue Zahl drangehängt.
Hier mein Code:
Private Sub cmdPersonendaten_an_Liste_Click()
   Dim lngNewR As Long
   Dim wksQ As Worksheet
   Dim wksZ As Worksheet
   Set wksQ = Worksheets("Person & Objekt")
   Set wksZ = Worksheets("Kundenliste")
   lngNewR = wksZ.Cells(wksZ.Rows.Count, 12).End(xlUp).Row + 1
    With wksZ
        .Cells(lngNewR, 1) = wksQ.Cells(5, 4)   'KdNr 
        .Cells(lngNewR, 2) = wksQ.Cells(6, 4)   'Anrede 
        .Cells(lngNewR, 3) = wksQ.Cells(7, 4)   'Vorname 
        .Cells(lngNewR, 4) = wksQ.Cells(8, 4)   'Name 
        .Cells(lngNewR, 5) = wksQ.Cells(9, 4)   'geb. 
        .Cells(lngNewR, 6) = wksQ.Cells(10, 4)  'Strasse 
        .Cells(lngNewR, 7) = wksQ.Cells(11, 4)  'PLZ 
        .Cells(lngNewR, 8) = wksQ.Cells(12, 4)  'Ort 
        .Cells(lngNewR, 9) = wksQ.Cells(13, 4)  'Vorwahl 
        .Cells(lngNewR, 10) = wksQ.Cells(14, 4) 'Telefon 
        .Cells(lngNewR, 11) = wksQ.Cells(15, 4) 'Mobil 
        .Cells(lngNewR, 12) = wksQ.Cells(16, 4) 'Email 
    End With
   Dim lngNewR1 As Long
   Dim wksQ1 As Worksheet
   Dim wksZ1 As Worksheet
   Set wksQ1 = Worksheets("Person & Objekt")
   Set wksZ1 = Worksheets("Objektliste")
   lngNewR1 = wksZ1.Cells(wksZ.Rows.Count, 8).End(xlUp).Row + 1
    With wksZ1
        .Cells(lngNewR1, 1) = wksQ1.Cells(5, 4)    'KdNr 
        .Cells(lngNewR1, 2) = wksQ1.Cells(20, 4)   'Objektart 
        .Cells(lngNewR1, 3) = wksQ1.Cells(21, 4)   'Wfl. qm 
        .Cells(lngNewR1, 4) = wksQ1.Cells(22, 4)   'Grundstück qm 
        .Cells(lngNewR1, 5) = wksQ1.Cells(23, 4)   'Strasse 
        .Cells(lngNewR1, 6) = wksQ1.Cells(24, 4)   'PLZ 
        .Cells(lngNewR1, 7) = wksQ1.Cells(25, 4)   'Ort 
        .Cells(lngNewR1, 8) = wksQ1.Cells(26, 4)   'Baujahr 
    End With
   Dim lngNewR2 As Long
   Dim wksQ2 As Worksheet
   Dim wksZ2 As Worksheet
   Set wksQ2 = Worksheets("Aufstellung EA")
   Set wksZ2 = Worksheets("Einkommen")
   lngNewR2 = wksZ2.Cells(wksZ.Rows.Count, 8).End(xlUp).Row + 1
    With wksZ2
        .Cells(lngNewR2, 1) = Worksheets("Person & Objekt").Cells(5, 4)    'KdNr 
        .Cells(lngNewR2, 2) = wksQ2.Cells(4, 4)    'Nettoeinkommen 
        .Cells(lngNewR2, 3) = wksQ2.Cells(5, 4)    'Kindergeld 
        .Cells(lngNewR2, 4) = wksQ2.Cells(6, 4)    'Sonst. Einnahmen 
        .Cells(lngNewR2, 5) = wksQ2.Cells(12, 4)   'Miete 
        .Cells(lngNewR2, 6) = wksQ2.Cells(13, 4)   'Mietnebenkosten 
        .Cells(lngNewR2, 7) = wksQ2.Cells(14, 4)   'Lebenshaltungskosten 
        .Cells(lngNewR2, 8) = wksQ2.Cells(15, 4)   'Sonst. Ausgaben 
    End With
End Sub

Anzeige
AW: @Luschi und Luc
27.07.2013 15:09:18
Matze
Hi Bernd,
es gibt doch da keine Konflikte, solange deine "Blattnamen" korrekt sind und auch "vorhanden sind"
die Zeilen:
Dim wksQ1 As Worksheet
Set wksQ1 = Worksheets("Person & Objekt")
kannst du löschen, da oben dieses Blatt doch schon richtig mit wksQ referenziert wurde.
dafür muss dann eine Änderung hier gemacht werden:
With wksZ1
.Cells(lngNewR1, 1) = wksQ1.Cells(5, 4) 'KdNr
.Cells(lngNewR1, 2) = wksQ1.Cells(20, 4) 'Objektart
.Cells(lngNewR1, 3) = wksQ1.Cells(21, 4) 'Wfl. qm
.Cells(lngNewR1, 4) = wksQ1.Cells(22, 4) 'Grundstück qm
.Cells(lngNewR1, 5) = wksQ1.Cells(23, 4) 'Strasse
.Cells(lngNewR1, 6) = wksQ1.Cells(24, 4) 'PLZ
.Cells(lngNewR1, 7) = wksQ1.Cells(25, 4) 'Ort
.Cells(lngNewR1, 8) = wksQ1.Cells(26, 4) 'Baujahr
End With
ALLE wksQ1 durch wksQ ersetzen !!
Ersparniss im Code 2 Zeilen,...nun viel Spaß beim umschreiben
Matze

Anzeige
AW: @Luschi und Luc
27.07.2013 15:24:15
Bernd
Hallo Matze,
vielen Dank für deine Hilfe ☺ ☺ ☺
Kurze Frage noch: wie muss ich den Code ändern, um zu prüfen, ob der Datensatz schon vorhanden ist und keine doppelten Einträge entstehen?
Gruß
Bernd

AW: @Luschi und Luc
27.07.2013 16:26:29
Matze
Hallo Bernd,
ich weis jetzt nicht genau was du meinst, der Datensatz besteht aus mehreren TextBoxen die du auslesen tust. Das funktioniert mit deinem Code bisher. Eventuell meinst du , das nach der Eingabe sich die TextBoxen leeren? Andere Frage dazu wie werden die denn befüllt? "manuell" ?
Kannst du deine Datei nicht einfach hier einstellen, mit Mustern wie du es haben möchtest.
Ich bin eh noch nicht gut in VBA einer der Profis wird da dann eh drüber schauen.
Matze
PS.: Deine Beiträge wenn du noch Fragen hast solltest du als "offen" markieren:
Dazu dort wo du auch die Eingaben machst ist rechts neben Passwort ein Kästchen dafür da.

Anzeige
AW: @Luschi und Luc
29.07.2013 13:39:56
Bernd
Hallo Matze,
Danke für deine Hilfe.
Datei einstellen ist schwierig, da schon Originaldaten enthalten sind. Ich glaube das eine VBA-Profi in meinem geposteten Code sehen kann, wo die Abfrage, ob Datensatz schon vorhanden, eingesetzt werden muss.
Welcher VBA-Profi könnte mir dabei helfen?
Gruß
Bernd

Offen - Bitte Profi in Sache VBA schauen!
29.07.2013 14:04:58
Matze
Hallo Bernd,
hab jetzt den Beitrag auf offen gestellt, einer der Profis wird sich das schon ansehen, eventuell fcs(Franz) oder auch Jeder Andere.
ein wenig Geduld musst du mitbringen.
Matze
PS.:
du kannst , wenn du weitere Fragen hast, deine Beiträge selbst auf "offen" stellen.
Dies machst du dort wo du auch den Beitrag schreibst(oder Antwortest).
Dort gibt es ein "Kästchen" gleich neben Passwort, Haken rein , fertig

Anzeige
Jetzt-Offen - Bitte Profi in Sache VBA schauen!
29.07.2013 17:18:30
robert

Oje, offen!
30.07.2013 03:33:11
Luc:-?
:-?

55 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige