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

Suche Rettung bezüglich Excel Visual Basic Aufgabe

Suche Rettung bezüglich Excel Visual Basic Aufgabe
09.11.2005 15:52:53
Goldy
Hallo!
Ich habe ein riesen Problem! Wir haben einen neuen Kurs in der Uni und ich verstehe das überhaupt nicht.
Falls mir jemand einen Ansatz geben könnte oder eine kurze Erläuterung , wäre ich echt dankbar!
Also:
Das ist die Aufgabe...
Erstellen Sie eine Prozedur Ergaenze_Namen, die
• zur Eingabe eines Strings auffordert
• alle Tabellennamen um den String (als Suffix ) ergänzt.
Das einzige was ich verstanden hab ist, dass man dies mit Hilfe einer Schleife anfertigen muss, sowie die Befehle "sheets.activate und sheets.count" benutzen sollte.
1. kann ich nur die erste tabelle umbenennen - aber auch nur komplett
2. keine ahnung wie ich die sheets durchzaehle in der schleife...
des weiteren:
Erweiterung:
• Erweitern Sie die Prozedur Ergaenze_Namen so,
• Dass der Anwender zusätzlich zur Eingabe eines Codes aufgefordert wird, der angibt, ob es sich bei dem eingegebenen String um ein Suffix (S) oder Präfix (P) handelt,
• Und die Prozedur bei Eingabe des Codes P den Tabellennamen um den String als Präfix und bei Eingabe des Codes S den Tabellennamen um den String als Suffix ergänzt.
Wenn mir jemand einen Lösungsvorschlag geben könnte, würde mir das zumindest fuer diese woche mein Leben retten!
Vielen Dank,
Goldy

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Suche Rettung bezüglich Excel Visual Basic Aufgabe
09.11.2005 16:09:19
Andi
Hi Goldy,
der erste Teil geht so:

Sub Ergaenze_Namen()
Dim suffix As String
Dim a As Integer
suffix = InputBox("Bitte Namenszusatz eingeben:")
For a = 1 To Sheets.Count
Sheets(a).Name = Sheets(a).Name & suffix
Next a
End Sub

und der zweite geht so:

Sub Ergaenze_Namen_2()
Dim zusatz As String
Dim code As String
Dim a As Integer
zusatz = InputBox("Bitte Namenszusatz eingeben:")
code = InputBox("Präfix [P] oder Suffix [S]?")
Select Case code
Case "P"
For a = 1 To Sheets.Count
Sheets(a).Name = zusatz & Sheets(a).Name
Next a
Case "S"
For a = 1 To Sheets.Count
Sheets(a).Name = Sheets(a).Name & zusatz
Next a
End Select
End Sub

Nur als Tip am Rande:
ich hatte mal das Vergnügen ein C++-Praktkum durchleiden zu müssen, und da wollte der Betreuer den Code auch immer ganz genau erklärt haben.
Wenn Du also Dein Leben wirklich retten möchtest, dann empfehle ich Dir, den Code durchzuarbeiten und zu versuchen, ihn zu verstehen.
Schönen Gruß,
Andi
Anzeige
AW: Suche Rettung bezüglich Excel Visual Basic Aufgabe
09.11.2005 16:23:21
Galenzo
und wichtig ist ein "On Error Resume Next" einzustreuen, da beim Umbenennen diverse Fehler auftreten können, z.B.:
- neuer Name schon vorhanden
- Arbeitsmappe geschützt
- nicht erlaubte Zeichen/Symbole im Suffix/Präfix eingegeben
Um die Diagramm-Seiten mit zu erwischen solltest du "Sheets" statt "Worksheets" verwenden.
Viel Erfolg!
AW: Suche Rettung bezüglich Excel Visual Basic Aufgabe
09.11.2005 16:34:37
Andi
Hi Galenzo,
bei mir heisst's doch sheets und nicht worksheets...
Auf jegliche Schnörkel wie errorhandler etc hab ich bewusst verzichtet; ich schätze mal, dass dies die erste Praktikumsaufgabe in diesem Semester ist, und solche Dinge wie Fehlerbehandlung werden wohl später besprochen; ich weiss aus eigener Erfahrung, dass manche Profs nicht begeistert sind, wenn 'übereifrige' Studenten ihr didaktisches Konzept rechts überholen... :-)
Schönen Gruß,
Andi
Anzeige
AW: Suche Rettung bezüglich Excel Visual Basic Auf
09.11.2005 16:45:50
Goldy
Vielen Dank!
Echt super nett von Dir!
Alles Gute,
Goldy
Gern geschehen... (ot)
09.11.2005 16:55:42
Andi
.
AW: Gern geschehen... (ot)
09.11.2005 19:54:51
Goldy
Hallo nochmal!
Das funktioniert ja alles super, doch verlängert sich der tabellenname jedes weitere mal. wie kann man das ändern? z.b.: tabelle1 , tabelle1_neu , tabelle1_neu_neu
das darf halt nicht passieren.
vielen dank im vorraus,
Goldy.
AW: Gern geschehen... (ot)
09.11.2005 23:23:26
Andi
Hi,
was darf denn nicht passieren?
Wenn das Blatt 'Tabelle1' heisst und ich '_neu' anhänge, dann heisst es 'Tabelle_neu'.
Und wenn ich an diesen Tabellen-Namen nochmal '_neu' anhänge, dann verlängert sich das natürlich. Imho stimmt das mit der von Dir geposteten Aufgabenstellung überein; wenn nicht, dann bitte mal die komplette Aufgabe hier posten, besonders ob
a) überhaupt nur einmal was angehängt werden darf
b) der selbe String nur einmal angehängt werden darf
Schönen Gruß,
Andi
Anzeige
AW: Gern geschehen... (ot)
10.11.2005 14:31:53
Goldy
Hallo!
Erstmal danke für deine Mühe.
Ich meine damit, dass immer nur ein Anhaengsel dran darf. wenn man zuerst "_neu" an "Tabelle1" dranhaengt und danach "_alt", muss die Tabelle nicht "Tabelle1_neu_alt" heissen, sondern "tabelle_alt"
Ausserdem soll ich die "Whileschleife" benutzen. Das ist doch was anderes als du gemacht hast , oder?
naja... Probleme über Probleme...
--------------------------------------------
Erstellen Sie eine Prozedur Ergaenze_Namen, die
• zur Eingabe eines Strings auffordert
• alle Tabellennamen um den String (als Suffix ) ergänzt.
Erweiterung:
• Erweitern Sie die Prozedur Ergaenze_Namen so,
• Dass der Anwender zusätzlich zur Eingabe eines Codes aufgefordert wird, der angibt, ob es sich bei dem eingegebenen String um ein Suffix (S) oder Präfix (P) handelt,
• Und die Prozedur bei Eingabe des Codes P den Tabellennamen um den String als Präfix und bei Eingabe des Codes S den Tabellennamen um den String als Suffix ergänzt
Anmerkungen:
• Will man nicht Zellen aktivieren sondern eine Tabelle, so verwendet man .activate anstelle von .select
• Verwenden Sie zur Realisierung die in der Vorlesung vorgestellte Whileschleife.
Anzeige
AW: Gern geschehen... (ot)
10.11.2005 14:49:28
Andi
Hi,
na gut, das lässt sich natürlich alles machen, aber warum das ganze mit ner While-Schleife passieren soll, das bleibt wohl das Geheimnis Deines Profs...
Bevor ich jetzt drauflos tippe, noch ne kleine Frage:
heissen die Tabellen alle und auf jeden Fall Tabelle1, Tabelle2 etc, so dass man dies als Basis-Namen fest verwenden könnte, oder können die einen beliebigen Namen haben? Im zweiten Falle müsste man nämlich für jede Tabelle zwei Variable einführen, in denen festgehalten wird, ob vorn oder hinten schon was angehängt wurde und wenn ja, was bzw wie lang der angehängte string war;
andernfalls weiss ich ja nicht, ob der Tabellen-Name "Hallo" der ursprüngliche Name ist, oder ob er erzeugt wurde aus einer Tabelle namens "Hal", an die "lo" schon angehängt wurde.
btw, ich kann aus der Aufgabenstellung noch immer nicht ablesen, dass beim zweiten Anhängen das erste Prä-/Suffix ersetzt werden soll.
Und noch was: auch wenn Dein Prof das mit seinen Anmerkungen offenbar nahelegen will: einen Programmierstil, der unnötigerweise activate und select verwendet (und das ist in mindestens 99,9% aller Fälle unnötig, so wie auch hier) möchte ich nicht unterstützen.
Schönen Gruß,
Andi
Anzeige
AW: Gern geschehen... (ot)
10.11.2005 15:11:18
Goldy
hmmm... ich versteh da leider nichts von, aber wenn das nicht notwendig ist, warum sollte man das reinschreiben? naja, auf jeden fall heissen die Tabellen: "Tabelle1" , "Tabelle2", "Tabelle3" , "Leere Tabelle" , "Tabelle4".
woher kannst du das denn alles? ich habe vorher schon an der uni ein paar informatiker gefragt und die benutzen nur C++ oder so.
alles gute,
Goldy
AW: Gern geschehen... (ot)
10.11.2005 15:49:15
Andi
Hi,
also, hier die neueste Version:
Public praefix As String
Public suffix As String

Sub Ergaenze_Namen_2()
Dim zusatz As String
Dim code As String
Dim a As Integer
Dim basis_laenge As Integer
zusatz = InputBox("Bitte Namenszusatz eingeben:")
code = InputBox("Präfix [P] oder Suffix [S]?")
Select Case code
Case "P"
For a = 1 To Sheets.Count
basis_laenge = Len(Sheets(a).Name) - Len(praefix)
Sheets(a).Name = zusatz & Right(Sheets(a).Name, basis_laenge)
Next a
praefix = zusatz
Case "S"
For a = 1 To Sheets.Count
basis_laenge = Len(Sheets(a).Name) - Len(suffix)
Sheets(a).Name = Left(Sheets(a).Name, basis_laenge) & zusatz
Next a
suffix = zusatz
End Select
End Sub

so würde ich das lösen;
ich bin dann mal über meinen Schatten gesprungen, und hab das ganze Deinem Prof zu liebe noch mit while-Schleife und activate programmiert, das sieht dann so aus:
Public praefix As String
Public suffix As String

Sub Ergänze_Namen_fuer_Prof()
Dim zusatz As String
Dim code As String
Dim a As Integer
Dim basis_laenge As Integer
a = 1
zusatz = InputBox("Bitte Namenszusatz eingeben:")
code = InputBox("Präfix [P] oder Suffix [S]?")
Select Case code
Case "P"
Do While a <= Sheets.Count
Sheets(a).Activate
basis_laenge = Len(ActiveSheet.Name) - Len(praefix)
ActiveSheet.Name = zusatz & Right(ActiveSheet.Name, basis_laenge)
a = a + 1
Loop
praefix = zusatz
Case "S"
Do While a <= Sheets.Count
Sheets(a).Activate
basis_laenge = Len(ActiveSheet.Name) - Len(suffix)
ActiveSheet.Name = Left(ActiveSheet.Name, basis_laenge) & zusatz
a = a + 1
Loop
suffix = zusatz
End Select
End Sub

Wenn Du den zweiten Code irgendjemand unter Angabe seiner Herkunft zeigst, dann erwähne bitte, dass ich dies nur unter Protest so programmiert habe;
select und activate sind deshalb so verbreitet, weil der Makro-Rekorder nicht ohne sie auskommt; wer sich also das Programmieren mittels Rekorder aneignet, der fängt automatisch mit der ganzen Selektiererei an. Für Einsteiger isses vielleicht auch einfacher, sich den Programmablauf vorzustellen, wenn im Code explizit drin steht:
"jetzt fassen wir Tabelle1 an
und dann machen wir mit dieser Tabelle dies und jenes"
Allerdings wird der Code durch sowas schnell unübersichtlich und auch langsamer; ausreichend ist völlig, zu sagen
"tu dies und jenes mit Tabelle1"
ohne sie extra in die Hand zu nehmen, sprich zu selektieren.
Schönen Gruß,
Andi
Anzeige
AW: Suche Rettung bezüglich Excel Visual Basic Aufgabe
09.11.2005 16:18:49
Galenzo
Meine Lösungen:

Private Sub Ergaenze_Namen()
Dim strSuffix As String
Dim wks As Worksheet
strSuffix = InputBox("Suffix eingeben!")
On Error Resume Next
For Each wks In Worksheets
wks.Name = wks.Name & strSuffix
Next
End Sub


Private Sub Ergaenze_Namen_Erweitert()
Dim strFix As String, strPS As String
Dim wks As Worksheet
strFix = InputBox("Suffix/Präfix eingeben!")
strPS = UCase(InputBox("Suffix oder Präfix? (P/S)"))
On Error Resume Next
For Each wks In Worksheets
wks.Name = IIf(strPS = "P", strFix, "") & wks.Name & IIf(strPS = "S", strFix, "")
Next
End Sub

Die Verwendung einer For-Next-Schleife läßt sich hier vermeiden.
Und Sheets.Activate ist Teufelszeug!!!
Viel Erfolg!
Anzeige
AW: Suche Rettung bezüglich Excel Visual Basic Auf
09.11.2005 19:44:23
Goldy
Hallo nochmal!
Das funktioniert ja alles super, doch verlängert sich der tabellenname jedes weitere mal. wie kann man das ändern? z.b.: tabelle1 , tabelle1_neu , tabelle1_neu_neu
das darf halt nicht passieren.
vielen dank im vorraus,
Goldy.

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige