Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1316to1320
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

Code direkt in Worksheet (ohne Select)

Code direkt in Worksheet (ohne Select)
26.06.2013 09:47:36
Thomas
Hallo :-)
ich habe mal wieder ein kleines Problem. Ich habe ein Workbook mit ca 15 verschiedenenen Worksheets.
Jetzt möchte ich dass er in einem bestimmten einen Code ausführt(ohne das Worksheet vorher zu selektrieren).
Wie kann ich den Code umändern ohne den ActiveSheet Befehl?
Sub Zeil()
Zeilenanzahl = ActiveSheet.Cells(Rows.Count, 3).End(xlUp).Row
Debug.Print (Zeilenanzahl)
End Sub

Vielen DAnk und beste Grüße Thomas

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Code direkt in Worksheet (ohne Select)
26.06.2013 09:50:44
Klaus
Hi Thomas,
dann referenziere das Worksheet direkt!
Wenn eins deiner Blätter "bestimmtes Worksheet" heisst, dann so:
Sub Zeil()
Zeilenanzahl = Sheets("bestimmtes Worksheet").Cells(Rows.Count, 3).End(xlUp).Row
Debug.Print (Zeilenanzahl)
End Sub
Den korrekten Blattnamen kennst nur du!
Grüße,
Klaus M.vdT.

sorry, zu schnell:
26.06.2013 09:54:07
Klaus
Hi,
da war ich zu schnell. Der Code klappt bestimmt, ist aber nicht sauber. Besser so:
Sub Zeil()
Dim Zeilenanzahl as Long 'IMMER dimensionieren!
Zeilenanzahl = Sheets("bestimmtes Worksheet").Cells(Sheets("bestimmtes Worksheet") _
.Rows.Count, 3).End(xlUp).Row
Debug.Print (Zeilenanzahl)
End Sub
Oder so:

Sub Zeil()
Dim Zeilenanzahl as Long 'IMMER dimensionieren!
with Sheets("bestimmtes Worksheet")
Zeilenanzahl = .Cells(.Rows.Count, 3).End(xlUp).Row
end with
debug.print Zeilenanzahl
end sub
Oder noch kürzer und ohne den Umweg durch eine Variable:

Sub Zeil()
with Sheets("bestimmtes Worksheet")
debug.print .Cells(.Rows.Count, 3).End(xlUp).Row
end with
end sub
Grüße,
Klaus M.vdT.

Anzeige
AW: sorry, zu schnell:
26.06.2013 10:04:14
Thomas
Hallo zusammen,
der Code funktioniert einwandfrei.
Vielen dank nochmal! Ich habe immer noch Problem mit der Syntax von Visual Basic. Gerade diese Anweisung mit dem Punkt machen mich noch kirre :-))

Danke für die Rückmeldung! owT.
26.06.2013 10:05:41
Klaus
.

AW: Offtopic @ThomasP:
26.06.2013 10:20:53
Thomas
Hallo Klaus,
huch. Habe ich nicht gesehen gehabt!
Vielen Dank, ich werde ihn gleich implementieren und versuchen zu verstehen!
Echt spitze, dass du immer so hilfreich bist!

Anzeige
zum Verstehen:
26.06.2013 11:38:11
Klaus
Hallo Thomas,
wenn du die Optimierung des Code verstehen willst, ergänze ihn mal um diese fettgedruckten Zeilen und gehe ihn dann im Einzelschrittmodus (F8) durch, dann siehst du gut was passiert:
Option Explicit
Sub Machs()
End Sub
Application.ScreenUpdating = False
Const Headline As Long = 1
Const AusgabeSpalte As Long = 23
Dim SpalteVor As Long
Dim SpalteNach As Long
Dim WKA As Sheets
Dim WKS As Worksheet
Dim LZeile As Integer
Set WKA = Sheets(Array("Jan", "Feb", "Mrz", "Apr", "Mai", "Jun", "Sep", "Okt", "Nov", "Dez"))
For Each WKS In WKA
With WKS
.Activate
LZeile = .Cells.SpecialCells(xlCellTypeLastCell).Row
SpalteVor = WorksheetFunction.Match("Vorname", .Rows(Headline), False)
SpalteNach = WorksheetFunction.Match("Nachname", .Rows(Headline), False)
With .Range(.Cells(2, AusgabeSpalte), .Cells(LZeile, AusgabeSpalte))
.Select
.FormulaR1C1 = "=RC" & SpalteVor & "&"" ""&RC" & SpalteNach
.Value = .Value
End With
End With
Next WKS
End Sub

Du siehst, der Code geht einmalig in jedes Blatt, und führt dort die Operation (Vor+Nachname verknüpfen) je einmal für den gesamten Bereich aus.
Im Anschluss änderst du mal den Code vor der Optimierung so, dass er auch mit F8 durchgeschaut werden kann:
Sub Machs()
Application.ScreenUpdating = False
Const headline As Long = 1    'Überschriften in Zeile 1!
Dim spalteVor As Long
Dim spalteNach As Long
Dim WKA As Sheets
Dim WKS As Worksheet
Dim LZeile As Integer
Dim Zeile As Integer
Set WKA = Sheets(Array("Jan", "Feb", "Mrz", "Apr", "Mai", "Jun", "Sep", "Okt", "Nov", "Dez"))
For Each WKS In WKA
    WKS.Activate
LZeile = WKS.Cells.SpecialCells(xlCellTypeLastCell).Row
spalteVor = WorksheetFunction.Match("Vorname", WKS.Rows(headline), False)
spalteNach = WorksheetFunction.Match("Nachname", WKS.Rows(headline), False)
For Zeile = LZeile To 2 Step -1
        WKS.Cells(Zeile, 23).Select
WKS.Cells(Zeile, 23) = WKS.Cells(Zeile, spalteVor) & " " & WKS.Cells(Zeile, spalteNach)
Next Zeile
Next
End Sub

Ich denke aber, diese Variante wirst du dir nicht bis zum Ende ansehen, je nachdem wieviele Daten da stehen :-) Wenn der Code das hunderste Mal innerhalb der Schleife wiederholt wird, wird es schnell langweilig :-)
Und das ist dann auch der Grund, warum es ohne Schleife so viel schneller ist!
Viele Grüße und viel Spass beim nachvollziehen,
Klaus M.vdT.

Anzeige
DAS mit dem Punkt
26.06.2013 10:23:25
JACKD
ist eigentlich ganz einfach.
Wenn du dich in einer With Schleife befindest, referierst du damit auf eben diese.
Also wenn du
With Worksheets("Tabelle1")
hast
kannst du verkürzt
.cells(1,1).value
schreiben
Und bei
With Worksheets("Tabelle1").cells(1,1)
kannst du verkürzt
.value
schreiben
Wozu das ganze?
Wenn du innerhalb eines Worksheets zb.
mehrere Befehle Abklapperst sparst du dir das eingeben
Also
with Worksheets("Tabelle1")
.cells(1,1).value = ""
.cells(1,2).value=""
variable = .range("C3").value
und so weiter
end with
Ansonsten würdest du
Worksheets("Tabelle1").cells(1,1).value = ""
Worksheets("Tabelle1").cells(1,2).value = ""
variable = Worksheets("Tabelle1").range("C3").value

schreiben (gerade bei mehreren Codezeilen reduzierst du die Eingabe enorm
Grüße

Anzeige
Wozu das ganze?
26.06.2013 10:43:58
Rudi
Hallo,
Wenn du innerhalb eines Worksheets zb.
mehrere Befehle abklapperst sparst du dir das eingeben

nicht nur das. Die Verarbeitung innerhalb eines With-Rahmens ist imho auch schneller.
Gruß
Rudi

AW: Wozu das ganze?
26.06.2013 11:29:56
Thomas
Hey ihr beiden,
dass mal ne super Erklärung!
Ich habe sowas ähnliches mal gelesen, aber nicht richtig gegriffen bekommen. :-)
Jetzt werde ich damit mal ein bisschen experimentieren :-)

AW: Code direkt in Worksheet (ohne Select)
26.06.2013 09:50:47
Tino
Hallo,
so müsste es gehen,
Sub Zeil()
Dim Zeilenanzahl&
With Sheets("DeineTabelle")
Zeilenanzahl = .Cells(.Rows.Count, 3).End(xlUp).Row
End With
Debug.Print (Zeilenanzahl)
End Sub
Gruß Tino

Anzeige
AW: Code direkt in Worksheet (ohne Select)
26.06.2013 09:52:14
Marc
Hallo!
Sub Zeil()
Zeilenanzahl = sheets(2).Cells(Rows.Count, 3).End(xlUp).Row
Debug.Print (Zeilenanzahl)
End Sub
die geklammerte 2 mußt du natürlich entsprechend ändern
Gruß, MCO

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige