Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

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
Antworten 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
Antworten 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?
Antworten 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
Antworten 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
Antworten 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!
Antworten Top


Gehe zu:


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