Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
788to792
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
788to792
788to792
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

VBA Probleme

VBA Probleme
03.08.2006 16:25:05
Jeanette
Guten Abend an alle Experten,
habe da eine Frage, ob dies überhaupt möglich bzw. lösbar ist. Ich habe da eine Excelmappe mit etwa 50 Blätter. Die Blattnamen, sind die Namen meiner Mitarbeiter und Alphabetisch gereiht.
Das aller erste Blatt, ist ein Übersichtsblatt mit verschiedenen Funktionen und nennt sich „Startseite“.
Die letzte 2 Blätter nennen sich „Leer“ und „Leer 01“ und dienen mir als Vorlagen wenn ein neues Blatt erstellt wird.
Nun zu meiner eigentlichen Frage.
Ist es machbar das ich auf der Startseite ein Dropdownmenü mache mit den Blattnamen?
Zu beachten wäre, sollte ich ein neues Blatt erstellen bzw. ein altes löschen, so müsste natürlich die Dropdownliste auch aktualisiert werden.
Ich möchte dies ändern weil das ständige hin- und herscrollen in der horizontalen Leiste langsam aber sicher umständlich wird.
So, nun zu meiner 2. Frage:
Ich habe folgende Codes erstellt:

Sub Leer()
Sheets("Leer").Select
Sheets("Leer").Copy After:=Sheets(1)
Range("A40").Select
ActiveSheet.Unprotect Password:="9754"
End Sub


Sub Leer01()
Sheets("Leer 01").Select
Sheets("Leer 01").Copy After:=Sheets(1)
Range("A40").Select
ActiveSheet.Unprotect Password:="9754"
End Sub

Kann mir bitte jemand den Code so umbauen bzw. verändern das wenn ich auf meinen Button auf der Startseite klicke zuerst eine Abfrage kommt,
„Welcher Name soll verwendet werden?“
Danach sollte das Blatt erstellt und so benannt werden, wie ich eben den Namen angegeben habe, und als letztes müsste es auch alphabetisch an der richtigen Stelle der Blattregisterkarten gereiht sein. Zu beachten hiebei wäre nur, Blatt 1 und die letzten beiden Blätter (siehe Beschreibung oben) müssten vom Prozess ausgeschlossen sein.
Zum leichteren Verständnis ein kleines Beisbiel:
1) Ich muss nun ein neues Blatt für einen Mitarbeiter anlegen.
2) Der Name des Mitarbeiters ist MUSTER.
3) Ich gehe nun auf die Startseite und klicke auf „Leer“ (oder Leer 01)
4) Nun sollte sich ein Abfragefenster öffnen, welches mich fragt: „Welcher Name soll verwendet werden?“
5) Dann sollte ich den Namen eingeben können, also MUSTER
6) Wenn ich dann auf OK klicke, sollte ein Blatt erstellt werden; welches den Namen MUSTER trägt
7) Dieses Blatt sollte aber auch automatisch nach dem Alphabet gereiht werden, wobei das 1. und die letzten 2 Blätter nicht miteinzubeziehen wären. Also richtig wäre hierbei, das Blatt MUSTER zwischen L und N.
So, jetzt habe ich wahrscheinlich meine Wunschliste ins unermessliche gesteigert, aber Wünschen darf man sich ja alles, LOL.
Spass beiseite, ich hoffe es sind meine Probleme Lösbar und mir kann da jemand helfen da ich mich im VBA nur ganz wenig auskenne bzw. wenn ich was mache, macht das ja immer der Rekorder für mich und obiger Wunsch übersteigt leider mein Wissen.
Wenn es für meine Helfer leichter ist, wenn das 1. Blatt ganz am Ende ist wäre es auch egal, selbiges gilt auch für die letzten beiden Blätter, wenn sie ganz vorne wären.
Ich hoffe meine Erklärungen sind verständlich (und auch Lösbar). Da ich erst morgen wieder arbeiten gehe, und die hier Erhaltene Hilfe erst morgen Testen kann, kann ich mich leider auch morgen erst wieder melden ob es funktioniert, vorausgesetzt natürlich, ich bekomme heute noch Hilfe, sonst gehts erst am Montag wieder.
Ich bedanke mich bei allen Profis, wünsche einen schönen Donnerstag Abend
und sage allen Baba.
Gruss Jeanette

19
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Probleme
03.08.2006 16:57:04
u_
Hallo,
in Tabelle1 eine Combobox einfügen. Code im Klassenmodul der Tabelle:

Private Sub ComboBox1_Change()
Sheets(ComboBox1.Value).Select
End Sub


Private Sub Worksheet_Activate()
Dim i As Integer
With Sheets(1).ComboBox1
.Clear
For i = 1 To Worksheets.Count - 3
.AddItem Worksheets(i).Name
Next
End With
End Sub

Code zu Kopieren von 'Leer':
Sub leer()
Dim StrName As String
Dim wks As Worksheet
Dim i As Integer
StrName = InputBox("Neuer Name?")
If StrName "" Then
Sheets("Leer").Copy after:=Sheets(1)
Set wks = ActiveSheet
wks.Name = StrName
Call prcSortieren(wks)
End If
End Sub
Sub prcSortieren(wks As Worksheet)
Dim i As Integer
For i = 2 To Worksheets.Count - 2
If Sheets(i).Name > wks.Name Then
wks.Move before:=Sheets(i)
Exit Sub
End If
Next
wks.Move before:=Sheets(Sheets.Count - 2)
End Sub
Gruß
Lesen gefährdet die Dummheit
Anzeige
AW: VBA Probleme
03.08.2006 17:00:33
Jeanette
Hallo u (seltsamer Nick, LoL),
ich danke dir jetzt schon mal für deine mühe. ich werde es morgen ausprobieren und dir dann in diesem thread ein feedback geben.
Also, nochmals vielen dank und schönen abend.
LG Jeanette
AW: @u_?
03.08.2006 17:09:25
Jeanette
Hallo nochmals,
hab mir jetzt den Code mal angesehen und hab da noch 2 fragen, geht dein code jetzt nur beim blatt leer oder geht er für das blatt leer 01 auch, weil ich brauche beide.
Und meine 2. frage, mit combobox meinst du Kombinationsfeld dort von der Steuerelementtoolbox?
Sorry, wenn ich zu lästig bin, muss aber das vorher klären da ich ja erst morgen probieren kann, und dann kann ich keinen mehr fragen.
LG Jeanette
Anzeige
AW: & u Nochwas
03.08.2006 17:16:27
Jeanette
Hi noch etwas,
habs endlich geschafft mit dem Code fürs Klassenmodul, hab mir eine Musterdatei gebaut, funktioniert, was aber nicht funktioniert ist, wenn ich einen namen auswähle, sollte es ja zum blatt wechseln, da tut sich aber nix bei mir, was mache ich denn da falsch, kannst du mir das bitte sagen?
Danke recht herzlich für müh und plage
LG Jeanette
AW: Bitte um Hilfe von Jedermann
03.08.2006 17:58:26
Jedermann
Hallo,
sorry wenn ich ungeduldig bin, aber ich glaube, u_ ist nicht mehr zugegen und er hat mir schon sehr weit geholfen. Aber ich glaube es geht nicht ganz so wie ich es wollte, siehe Beiträge von oben, und wenn ich es heute gerafft bekomme, dann kann ich erst wieder am Montag weiter probieren, und dabei bin ich so knapp drann.
Also bitte bitte helft mir weiter.
Danke an euch die sich die Mühe machen.
LG Jeanette
Anzeige
AW: Bitte um Hilfe von Jedermann
03.08.2006 19:09:46
Jedermann
Hallo Jeanette,
hab den Code von u_ mal in eine Beispielmappe gepackt und ein bisschen erweitert, sollte nun alles erfüllen was du dir wünscht. Viel Spass beim nachvollziehen.
https://www.herber.de/bbs/user/35555.xls
Gruß Heiko
PS: Rückmeldung wäre nett
AW: @Heiko
03.08.2006 19:14:03
Jeanette
Recht herzlichen Dank, hab schon gedacht, es hilft mir keiner mehr.
Ich werde es morgen in der Arbeit ausprobieren und gebe Dir dann morgen am Abend Bescheid, ob es geklappt hat.
Also nochmals, vielen vielen Dank.
LG Jeanette
@Heiko
03.08.2006 19:44:26
u_
Hallo,
hast du fein gemacht. Dem ist wohl nicht mehr viel hinzuzusetzen (mal abwarten, was J. noch einfällt ;-))
Gruß
Lesen gefährdet die Dummheit!
Anzeige
@u_ Danke für die Blumen ! o.T.
03.08.2006 19:53:24
Heiko
.
AW:@ Josef, u_ , Heiko & Jedermann/Frau
04.08.2006 12:55:56
Jeanette
Hallo,
zuerst ein Dankeschön an u_, Josef & Heiko für die Hilfe, welche ich gestern von Euch bekommen habe.
Ich habe heute am Vormittag alles so wie ich mir gewünscht zusammengebastelt. Aber wenn man ständig am PC sitzt und herumtüftelt, fallen einem immer wieder Sachen ein.
Eigentlich funktioniert eh alles so, wie ich es mir Vorgestellt habe, aber da gibts etwas, was mir aufgefallen ist:
Ich habe diesen Code in Verwendung:

Private Sub ComboBox1_Change()
If bolEntry = False Then
Sheets(ComboBox1.Value).Select
End If
End Sub


Private Sub CommandButton1_Click()
Leer
End Sub


Private Sub CommandButton2_Click()
Leer01
End Sub


Private Sub Worksheet_Activate()
Dim i As Integer
bolEntry = True
With Sheets(1).ComboBox1
.Clear
For i = 1 To Worksheets.Count - 3
.AddItem Worksheets(i).Name
Next
.ListIndex = 0
End With
bolEntry = False
End Sub

Sub Leer()
Dim StrName As String
Dim wks As Worksheet
Dim i As Integer
StrName = InputBox("Welcher Name?")
If StrName "" Then
Sheets("Leer").Copy After:=Sheets(1)
Set wks = ActiveSheet
wks.Name = StrName
Call prcSortieren(wks)
End If
End Sub
Sub Leer01()
Dim StrName As String
Dim wks As Worksheet
Dim i As Integer
StrName = InputBox("Welcher Name?")
If StrName "" Then
Sheets("Leer 01").Copy After:=Sheets(1)
Set wks = ActiveSheet
wks.Name = StrName
Call prcSortieren(wks)
End If
End Sub
Sub prcSortieren(wks As Worksheet)
Dim i As Integer
For i = 2 To Worksheets.Count - 3
If Sheets(i).Name > wks.Name Then
wks.Move before:=Sheets(i)
Exit Sub
End If
Next
wks.Move before:=Sheets(Sheets.Count - 3)
End Sub
Wenn ich jetzt aber einen neuen Namen vergebe der bereits existiert, kommt es zum Fehler. Die Lösung von Josef wäre schon Super, wenn`s so gehen würde, aber leider habe ich das mit Josef`s Code nicht zusammen gebracht.
1) Also meine Vorvorletzte Bitte an Euch:
Wer kann mir meinen, und bitte nur mehr meinen (den ich aber hier Erhalten habe), Code so ändern, das es gleich oder so ähnlich wie in Josef`s Beispiel funktioniert wenn ein Name bereits vergeben wurde.
Ich kann mir da auch ein simples Meldefenster vorstellen mit dem Hinweis, das der Name schon existiert, wär auch kein Problem.
2) Meine Vorletzte Bitte an Euch:
Mir ist aufgefallen, wenn ich den Namen nicht mit einem Grossbuchstaben beginne, dass dann das Sortieren der Blätter nicht mehr funktioniert sondern der neue Name fast ganz hinten eingereiht wird.
Am besten wäre es so wie im Word, jeden Satz mit Gross beginnen, geht das so zu ändern?
Sollte das nicht zum ändern sein (bitte wieder nur im obigen Code) dann kann ich damit auch Leben.
3) Meine Allerletzte Bitte an Euch:
Hab ja nach Stundenlangem Kampf auch das mit der Kombobox geschafft. Kann ja jetzt die Tabellenblätter unten ausblenden und via Kombobox das gewünschte Blatt auswählen.
Hab ich auch alles so gemacht, aber dann viel mir auf, wie sollte denn der User ein nicht mehr benötigtes Blatt löschen wenn die Blattregisterkarten ausgeblendet sind?
Wer kann mir auch da behilflich sein und mir die notwendige Idee geben, wie ich das machen sollte? Am leichtesten für mich wäre es mittels einer Userform, natürlich nur dann wenn ich sie mir einfach nur kopieren könnte und in meiner Datei wieder Importieren könnte samt Code.
Wenn mit einer Userform, dann wäre es auch von Vorteil, wenn ich den zu löschenden Namen ebenfalls mit einer Kombobox aussuchen und löschen könnte.
Wenn es aber da was einfacheres, außer Blattregister anzeigen und wieder ausblenden gibt, dann bin ich gerne bereit, auch solche Vorschläge anzunehmen.
Ich komme mir schon fast wie eine Autorin vor wenn ich so viel schreibe hier, aber anders gehts ja leider nicht mit dem verständlich Erklären. Zu oben sei noch gesagt, bitte nur meinen Code abändern den ich dann gleich wieder übernehmen kann, sonst brauche ich wieder so lange um herauszufinden, was wohin gehört. Eine Beispieldatei mit dem Code geht natürlich auch, ein wenig kenne ich mich ja schon aus.
Ich glaube, ich habe nun alles geschrieben, und hoffe auf Euch, dass ihr mir wieder weiter helft. Wahrscheinlich sind das eh nur ganz kleine und leichte Sachen für Euch, aber halt für mich stellt das ein Riesengrosses Problem dar.
Ich würde mich echt riesig über das gelöste Problem von mir freuen. Sage schon mal jetzt Danke an alle und einen schönen Beginn des herannahenden Wochenendes.
Sehr sehr liebe Grüsse von Jeanette
Anzeige
1 und 2 beantwortet, 3 noch offen
04.08.2006 13:20:04
Heiko
Hallo Jeanette,
ist das hier ein Wunschkonzert ;-)
Zu deinem VorVor und deinem Vorletzten Wunsch den Code den du gepostet hast KOMPLETT gegen diesen hier austauschen.

Option Explicit
Private Sub ComboBox1_Change()
If bolEntry = False Then
Sheets(ComboBox1.Value).Select
End If
End Sub
Private Sub CommandButton1_Click()
Leer
End Sub
Private Sub CommandButton2_Click()
Leer01
End Sub
Private Sub Worksheet_Activate()
Dim i As Integer
bolEntry = True
With Sheets(1).ComboBox1
.Clear
For i = 1 To Worksheets.Count - 2
.AddItem Worksheets(i).Name
Next
.ListIndex = 0
End With
bolEntry = False
End Sub
Sub Leer()
Dim StrName As String
Dim wks As Worksheet
Dim i As Integer
StrName = InputBox("Neuer Name?")
If prcPruefeName(StrName) = False Then
MsgBox "Der Name " & StrName & " ist bereits vergeben oder er enthält unzulässige Zeichen !", vbCritical
Exit Sub
End If
If StrName <> "" Then
Sheets("Leer").Copy After:=Sheets(1)
Set wks = ActiveSheet
wks.Name = StrName
Call prcSortieren(wks)
End If
End Sub
Sub Leer01()
Dim StrName As String
Dim wks As Worksheet
Dim i As Integer
StrName = InputBox("Neuer Name?")
If prcPruefeName(StrName) = False Then
MsgBox "Der Name " & StrName & " ist bereits vergeben oder er enthält unzulässige Zeichen !", vbCritical
Exit Sub
End If
If StrName <> "" Then
Sheets("Leer 01").Copy After:=Sheets(1)
Set wks = ActiveSheet
wks.Name = StrName
Call prcSortieren(wks)
End If
End Sub
Sub prcSortieren(wks As Worksheet)
Dim i As Integer
For i = 2 To Worksheets.Count - 1
If UCase(Sheets(i).Name) > UCase(wks.Name) Then
wks.Move before:=Sheets(i)
Exit Sub
End If
Next
wks.Move before:=Sheets(Sheets.Count - 1)
End Sub
Function prcPruefeName(strBlattName As String) As Boolean
Dim notAllowed As Variant
Dim wksSheets As Worksheet
Dim intIndex As Integer
'Im Tabellennamen nicht zulässige Zeichen
notAllowed = Array(":", "\", "/", "?", "*", "[", "]")
'Prüfen ob unerlaubte Zeichen vorhanden
For intIndex = 0 To UBound(notAllowed)
If InStr(1, strBlattName, notAllowed(intIndex)) > 0 Then
prcPruefeName = False
Exit Function
End If
Next
For Each wksSheets In ThisWorkbook.Worksheets
If UCase(wksSheets.Name) = UCase(strBlattName) Then
prcPruefeName = False
Exit Function
End If
Next wksSheets
prcPruefeName = True
End Function

Zu dem letzten Wunsch hab ich noch nichts
Gruß Heiko
PS: Rückmeldung wäre nett !
Anzeige
3 nun auch gelöst
04.08.2006 13:35:17
Heiko
Hallo Jeanette,
und nu alles zusammen in einer neuen Tabelle, löschen kannst du über die 2. Combobox im Startblatt.
https://www.herber.de/bbs/user/35576.xls
Und mal wieder viel Spass beim nachvollziehen.
Gruß Heiko
PS: Rückmeldung wäre nett !
AW: AW:@ Josef, u_ , Heiko & Jedermann/Frau
04.08.2006 13:27:45
u_
Hallo,
das erfüllt schon mal deine ersten beiden Bitten:

Sub Leer()
Dim strName As String
Dim wks As Worksheet
Dim i As Integer
strName = InputBox("Welcher Name?")
If strName <> "" Then
If CheckName(strName) = False Then
Sheets("Leer").Copy After:=Sheets(1)
Set wks = ActiveSheet
wks.Name = strName
Call prcSortieren(wks)
End If
Else
MsgBox "Der Name existiert bereits", vbOKOnly
End If
End Sub


Sub Leer01()
Dim strName As String
Dim wks As Worksheet
Dim i As Integer
strName = InputBox("Welcher Name?")
If strName <> "" Then
If CheckName(strName) = False Then
Sheets("Leer 01").Copy After:=Sheets(1)
Set wks = ActiveSheet
wks.Name = strName
Call prcSortieren(wks)
End If
Else
MsgBox "Der Name existiert bereits", vbOKOnly
End If
End Sub


Sub prcSortieren(wks As Worksheet)
Dim i As Integer
For i = 2 To Worksheets.Count - 3
If UCase(Sheets(i).Name) > UCase(wks.Name) Then
wks.Move before:=Sheets(i)
Exit Sub
End If
Next
wks.Move before:=Sheets(Sheets.Count - 3)
End Sub


Function CheckName(strTxt As String) As Boolean
Dim wks As Worksheet
For Each wks In Worksheets
If UCase(wks.Name) = UCase(strTxt) Then
CheckName = True
Exit Function
End If
Next
End Function

zu3: die Lösung über eine UF ist zwar elegant, mir aber zu aufwändig. Wähle das Blatt, das du löschen willst, doch einfach über die Combobox aus. Dann wird es angezeigt und du kannst es löschen.
Gruß
Lesen gefährdet die Dummheit
Anzeige
AW: VBA Probleme
04.08.2006 13:35:58
Jeanette
Hallo ihr beide,
danke erstmals für eure Antworten. Das mit den Blättern ist so das ich sie ja ausgeblendet habe, also über Optionen/BLattregister anzeigen, habe ich dieses abgehakt, wie kann ich dann das Blätt über die Kombobox zuerst wählen, und dann löschen?
LG Jeanette
AW: VBA Probleme
04.08.2006 13:39:42
u_
Hallo,
Bearbeiten-Blatt löschen
Gruß
Lesen gefährdet die Dummheit
AW: Danke Euch, einfach aber es geht so o.T.
04.08.2006 13:43:48
Jeanette
AW: VBA Probleme
04.08.2006 13:49:20
Heiko
Hallo Jeanette,
also ich mach jetzt Wochenende und kling mich aus.
Aber was du alles haben willst würde ich in eine eigene Symbolleiste packen darauf hat man dann immer Zugriff egal in welchem Baltt man gerade ist, denn wie kommst du zur Zeit aus einem Mitarbeiterblatt wieder zurück in die Startseite ohne Blattregister ?!
@u_ deine Sortierfunktion hat noch ne kleine Macke, wenn du ein neues Blatt einfügst das an die letzte Stelle gehört (also vor Leer und Leer_01) dann landet es mit deiner Originalversion da nicht.
Gruß Heiko
Anzeige
AW: VBA Probleme
04.08.2006 14:12:26
Jeanette
Hallo Heiko,
ich komme per Makro und Button zurück. Und zu Deinem 2. Beitrag, das verstehe ich nicht ganz was Du da meinst, vielleicht hast ja mal Lust, mir es genauer zu erklären.
Thx für die Antworten und schönes Wochenede.
Gruss Jeanette

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige