Visual Basic in Excel

Hallo ich bin ein absoluter Anfänger in VB und wollte ein Makro schreiben das meine Daten sortiert. Das geht auch alles so wie ich will nur eins gefällt mir noch nicht und zwar wechselt er mir immer die Arbeitsblätter da ich sie ja aktivieren muss damit ich Daten kopieren kann. Und jetzt meine Frage kann Zellen in einem Arbeitsblatt bearbeiten lassen ohne das es aktiviert ist?

Es soll die ganze Zeit das Arbeitsblatt „Tabelle1“ sichtbar sein

Hier ein Auszug:

Sub Makro9()

Sheets(„Tabelle2“).Select
For i = 2 To 256
If Cells(5, i) = Cells(1, 4) Then

For k = i To 256
If Cells(5, k) = „Summe“ Then
For j = 1 To 5000
If Cells(j, 1) = „Gesamtergebnis“ Then
Range(Cells(6, i), Cells(6, k - 1)).Select
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlTop
.WrapText = False
.Orientation = -90
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With

Range(Cells(j, i), Cells(j, k - 1)).Select
Selection.Sort Key1:=Cells(j, i), Order1:=xlDescending, Type:=xlSortValues, _
OrderCustom:=1, Orientation:=xlLeftToRight

Range(Cells(5, i), Cells(j, k)).Select
Selection.Copy
Sheets(„Tabelle1“).Select
Cells(3, 2).Select
ActiveSheet.Paste
Exit For
End If
Next
Exit For
End If
Next

Exit For
End If
Next

Hi,
klar geht das:
Also ohne dieses Scheiß-Select ist es doch viel einfacher.
Ungetestet, hoffe aber, dass es funzt.
Gruß.Timo

Sub Makro9()

Dim ws as Worksheet
Set ws = Worksheets(„Tabelle2“)
Sheets(„Tabelle2“).Select
For i = 2 To 256
If ws.Cells(5, i) = ws.Cells(1, 4) Then

For k = i To 256
If ws.Cells(5, k) = „Summe“ Then
For j = 1 To 5000
If ws.Cells(j, 1) = „Gesamtergebnis“ Then
With ws.Range(ws.Cells(6, i), ws.Cells(6, k - 1))
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlTop
.WrapText = False
.Orientation = -90
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With

ws.Range(ws.Cells(j, i), ws.Cells(j, k - 1)).Sort Key1:=Cells(j, i),
Order1:=xlDescending, Type:=xlSortValues, _
OrderCustom:=1, Orientation:=xlLeftToRight

ws.Range(ws.Cells(5, i), ws.Cells(j, k)).Copy Worksheets(„Tabelle1“).Cells(3,2)
Exit For
End If
Next
Exit For
End If
Next

Exit For
End If
Next

Hallo dubbie,

und zur Ergänzung:

Aplication.Screenupdating = false;
bla bla
Sheets(„dasErste“).select
Aplication.Screenupdating = true;

Damit werden halt die Selects nicht sichtbar und es geht schneller. Besser ist aber, wie schon gepostet, auf selects zu verzichten. Trotzdem kann es sinnvoll sein, das ScreenUpdating auszuschalten, da es (mich :wink:) nervt zuzusehen, wie sich etwas in den Sheets verändert und es ist schneller.

mfg

Dirk.Pegasus

es funktioniert vielen dank euch beiden