Live-Forum - Die aktuellen Beiträge
Datum
Titel
17.04.2024 18:57:33
17.04.2024 16:56:58
Anzeige
Archiv - Navigation
1136to1140
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
Daten in Tabellenblätter aus Übersicht
Thomas
Hallo zusammen,
dank der Unterstützung dieses Forums habe ich eine Excel Datei mit vielen Tabellenblättern und einer Übersicht als Gesamttabellenblatt schaffen können.
In diesem Gesamtblatt werden zur Analyse einzelne Zellen ausgelesen und in Zeilen dargestellt.
Dies erfolgt mittels:
Function Tabellenblatt(SheetNr As Integer) As String
If SheetNr  Worksheets.Count Then 'Wenn Blattnummer ungültig, dann
Tabellenblatt = ""                              'leeren String zurückgeben
Else
Tabellenblatt = Worksheets(SheetNr).name 'Name des Blattes als Funktionsergebnis
End If
End Function
Dann werden über =INDIREKT("'" & A5 & "'!B5") die einzelnen Zellen ausgelesen
Nun würde ich gern in die Zellen BC15, BC16 der einzelnen Tabellenblätter usw Werte aus dem Gesamtblatt aus Spalte EO, EQ usw wieder zurücktragen lassen. Dies am besten per Schaltfläche das er nicht permanent die Werte übernimmt.
Dies wollte ich über den folgenden Code machen:
Private Sub CommandButton7_Click()
Dim zeile As Long
On Error GoTo ERRORHANDLER
If Not Intersect(Target, [EO5:EV28]) Is Nothing Then
For zeile = Target.Row To Target.Row + Target.Rows.Count - 1
With Sheets(Cells(zeile, 1).Text)   'Die Tabelle aus Spalte "A"
.Range("BC15") = Cells(zeile, 145)
.Range("BC17") = Cells(zeile, 147)
.Range("BC19") = Cells(zeile, 148)
.Range("BC22") = Cells(zeile, 151)
.Range("BC20") = Cells(zeile, 149)
.Range("BC23") = Cells(zeile, 152)
.Range("BC21") = Cells(zeile, 150)
End With
Resume01:
Next
End If
Exit Sub
ERRORHANDLER:
Resume Resume01
End Sub

Leider passiert hier nichts und ich bräuchte Unterstützung!
Danke, Tom
Was ist das Objekt TARGET in diesem SUB ?
16.02.2010 15:06:15
NoNet
Hallo Tom,
Du verwendest das Schlüsselwort TARGET in Deinem SUB, doch das ist hier überhaupt nicht definiert (daher "NICHTS").
Das Objekt TARGET wird gewöhnlicherweise in einigen Excel Ereignismakros verwendet, in denen es bereits beim Aufruf des Makros definiert ist (z.B. markierte oder geänderte Zellen) :
Private Sub Worksheet_Change(ByVal Target As Range)
'Hier ist TARGET der geänderte Bereich
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'Hier ist TARGET der markierte Bereich
End Sub
Was sollte denn TARGET Deiner Meinung nach sein ? - Verwechselst Du es etwa mit SELECTION (=aktuell markierte Zellen) ?
Gruß, NoNet
Anzeige
du nimmst mir die Worte ...
16.02.2010 15:11:06
Renee
aus dem Mund, noch bevor ich sie ausgesprochen habe... NoNet ;-))
AW: Was ist das Objekt TARGET in diesem SUB ?
16.02.2010 15:22:38
Thomas
Hallo,
also hier muss ich ehrlich gestehen hören meine VBA Kenntnisse vollends auf, daher kann ich mir dies auch nicht erklären.
Geschehen soll ja nur das im Bereich EO5:EV28 Werte stehen welche dann in die aufgeführten Zellen eingetragen werden. Den Code hatte ich wie beschrieben hier aus dem Forum.
Damals war dieser nicht für eine Schaltfläche gedacht sondern stand in der Arbeitsmappe. In meiner Blauäuglichkeit dachte ich einfach ich kann diesen einfach einer Schaltfläche zuweisen
Danke, Tom
AW: Daten in Tabellenblätter aus Übersicht
16.02.2010 15:08:14
Renee
Hi Tom,
Ich werde weder aus dem Code, noch aus der Aufgabenstellung klug.
Auf alle Fälle, können
 If Not Intersect(Target, [EO5:EV28]) Is Nothing Then
.... Target.Row ....

nicht funktionieren, den Target ist nicht definiert. Dieser Rangebereich steht typischerweise für Event-Prozeduren (Change, SelectionChange) zur Verfügung aber nicht in privaten Sub's wie deinem Button_Click.
Arbeite grundsätzlich mit Option Explicit als erste Codezeile in allen Modulen. Das weist dich schneller (bereits vor der Ausführung) auf mögliche Fehlerquellen im Code hin.
Am besten erklärst du dein Problem mit einer Beispielmappe.
GreetZ Renée
Anzeige
AW: Daten in Tabellenblätter aus Übersicht
16.02.2010 15:44:15
Thomas
Hallo,
ich glaube ich hab mich hier selber in den Codeschnipseln verirrt. Ich hab noch diesen Teil gefunden der so denke ich der richtige ist:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [AA5:AA400]) Is Nothing Then
'Bei einer Eingabe im Bereich "AA5:AA400" wird in das
'Tabellenblatt welches in Spalte "A" der entsprechenden Zeile
'steht, in "B7" der Wert aus "AAx" 'geschrieben, wobei das "x"
'für die entsprechende Zeile steht!
On Error GoTo ERRORHANDLER
With Sheets(Cells(Target.Row, 1).Text)   'Die Tabelle aus Spalte "A"
.Range("B7") = Cells(Target.Row, 27) '"OL"
End With
End If
ERRORHANDLER:  'falls Tabelle nicht gefunden
End Sub
Wie kann ich den nun auf ein Button legen?
Vielen Dank, Tom
Anzeige
Die Frage ist doch anders zu stellen:
16.02.2010 15:52:25
Renee
Thomas,
Was soll gemacht werden, wenn du auf den Button Klickst ?
Da kein Target zur Verfügung steht, d.h. der Code nicht wissen kann wo was verändert wurde, aus welcher Zeile soll den die Spalte AA in die Zelle B7 des ermittelten Tabelleblatts geschrieben werden?
GreetZ Renée
AW: Die Frage ist doch anders zu stellen:
16.02.2010 16:20:05
Thomas
Hallo,
erstmal Danke für die Geduld!
Also damals war es irgendwie so das wenn eine Eingabe in die Spalte 27 der jeweiligen Zeile ein Eintrag stattgefunden hat, dieser in das Tabellenblatt in die Zelle B7 eingetragen wurde, dies permanent und nicht auf Aufforderung per Klick oder ähnlichens.
Nun würde ich dies gern auch so machen, aber erst bei Betätigung einer Schaltfläche.
Könnte dann nicht die Nennung des Bereichs vernachlässigt werden, sondern lediglich die "Anweisung" erfolgen, nimm die Spalte 27, vergleiche mit Spalte A und schreibe in das Tabellenblatt in Zelle B7.
Das mit dem Target verstehe ich leider überhaupt nicht, da eigentlich VBA nur mit Recorder und nur Kleinstmengen mehr durch probieren...
Vielen Dank, Tom
Anzeige
Deine Antwort ist nicht befriedigend,...
16.02.2010 16:27:30
Renee
schliesslich kann VBA nicht eine ganze Spalte in eine Zelle schreiben, Tom
...nimm die Spalte 27...schreibe in das Tabellenblatt in Zelle B7
du hast meine Frage also nicht beantwortet, denn die lautete
aus welcher Zeile soll den die Spalte AA...
Vielleicht wäre ein anderer Ansatz:
Einen ToogleButton auf das Blatt zu legen und im Change Ereignis den Zustand abzufragen, so das nur geschrieben wird, wenn der Toggle-Button 'ein'geschaltet ist ?
GreetZ Renée
Versuche es mal anders
16.02.2010 16:48:38
Thomas
also in der Spalte A werden die Blattnamen aller Tabellenblätter übernommen, hier definiert sich also das jeweilige Tabellenblatt.
zBsp:
A...AA
Kunde1 Wert1
Kunde2 Wert2
Kunde3 Wert3
Nun sollte der Wert aus der 27ten Spalte (AA) in das jeweilige Tabellenblatt geschrieben werden, also nicht die gesamte Spalte sondern nur dem Tabellenblatt zugehöriger Wert.
Das mit nem Abfrageschalter würde sicherlich auch gehen, nur auch dafür bräuchte ich Hilfe.
Danke, Tom
Anzeige
AW: Versuche es mal anders
16.02.2010 17:00:20
Renee
Hi Tom,
Versuch's mal mit diesem Code, er gehört in das Tabellenblattt mit deinem Button.
Private Sub CommandButton7_Click()
Dim lngRow As Long
For lngRow = 2 To Cells(Rows.Count, 1).End(xlUp).Row
With Sheets(Cells(lngRow, 1).Text)
.Range("BC15") = Cells(lngRow, 145)
.Range("BC17") = Cells(lngRow, 147)
.Range("BC19") = Cells(lngRow, 148)
.Range("BC22") = Cells(lngRow, 151)
.Range("BC20") = Cells(lngRow, 149)
.Range("BC23") = Cells(lngRow, 152)
.Range("BC21") = Cells(lngRow, 150)
End With
Next lngRow
End Sub

GreetZ Renée
Laufzeitfehler 9
16.02.2010 17:17:11
Thomas
Hallo Renée,
leider Laufzeitfehler 9. Index außerhalb des gültigen Bereiches
Beim Debuggen dann die Zeile "With Sheets(Cells(lngRow, 1).Text)" gelb
Tom
Anzeige
AW: Laufzeitfehler 9
16.02.2010 19:24:23
robert
hi,
steht ab zeile 2 in spalte A ein blattname?
wenn ja, sollte es funktionieren
gruß
robert
Startzeile von 2 auf 5 erhöhen
16.02.2010 20:21:01
2
Tom,
Anscheinend wird hier primär Code konsumiert, aber nicht verstanden. Ändere die Codezeile:

For lngRow = 5 To Cells(Rows.Count, 1).End(xlUp).Row

GreetZ Renée
nicht so ätzend :-)
17.02.2010 08:44:27
robert
Hi Reneé,
ich habe es doch ausprobiert und es hat funktioniert.
wenn das problem ein anderes war-ok.
und code konsumieren ist auch nicht verboten ;-)
gruß
robert
Wollte nicht gegen dich ätzen ;-)) (owT)
17.02.2010 15:43:47
Renee

..sorry,dann hab ich's falsch verstanden :-)) -owT
17.02.2010 19:00:02
robert

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige