Schritt für Schritt Excel-Herausforderung
#1
Hallo zusammen,

ich bin auf der Suche nach einer Lösung für mein Problem. Sicher gibt es viele Wege, aber vom Ziel bin ich definitiv entfernt.

Die Situation:
Ich sammle Mängel in jeweils einer Zeile im Bereich zwischen den Spalten B bis M.
Nach der Abarbeitung der Mängel möchte ich den Zeilenbereich zwischen den Spalten B bis M "archivieren", d.h. in die Arbeitsmappe "Archiv" schieben.

Was ich suche:
Ein Makro oder ein Code wie ich gezielt bestimmte Zeilenbereiche ausschneide, die Zeile lösche und in der Arbeitsmappe "Archiv" einfüge.
Das habe ich fast hinbekommen, mit dem großen Problem dass es immer nur für B5:M5 funktioniert.

Sub MängelArchivieren()
'
' MängelArchivieren Makro
'
    Range("B5:M5").Select
    Selection.Cut
    Sheets("Archiv").Select
    Range("B5").Select
    Selection.Insert Shift:=xlDown
    Sheets("EK 21.11.16").Select
    Rows("5:5").Select
    Selection.Delete Shift:=xlUp
    Range("E7").Select
End Sub

Wie kann ich meinem Makro die Zeilenzahl geben? Sodass ich variieren kann. Am liebsten wäre mir eine Schaltfläche in Spalte L, die bei Betätigung das Makro ausführt, aber eben immer nur für die links nebenstehende Zeile. (Ja, in jeder Zeile gäbe es dann eine Schaltfläche).

Danke und Grüße
Martin
Top
#2
Hallo Martin,

es wird der Zellbereich der Zeile der gerade aktiven Zelle archiviert:
Sub MaengelArchivieren()
'
' MängelArchivieren Makro
'
Application.ScreenUpdating = False
With ActiveCell
Application.Intersect(.EntireRow, Range("B:M")).Cut Sheets("Archiv").Cells(Rows.Count, 2).End(xlUp).Offset(1)
.EntireRow.Delete
End With
Application.ScreenUpdating = True
End Sub
Gruß Uwe
[-] Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:
  • kliffi01
Top
#3
Hallo Uwe,

Danke, das funktioniert schon ganz gut. Leider löscht es die Zeile nach dem ausschneiden und einfügen nicht (.entireRow.Delete). Sie bleibt einfach leer. Habe dafür Selection.EntireRow.Delete eingefügt und damit funktioniert es, zumindest in meiner Testmappe. Muss das ganze noch "scharf" testen.

Welchen Weg kann ich nun einschlagen, wenn ich mehrere Zeilen archivieren möchte? z.B. in jede Zeile möchte ich ein Kontrollkästchen einfügen und am Ende, wenn ich die alten Mängel angeklickt habe, per Kontrollkästchen, dann möchte ich diese Zeilen, wo das Kontrollkästchen markiert wurde, archivieren. 


ps.

Was hat es mit Application.Screenupdating auf sich?
Top
#4
Hallo,

in das schon vorhande VBA-Modul des entsprechenden Tabellenblattes kommt folgender Code:

Option Explicit

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
 '"Kontrollkästchen" ein-/ausschalten
 If Target.Column = 14 Then  'wenn in Spalte N geklickt wurde
   Cancel = True
   If Len(Target.Value) Then
     Target = ""
   Else
     Target.Font.Name = "Wingdings"
     Target.Value = Chr(254)
   End If
 End If
End Sub

Code eingefügt mit: Excel Code Jeanie

Nun kannst Du per Doppelklick in Spalte N die Häkchen setzen.


Das Verschiebemakro sieht dann so aus (in einem normalen VBA-Modul):
Option Explicit

Sub MaengelArchivieren()
'
' MängelArchivieren Makro
'
 Dim rngZ As Range
 Application.ScreenUpdating = False  'Bildschirmaktualisierung ausschalten
 If Application.WorksheetFunction.CountA(Columns(14)) Then
   Set rngZ = Columns(14).SpecialCells(xlCellTypeConstants).EntireRow
   Application.Intersect(rngZ, Range("B:M")).Copy Sheets("Archiv").Cells(Rows.Count, 2).End(xlUp).Offset(1)
   rngZ.Delete
 End If
 Application.ScreenUpdating = True
End Sub


Code eingefügt mit: Excel Code Jeanie


Gruß Uwe
[-] Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:
  • kliffi01
Top
#5
Danke Uwe!

In der Funktion passiert genau was ich gesucht habe, super!
Kriegen wir das auch mit den herkömmlichen Kontrollkästchen von den Entwicklertools hin?

Grüße
Martin
Top
#6
Das tut man nicht. Die sind für Forms oder Parameterblätter da, aber nicht für Datensätze. Du kannst Zellen auch mit Bordmitteln aussehend wie Kontrollkästchen formatieren. Dann ist deren Anzahl auch unbegrenzt, denn merke: Jedes Objekt ist eines zu viel!
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste