Microsoft Excel

Herbers Excel/VBA-Archiv

2 Probleme (für mich)

Betrifft: 2 Probleme (für mich) von: Peter F.
Geschrieben am: 20.08.2008 18:47:54

Hallo Excel-Gemeinde,

hier mein 1. Problem :

Ich habe ein Workbook mit 2 Sheets ("Monitor" ;"Editor"). Gearbeitet wird hauptsächlich in Monitor.
Eine Makro ,aus Monitor gestartet, aktiviert u.a. den Editor, sortiert dort eine Tabelle und aktiviert danach wieder den Monitor und läuft hier bis zum Ende.
Jetzt meine Frage : Ist es möglich, per VBA die Tabelle in Editor zu sortieren, ohne dass dieser zuvor aktiviert werden muss? Das Sortieren soll gewissermaßen im Hintergrund ablaufen.

Gruß,

Peter F.

(zu Euren Lösungsvorschlägen kann ich erst morgen Stellug nehmen).

  

Betrifft: AW: 2 Probleme (für mich) von: Herbert
Geschrieben am: 20.08.2008 19:06:18

Hi,

zunächst mal das Selektieren weglassen. Dann dem Sortierbereich den, idealer Weise Codenamen,
voranstellen

Tabelle1.Range("A1:G12345").Sort....


mfg Herbert


  

Betrifft: AW: 2 Probleme (für mich) von: Peter Feustel
Geschrieben am: 20.08.2008 20:41:26

Hallo Peter,

sag VBA was du sortieren möchtest und vergiss die Punkte vor den Range-Angaben nicht - siehe Beispiel

With Worksheets("Editor")
.Range("A1:G80").Sort _
Key1:=.Range("G1"), Order1:=xlAscending, _
Key2:=.Range("A1"), Order2:=xlAscending, _
Header:=xlGuess, OrderCustom:=1, _
MatchCase:=False, Orientation:=xlTopToBottom
End With

Gruß Peter


  

Betrifft: AW: 2 Probleme (für mich) von: Peter F.
Geschrieben am: 20.08.2008 23:27:57

Hallo Peter,

danke für den Code. Hat prima funktioniert.
Vielleicht kannst du mir noch mal bei einem ähnlich gelagerten Fall unter die Arme greifen:

Ich habe ein Workbook mit 2 Sheets ("Monitor" ;"Editor"). Gearbeitet wird hauptsächlich in Monitor.

Ein Teil eines Makros, das aus dem Monitor heraus gestartet wird, lautet:

'----Neue Zeile In Editor Einfügen----
Sheets("Editor").Activate
Range("A31").Select
Selection.EntireRow.Insert
ActiveCell.Offset(-1, 0).Range("A1:GZ1").Select
Selection.Copy
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveSheet.Paste
Application.CutCopyMode = False
ActiveCell.Select
Sheets("editor").Select
Range("A31") = WSN
Range("B31") = ProdName
Application.Goto Reference:="GesamtBulkTab"
Selection.Sort Key1:=Range("A7"), Order1:=xlAscending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Sheets("Monitor").Activate

Wie müsste der Code lauten, wenn der Editor nicht zwischdurch aktiviert werden soll ?

Danke für deine Bemühungen.

Gruß,
Peter


  

Betrifft: AW: 2 Probleme (für mich) von: Peter Feustel
Geschrieben am: 21.08.2008 22:40:37

Hallo Peter,

die Selects sind nicht nur störend, sondern verlangsamen den Code erheblich und sie sind zu 99% überflüssig.
Sieh zu, dass du ohne sie auskommst - es geht.

Ich habe versuchet dein Makro ein wenig dahingehend umzubauen:

Public Sub Peter()

Dim WkSh      As Worksheet
Dim WSN       As String
Dim ProdName  As String

   WSN = "Hugo"
   ProdName = "Irgendwas"

   With Worksheets("Editor")
      .Rows(31).Insert Shift:=xlDown
      .Range("A30:GZ30").Copy Destination:=Range("A31")
      .Range("A31") = WSN
      .Range("B31") = ProdName
      'Application.Goto Reference:="GesamtBulkTab"
      .Range("A1:GZ" & .Cells(Rows.Count, 1).End(xlUp).Row).Sort _
         Key1:=.Range("A7"), Order1:=xlAscending, _
         Header:=xlNo, OrderCustom:=1, _
         MatchCase:=False, Orientation:=xlTopToBottom
   End With
   'Worksheets("Monitor").Select

End Sub



Gruß Peter


  

Betrifft: AW: Korrektur von: Peter Feustel
Geschrieben am: 21.08.2008 22:42:24

Hallo Peter,

so muss es aussehen:

Public Sub Peter()
 
Dim WSN       As String
Dim ProdName  As String

   WSN = "Hugo"
   ProdName = "Irgendwas"

   With Worksheets("Editor")
      .Rows(31).Insert Shift:=xlDown
      .Range("A30:GZ30").Copy Destination:=Range("A31")
      .Range("A31") = WSN
      .Range("B31") = ProdName
      Application.Goto Reference:="GesamtBulkTab"
      .Range("A1:GZ" & .Cells(Rows.Count, 1).End(xlUp).Row).Sort _
         Key1:=.Range("A7"), Order1:=xlAscending, _
         Header:=xlNo, OrderCustom:=1, _
         MatchCase:=False, Orientation:=xlTopToBottom
   End With
   Worksheets("Monitor").Select

End Sub