Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1084to1088
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
Einfügen von bestimmten Blätternnamen in Liste
bestimmten
Hallo zusammen,
hab schon mein nächstes Problem.
Ich habe eine Excel Arbeitsmappe von der aus über eine Vorlage durch Kopieren immer neue Tabellenblätter erstellt werden - für jedes Projekt ein neues Arbeitsblatt (die blätter heißen so wie das jeweilige projekt sprich eine ziffernfolge). Desweiteren habe ich zusätzlich einige weitere Arbeitsblätter für die jeweiligen Abteilungen in die ich eine Liste der aktuellen Projekte - also eine Liste der aktuellen Tabellenblätter - einlesen möchte.
Mein erster Gedanke war, das ganze durch einen CommandButton auf dem jeweiligen Blatt der Abteilung zu machen mit folgendem Code:

Private Sub CommandButton1_Click()
Dim i As Integer
i = 9
For Each sh In ThisWorkbook.Worksheets
i = i + 1
Cells(i, 2) = sh.Name
End If
Next sh
End Sub


Beginne also ab Zelle B10 die Tabellennamen einzufügen - was soweit ja auch klappt.
Problem 1 ist, dass eben die Namen aller Blätter eingelesn werden - ich möchte aber nur die Blätter deren Name einen Ziffernfolge ist. Geht vermutlich mit regulären Ausdrücken am besten, aber davon hab ich nicht die mindeste Ahnung. Problem 2 bei der Lösung ist, dass ich dies für jede Abteilung einzeln machen müsste (zumindest auf dem jeweiligen Blatt immer klicken) was nicht weiter schlimm aber vlt etwas umständlicher ist.
Optimal wäre es wenn bei dieser "Abfrage" in die Spalte C direkt noch ein bestimmter wert aus der Zelle B4 (aus den "Projekttabellenblätern - deren namen in B stehen) eingefügt wird.
Vielen Dank im Vorraus
Grüße

AW: Einfügen von bestimmten Blätternnamen in Liste
29.06.2009 14:01:18
bestimmten
Hallo,

Private Sub CommandButton1_Click()
Dim i As Integer, sh As Worksheet
i = 9
For Each sh In ThisWorkbook.Worksheets
If IsNumeric(sh.Name) Then
i = i + 1
Cells(i, 2) = sh.Name
Cells(i, 3) = sh.Range("B4")
End If
Next sh
End Sub


Gruß
Rudi

AW: Einfügen von bestimmten Blätternnamen in Liste
29.06.2009 14:12:28
bestimmten
Perfekt, perfekt vielen Dank!
Falls es jetz noch eine möglichst einfache Möglichkeit gibt,
dieses Einlesen in die ganzen Abteilungsarbeitsblätter A, B, C ... nicht jeweils durch einen Klick auf einen Commantbtn auf dem jeweiligen Blatt sondern durch klicken auf nur einen Button durchzuführen wäre ich wunschlos glücklich xD
Anzeige
AW: Einfügen von bestimmten Blätternnamen in Liste
30.06.2009 08:17:17
bestimmten
Hab mich jetzt für diese Variante entschieden;

Private Sub CommandButton1_Click()
Dim i As Integer, sh As Worksheet
i = 10
For Each sh In ThisWorkbook.Worksheets
If IsNumeric(sh.Name) Then
If sh.Cells(13, 17) > 0 Then
Worksheets("AbteilungA").Unprotect
Worksheets("AbteilungA").Cells(i, 2) = sh.Name
Worksheets("AbteilungA").Cells(i, 3) = sh.Range("B4")
Worksheets("AbteilungA").Protect
End If
i = i + 1
End If
Next sh
End Sub


Die if-Anweisung erfolgt nacheinander für alle Abteilungen, der if-Block ist also öfter hintereinander.
Nicht jede Abteilung ist an jedem Projekt beteiligt, deswegen will ich einen Eintrag in das Tabellenblatt nur dann vornehmen wenn sie wirklich beteiligt ist (das ganze erfolgt eben über das if).
Was soweit auch gan gut klappt. Das Problem ist nur, dass eben immer eine Zeile leergelassen wird, wenn die Abteilung nicht beteiligt ist. Wie lässt es sich möglichst einfach realisieren, dass eben dies nicht passiert?

Anzeige
VBA-freie Variante
29.06.2009 14:10:40
{Boris}
Hi,
definiere den Namen x mit Bezug auf:
=ARBEITSMAPPE.ZUORDNEN(1+0*JETZT())
Schreibe in A1:
=TEIL(INDEX(x;ZEILEN($1:1));FINDEN("]";INDEX(x;ZEILEN($1:1)))+1;99)
und B1 diese Arrayformel:
{=INDEX(A:A;KKLEINSTE(WENN(ISTZAHL(A$1:A$100+0);ZEILE($1:$100));ZEILEN($1:1)))}
Beide Formeln so weit runterkopieren, wie die Mappe maximal Blätter haben kann.
Spalte A dann noch ausblenden.
Vorteil: Die Blättermatrix aktualisiert sich automatisch.
Grüße Boris
AW: VBA-freie Variante
29.06.2009 14:19:02
Bowl
Ich fürchte ich stell mich grad bisschen dumm an, wie meinst du das mit
"
definiere den Namen x mit Bezug auf:
=ARBEITSMAPPE.ZUORDNEN(1+0*JETZT())
" ?
Danke für die Antwort
Grüße
Anzeige
Namen definieren
29.06.2009 14:24:03
{Boris}
Hi,
sorry - bei "Excel gut" dachte ich, dass das Einfügen von Namen bekannt ist.
Drück Strg+F3, Name: x
Unten hast Du dann: Bezieht sich auf.
Rest wie beschrieben.
Grüße Boris
AW: Namen definieren
29.06.2009 14:35:18
Bowl
Ist auch woanders dran gescheitert...
musste feststellen, richtig schreiben ist von vorteil ;)
Re: Ich werde irgendwann mal schreiben lernen...
29.06.2009 17:46:30
NoNet
Sorry, der Betreff im obigen Beitrag sollte natürlich
Erklärung zu "ARBEITSMAPPE.ZUORDNEN(1)"
heissen !! - Korrektur hier nur damit man es besser im Archiv findet....
Gruß, NoNet
Anzeige
AW: Re: Ich werde irgendwann mal schreiben lernen...
30.06.2009 20:58:59
Konrad
Hi,
wenn du schon versuchst, richtiges Deutsch zu praktizieren, muss es
heißen heißen und nicht heissen.
mfg Konrad D.
Ich bezweifle ja, dass sich...
01.07.2009 12:22:15
NoNet
..."Konrad Duden" hierzu heute noch äussern würde,
In der Sache hast Du Recht, aber ich denke, über solche "Minimalfehler" kann man auch mal hinwegsehen ;-) oder ?
Übrigens : Ich lerne immer noch :-D....
Gruß, NoNet
AW: VBA-freie Variante
29.06.2009 21:37:17
Jörg-HH
Hi Boris,
hab das Bespiel grad mal ausprobiert, weil es mich auch interessert...
der Ausdruck
{=INDEX(A:A;KKLEINSTE(WENN(ISTZAHL(A$1:A$100+0);ZEILE($1:$100));ZEILEN($1:1)))}
was macht denn der eigentlich? In meiner Testmappe stehen da lauter Nullen...
Gruß - Jörg
Anzeige
AW: VBA-freie Variante
30.06.2009 09:41:05
{Boris}
Hi Jörg,
das ist
a) eine Arrayformel: {geschweifte Klammern} nicht mit eingeben - Formeleingabe mit gleichzeitig Strg+Shift+Enter - statt mit Enter allein
b) eine Formel, die nur die numerischen Blattnamen ausliest (das war Bestandteil der Frage) - also Blattnamen wie 123, 15644 etc.
Grüße Boris
AW: Einfügen von bestimmten Blätternnamen in Liste
30.06.2009 11:10:30
bestimmten
Lös des ganze jetzt doch ein wenig anders:
Nummern sowie beschreibung werden schon während des Kopiervorgangs (aus der Vorlage auf die einzelnen Projekttabellenblätter) in die entsprechenden Abteilungstabellenblätter eingefügt.
If Sheets(Blattname).Cells(13, 17) > 0 Then
x = 10
If Sheets("Saegen").Cells(x, 2) = "" Then
Sheets("Saegen").Unprotect
Sheets("Saegen").Cells(x, 2).Value = Sheets(Blattname).Name
Sheets("Saegen").Cells(x, 3).Value = Sheets(Blattname).Cells(4, 2).Value
x = x + 1
Else
Sheets("Saegen").Unprotect
Sheets("Saegen").Cells((x + 1), 2).Value = Sheets(Blattname).Name
Sheets("Saegen").Cells((x + 1), 3).Value = Sheets(Blattname).Cells(4, 2).Value
End If
x = x + 1
Worksheets("Saegen").Protect
End If
Das ganze soll wie schon gesagt in Zeile 10 Anfangen (Nummer in B, Bezeichnung in C). Schein da was falsch im Kopf zu haben - oder von andern Sprachen vlt "verseucht" keine ahnung - auf jeden Fall überschreibt es mir immer die 2. Zeile.
Frage ist aber v.a. Wie ich des ganze dann abkürzen kann, da es ja in die Blätter mehrerer Abteilungen eingefügt wird und dadurch einiges zusammenkommt?
Grüße
Anzeige
AW: Einfügen von bestimmten Blätternnamen in Liste
30.06.2009 13:08:57
bestimmten
Haken bei "Frage noch offen" wohl vergessen gehabt ^^
Wo ich gerade schon nochmal hierbin:
Auf den erstellten/gespreicherten Formularen zu den Aufträgen
habe ich mit

Sub Löschen_Button()
Dim tarCell As Range
Set tarCell = Range("L5:N6")
'wohin soll der Button
ActiveSheet.Buttons.Add(0, 0, 0, 0).Select
With Selection
'Eintragung der Bezugszelle
.Top = tarCell.Top
.Left = tarCell.Left
.Height = tarCell.Height
.Width = tarCell.Width
.Text = "Auftrag löschen"
.OnAction = "Modul1.auftragloeschen"
End With
ActiveSheet.Protect
Sheets("Vorlage").Activate
End Sub


einen Button erzeugt (ebenfalls während dem Vorgang: Kopieren aus Vorlage und einfügen in eigenes Sheet), der sowohl aus allen Sheets der Abteilungen den entsprechenden eintrag löschen soll, wie auch das Tabellenblatt zu dem Projekt).


Sub auftragloeschen()
Application.DisplayAlerts = False
If MsgBox("Das Löschen hätte zur Folge, dass dieser Auftrag auch in der Gesamtplanung nicht  _
mehr Berücksichtigt werden würde." & vbCrLf & "Wollen sie wirklich löschen?", vbQuestion + vbOKCancel) = vbOK Then
tmp = ActiveSheet.Name
Sheets("Saegen").Activate
For y = 10 To 200
If ActiveSheet.Cells(y, 2) = tmp Then
Rows("y:y").Select
Selection.Delete
Sheets("tmp").Activate
ActiveSheet.Delete
End If
Next y
End If
End Sub


Das ganze klappt bis zum markieren der entsprechenden zeile ganz gut, löscht sie dann auch nicht mehr etc...
Grüße

Anzeige
AW: Einfügen von bestimmten Blätternnamen in Liste
01.07.2009 08:57:03
bestimmten
Hab jetzt woanders den tipp erhalten, das löschen so zu gestalten:
Option Explicit

Sub auftragloeschen()
Dim WS As Worksheet
If MsgBox("Das Löschen hätte zur Folge, dass dieser Auftrag auch in der Gesamtplanung nicht  _
mehr Berücksichtigt werden würde." & vbCrLf & "Wollen sie wirklich löschen?", vbQuestion + vbOKCancel) = vbOK Then
tmp = ActiveSheet.Name
For Each WS In Worksheets
If InStr(WS.Name, "Abteilnung_") = 1 Then
With WS
For y = 10 To .Cells(.Rows.Count, 2).End(xlUp).Row '200
If .Cells(y, 2) = tmp Then
.Unprotect
.Rows(y).Delete 'Shift:=xlUp
.Protect
Application.DisplayAlerts = False
Sheets("tmp").Delete
Application.DisplayAlerts = True
Exit For 'nach dem löschen kannnst du ja die Schleife verlassen -  _
kommt ja nr einmal vor, oder?
End If
Next y
End With
End If
Next WS
End If
Sheets("Vorlage").Activate
End 

Sub
If Sheets(Blattname).Cells(13, 17) > 0 Then
bei mir
kontrolliert ja einen Wert ob die entsprechende Abteilung überhaupt mit dem Auftrag zu tun hat,  _
also zeile 13 für Abteilung 1, Zeile 14 für Abteilung 2 usw...
Gibt es eine möglichkeit, das ganze für das Einfügen in die Tabellenblätter ähnlich zu  _
gestalten?

Anzeige
Probleme erledigt owT
01.07.2009 10:37:32
Bowl
.

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige