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

Select Anweisung kürzen

Select Anweisung kürzen
Dagmar
Hallo VAB-Experten,
wer kann mir sagen, wie ich die folgende Anweisung kürzen kann:
Sheets("Blatt1").Select
ActiveSheet.Cells(4, 1).Select
Ich benötige diesen Teil in meinem Programm sehr sehr oft an diversen Stellen. Wie kann ich aus dieser Anweisung eine Zeile (anstatt zwei) manchen und die Anweisung somit kürzen?
Danke für die Info.
Dagmar
AW: Select Anweisung kürzen
06.08.2009 14:55:24
David
Hallo Dagmar,
Select kann man sich in den meisten Fällen komplett schenken. Mit "VBA gut" solltest du das eigentlich wissen?! Dazu müsste man aber den kompletten Code sehen.
Gruß
David
AW: Select Anweisung kürzen
06.08.2009 15:19:27
Daniel
Hi
das kann man im Prinzip so kürzen:
Application.Goto Sheets("Tabelle1").Range("A1")

allerdings sollte man das wirklich nicht oft verwenden müssen, eigentlich nur am Makro-Ende oder bei einer Benuztereingabe, wenn dern Anwender den entsprechenden Zellbereich sehen soll.
Solltest du es benötigen, weil du es für den Makroablauf benötigst, dann lies dir mal lieber vorher das hier durch:
http://www.online-excel.de/excel/singsel_vba.php?f=78
das sollte bei Excel-gut sowieso zum eigentlich ne selbstverständlichkeit sein.
Gruß, Daniel
Anzeige
AW: Select Anweisung kürzen
06.08.2009 15:12:58
ede
Hallo,
was meinst Du mit "Ich benötige diesen Teil in meinem Programm sehr sehr ..."?
Nimm den Inhalt der Zelle in eine Variable, dann steht er Dir immer zur Verfügung
variable=Sheets("Blatt1").Cells(4, 1).Value
Gruss
AW: Select Anweisung kürzen
06.08.2009 15:27:35
Dagmar
Leider beide nicht hilfreich.
Daniel: sorry, aber Du hast mir nur 2x angedeutet, dass ich es nicht kann, obwohl ich mich als gut einschätze. Dafür habe ich die Frage nicht gestellt.
Ede: Es ist natürlich jedes Mal ein anderes Blatt oder eine andere Zelle!
AW: Select Anweisung kürzen
06.08.2009 15:34:39
ede
dann beschreib, was Dein Programm machen soll, sonst können wir auch nicht helfen!
Gruss
Anzeige
AW: Select Anweisung kürzen
06.08.2009 15:44:06
Dagmar
Es soll - nachdem es bestimmte Schritte in dem Blatt gemacht hat - am Ende (bevor ich in anderen Blättern mit Programmteilen weitermache) die Zelle markieren (und dadurch hervorheben, oder bspw. ein komplett markiertes Blatt dadurch nicht mehr markieren, sondern eben nur noch diese eine Zelle). Es geht nur um die beiden Zeilen. Hatte zunächst an
Sheets("Blatt1").Cells(4,1).Select
gedacht, aber das macht er nicht.
Ich weiß, dass die Frage nicht einfach ist, daher kann sie sicher nicht jeder beantworten (habe schließlich hier schon drei Kollegen gefragt, die länger programmieren wie ich). Also bitte nur antworten, wenn Ihr eine Lösung habt. Vielen Dank für Eure Mühe.
Anzeige
AW: Select Anweisung kürzen
06.08.2009 15:50:05
David
Hallo Dagmar,
ich heiße zwar David, vermute aber mal trotzdem, dass ich gemeint war.
Eine Antwort kann immer nur so gut sein wie die Frage. Wenn du nicht genug Informationen lieferst, kann dir auch nicht geholfen werden.
Ich habe das tatsächlich auch nur angedeutet, da ich es natürlich (!) nicht wissen kann, womit wir wieder beim Thema 'fehlende Informationen' sind.
Ich MUSS hier nicht antworten und versuchen (!), dir zu helfen.
Und um noch auf deine ursprüngliche Frage zu antworten:
Die beiden von dir geschriebenen Zeilen lassen sich (ohne weiteren Zusammenhang) GAR NICHT kürzen!
Gruß
David
Anzeige
AW: Select Anweisung kürzen
06.08.2009 16:06:42
Dagmar
Als dann gebe ich wohl besser mal eine gekürzte Verions des Programmes, da ich sonst nicht weiß, welche Infos noch benötigt werden (bitte nur antworten, wenn Ihr eine Lösung wisst, dass Ihr keine Lösung wisst, möchte ich das nicht wissen, da wir das nicht weiterhilft :-)
Besagte Zeilen, die ich kürzen möchte befinden sich vor dem Ende des ersten Programmes bevor _ der Unter-

Sub beginnt.
Public Const festeBlätter As Integer = 15
Public merken As String

Sub Dreiecke()
Dim BerArr As Variant
Dim z As Integer
'----------------------------------------------------------------------------------------------- _
Application.Calculation = xlManual
Application.ScreenUpdating = False
'----------------------------------------------------------------------------------------------- _
z = 3
While Range("Steuerung").Cells(z, 1).Value  ""
Sheets.Add(After:=Sheets(Sheets.Count)).name = Range("Steuerung").Cells(z, 1)
Sheets("Vorlage").Cells.Copy
ActiveSheet.Paste
ActiveSheet.Cells(1, 1) = Range("Steuerung").Cells(z, 1)
'--------------------------------------------------------------------------------------- _
'Diagramm auf neue Daten anpassen
merken = ActiveSheet.name
ActiveSheet.name = "Blatt"
ActiveSheet.ChartObjects(1).Activate
ActiveChart.SeriesCollection(1).XValues = "=Blatt!R44C1:R57C1"
ActiveChart.SeriesCollection(1).Values = "=Blatt!R44C2:R57C2"
ActiveSheet.ChartObjects(2).Activate
ActiveChart.SeriesCollection(1).XValues = "=Blatt!R44C1:R57C1"
ActiveChart.SeriesCollection(1).Values = "=Blatt!R44C57:R57C57"
ActiveChart.Axes(xlValue).Select
Selection.TickLabels.NumberFormat = "0%"
ActiveSheet.name = merken
'--------------------------------------------------------------------------------------- _
ActiveSheet.Cells(4, 1).Select
z = z + 1
Wend
'----------------------------------------------------------------------------------------------- _
z = 3
While Range("Steuerung").Cells(z, 1)  ""
If Range("Steuerung").Cells(z, 3) = "Longtail1994" Then
Longtail1994 (Range("Steuerung").Cells(z, 1).Value)
ElseIf Range("Steuerung").Cells(z, 3) = "Longtail1998" Then
Longtail1998 (Range("Steuerung").Cells(z, 1).Value)
End If
z = z + 1
Wend
'----------------------------------------------------------------------------------------------- _
Application.ScreenUpdating = True
Application.Calculation = xlAutomatic
Application.Calculation = xlManual
Application.ScreenUpdating = False
'----------------------------------------------------------------------------------------------- _
Application.ScreenUpdating = True
Application.Calculation = xlAutomatic
Sheets("V 1994").Select
ActiveSheet.Cells(4, 1).Select
Sheets("V 1998").Select
ActiveSheet.Cells(4, 1).Select
Sheets("Start").Select
End Sub

'##################################################################
Sub Longtail1994(Sheetname)
'Anweisungsteil
Sheets(Sheetname).Select
'----------------------------------------------------------------------------------------------- _
ActiveSheet.ChartObjects(1).Activate
ActiveChart.ChartArea.Select
ActiveWindow.Visible = False
Selection.Delete
ActiveSheet.ChartObjects(1).Activate
ActiveChart.ChartArea.Select
ActiveWindow.Visible = False
Selection.Delete
'----------------------------------------------------------------------------------------------- _
Sheets("V 1994").Select
Cells.Select
Selection.Copy
Sheets(Sheetname).Select
Cells.Select
ActiveSheet.Paste
ActiveSheet.Cells(1, 1) = Sheetname
'----------------------------------------------------------------------------------------------- _
Range("E91:T106, E112:T127").Select
Selection.ClearContents
'----------------------------------------------------------------------------------------------- _
merken = ActiveSheet.name
ActiveSheet.name = "Blatt"
ActiveSheet.ChartObjects(1).Activate
ActiveChart.SeriesCollection(1).XValues = "=Blatt!R9C1:R57C1"
ActiveChart.SeriesCollection(1).Values = "=Blatt!R9C2:R57C2"
With ActiveChart.Axes(xlCategory)
.MinimumScale = 1960
.MaximumScale = 2010
End With
ActiveSheet.ChartObjects(2).Activate
ActiveChart.SeriesCollection(1).XValues = "=Blatt!R48C1:R57C1"
ActiveChart.SeriesCollection(1).Values = "=Blatt!R48C57:R57C57"
ActiveChart.Axes(xlValue).Select
Selection.TickLabels.NumberFormat = "0%"
ActiveSheet.name = merken
'----------------------------------------------------------------------------------------------- _
ActiveSheet.Cells(4, 1).Select
End Sub

Anzeige
AW: Select Anweisung kürzen
06.08.2009 16:23:35
David
Hallo Dagmar,
einige Kürzungsvorschläge:
alle Zeilen nach dem Schema
ActiveChart.Axes(xlValue).Select
Selection.TickLabels.NumberFormat = "0%"
können auch so geschrieben werden:
ActiveChart.Axes(xlValue).TickLabels.NumberFormat = "0%"
d.h. ".Select" und "Selection." nacheinander kann man ersatzlos löschen. Diese Zeilen entstehen normalerweise bei der Aufzeichnung per Makro-Recorder.
Diese Anweisungen
Application.ScreenUpdating = True
Application.Calculation = xlAutomatic
Application.Calculation = xlManual
Application.ScreenUpdating = False
Application.ScreenUpdating = True
alle hintereinander ergeben keinen Sinn. Normalerweise schaltet man diese Optionen am Anfang eines Codes auf False bzw. Manual und am Ende (als letzte Zeilen vor 'End Sub') wieder auf True bzw. Automatic.
Diese Zeilen
    Sheets("V 1994").Select
ActiveSheet.Cells(4, 1).Select
Sheets("V 1998").Select
ActiveSheet.Cells(4, 1).Select
Sheets("Start").Select

werden normalerweise auch nicht benötigt.
Für weitere Feinheiten werden sich sicher die Kollegen noch auslassen. Erich G., Rudi, Hajo, fcs ?
Gruß
David
PS: Solltest du diese kleine (!) Hilfe auch als "nutzlos" erachten, hat sich das Thema für mich erledigt.
Anzeige
AW: Select Anweisung kürzen
06.08.2009 16:41:27
Dagmar
Der Hinweis war gut: ActiveChart.Axes(xlValue).TickLabels.NumberFormat = "0%" (Danke!)
Application.ScreenUpdating = True
Application.Calculation = xlAutomatic
Application.Calculation = xlManual
Application.ScreenUpdating = False
Application.ScreenUpdating = True
Dies ergibt sehr wohl einen Sinn, da ich aktualisieren muss, um mit den Zwischenergebnissen, die sonst nicht angezeigt werden, weiterrechnen zu können (da Du das gesamte Programm nicht vorliegen hast, kannst Du das nicht wissen)
Sheets("V 1994").Select
ActiveSheet.Cells(4, 1).Select
Sheets("V 1998").Select
ActiveSheet.Cells(4, 1).Select
Sheets("Start").Select
Ich denke ich sollte entscheiden, ob ich die Zeilen benötige und das tue ich im weiteren sehr wohl.
WER KANN MIR MEINE URSPRÜNGLICHE FRAGE BEANTWORTEN? DIE FRAGE WURDE LEIDER NOCH NICHT ZU MEINER ZUFRIEDENHEIT BEANTWORTET. VIELEN DANK FÜR EURE MÜHE!!
David: Danke für Deine Hilfe. Den ersten Punkt werde ich gleich umsetzen. Da Du mir leider zu meiner ursprünglichen Frage nicht weiterhelfen kannst, möchte ich Dich bitten, dass Du mir nicht mehr antwortest (da die Frage sonst wieder nicht als "Frage noch offen" markiert ist), denn vielleicht kann mir ja jemand anderer weiterhelfen...
Anzeige
AW: Select Anweisung kürzen
06.08.2009 16:59:46
Rudi
Hallo,
wenn du das unbedingt brauchst, pack's doch in eine eigene Routine.
Sub Selecterei()
Sheets("V 1994").Select
ActiveSheet.Cells(4, 1).Select
Sheets("V 1998").Select
ActiveSheet.Cells(4, 1).Select
Sheets("Start").Select
End Sub

An den entsprechenden Stellen schreibst du dann einfach
Selecterei
Gruß
Rudi
AW: Select Anweisung kürzen
06.08.2009 17:03:49
Dagmar
Danke für den Tipp, brauche das allerdings immer unterschiedlich mal vom einen Blatt, mal vom anderen. Also
Sheets("V 1994").Cells(4, 1).Select
geht nicht.
Wie sieht es mit Range aus? Gibt es da Möglichkeiten eine bestimmte Zelle auf einem bestimmten Blatt anzusprechen? Oder was gibt es denn sonst noch in der Richtung?
Vielen Dank für Eure Mühe!
Anzeige
AW: Select Anweisung kürzen
06.08.2009 18:51:58
Josef
Hallo Dagmar,
.Select und .Activate sind zu 99,9% überflüssig und absolut unnötig!
Das haben ja andere aus dem Forum dir schon mitzuteilen versucht.
Erkläre doch mal genauer, warum du selektieren und aktivieren willst, dann findet sich wahrscheinlich eine Lösung, und das ohne .Select und .Activate.
Ich werde nicht weiter antworten, weil du dich doch ein wenig in Ton vergriffen hast.
Gruß Sepp

AW: Select Anweisung kürzen
07.08.2009 08:51:40
David
Dagmar,
auch wenn du mich "freundlich" darum gebeten hast, will ich trotzdem nochmal meinen Senf dazugeben.
Mittlerweile hast du sicher schon mitbekommen, dass ich mit meiner Meinung nicht alleine stehe.
Zu deiner Antwort:
Wenn du das Weglassen von Select nur auf diese eine Zeile anwendest, hast du das Prinzip nicht verstanden.
...da ich aktualisieren muss...
das erreichst du mit einem einfachen Calculate, das Anschalten von Screenupdating ist nicht notwendig.
Ich denke ich sollte entscheiden, ob ich die Zeilen benötige und das tue ich im weiteren sehr wohl
Deswegen habe ich geschrieben "...normalerweise...". Es hat hier niemand behauptet, dass man Select/Activate IMMER weglassen kann, es gibt durchaus Fälle, wo das Sinn hat. Ich wollte damit nur erreichen, dass du darüber nachdenkst, ob du das denn wirklich brauchst.
Und zu deiner ursprünglichen Frage habe ich dir durchaus geholfen, in dem ich dir gesagt habe, dass das was du willst, NICHT geht. Oder hast du mittlweile von anderen eine befriedigende Lösung erhalten?
Nochmal: Man kann diese 2 Zeilen, so man sie denn benötigt, nicht kürzer schreiben!!!
Ansonsten verweise ich hinsichtlich deiner Kommunikation auf die Forums-FAQ und vielleicht noch auf die allgemeine Netiquette.
Geschriebene Sätze in Großbuchstaben gelten normalerweise als ANSCHREIEN und ich glaube kaum, dass dir ein potentieller Helfer noch Unterstützung gibt, wenn du vor ihm stehst und ins Gesicht brüllst. Und das geht mir jetzt genau so.
Deswegen ist dies definitiv mein letzter konstruktiver Beitrag.
Und damit das nicht wieder ein Problem für dich ist, werde ich den Beitrag auch noch auf offen setzen, soll ein Anderer das Schlußwort haben.
Gruß
David
Anzeige
***offen***
07.08.2009 08:58:15
David
jetzt hab ich doch glatt den Haken vergessen
AW: Select VERMEIDEN
07.08.2009 13:14:26
Daniel
Hi Dagmar
diesen Code
Sheets("V 1994").Select
Cells.Select
Selection.Copy
Sheets(Sheetname).Select
Cells.Select
ActiveSheet.Paste
ActiveSheet.Cells(1, 1) = Sheetname

schreibt man normalerweise so:
Sheets("V 1994").Cells.Copy Destination:=Sheets(Sheetname).Cells(1,1)
Sheets(Sheetname).Cells(1, 1) = Sheetname

Gruß, Daniel
AW: alternativ Application.Goto
07.08.2009 00:14:26
Daniel
Hallo Dagmar
nichtsdetotrotz ich habe dir aber auf deine Frage eine meiner Ansicht nach passende und hilfreiche Antwort gegeben,
nämlich den Hinweis mit Application.Goto.
Hast du diesen übersehen?
Gruß, Daniel
AW: Select Anweisung kürzen
06.08.2009 20:04:33
Christian
Hallo,
wie von den Vorrednern bereits mehrfach beschrieben: Verzichte auf select und activate!
Das brauchst du in keinster Weise für deine Aktionen in den Tabellen und den Diagrammen.
Stattdessen: Sauber referenzieren, so wie du es in den Basics ja hoffentlich gelernt hast.
Zu deiner Frage:
Man kann nur in der jeweils aktiven Tabelle einen bestimmten Bereich anwählen.
Wenn du also zum Ende eines Durchlaufs in meheren neuen Tabellenblättern jeweils einen bestimmte Bereich ungleich A1 "selektieren" willst, dann pack doch einfach die Tabellennamen und evt. die Bereichs-Adressen in ein Array, durchlaufe das Array und wähle die gewünschte Zelle an... et voila.
Bei den bereits vorhandenen Tabellenblätter ist dies natürlich nicht notwendig, wenn du wie oben erwähnt korrekt und vollständig referenziert hast. Dann packst du diese Blätter ja gar nicht an.
Gruß
Christian
AW: Select Anweisung kürzen
07.08.2009 09:08:23
Klaus-Dieter
Hallo Dagmar,
ein Aspekt ist meiner Ansicht nach noch nicht erwähnt worden. Der (höchst überflüssige) Select-Befehl funktioniert nur im aktiven Tabellenblatt. Über deine Selbsteinschätzung hinsichtlich der VBA-Kenntnisse vertiefe ich mich ganz bewusst nicht.
Viele Grüße Klaus-Dieter

Online-Excel

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige