Clever-Excel-Forum

Normale Version: Gefährdungsanalyse mit Maßnahmen-Blatt
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hi,

im Thema Analyse mit MMULT() habe ich diverse Fragen zu MMULT gestellt.
Ich habe an der Datei weitergemacht, da das unabhängig von den Antworten für die dortigen Fragen ist.

Ich habe nun eine Vorlage eingebaut, auf der ich für einen im Blatt "Ergebnistabelle 2" markierten Mitarbeiter alle seine Maßnahmen aufzählen will ohne Lücke.
Jede Maßnahme (Spaltenbezeichnung aus Zeile 3), die in der Maßnahmenspalte einen Wert größer 0 stehen hat, soll in das betreffende Mitarbeiter-Blatt eingetragen werden.

Mit dem unteren Code werden leider die Lücken mitgeschrieben. Wie kann ich das verhindern?

Hier das Makro für den Button im Blatt "Ergebnistabelle 2":
Option Explicit

Sub MitarbeiterBlatt_anlegen()
  '
  ' Protokoll_anlegen Makro
  '
  Dim loLetzte As Long
  Dim loZeile As Long
  Dim i As Long
  Dim strTabelle As String
  Dim strName As String
 
  '
 
  With Application
     .ScreenUpdating = False
     .EnableEvents = False
  End With
 
  If ActiveCell.Column <> 1 Then Exit Sub
  strName = ActiveCell.Value
 
  Sheets("Vorlage").Visible = True
  Sheets("Vorlage").Select
  Sheets("Vorlage").Copy Before:=Sheets(11)
 
  Range("B4").Value = strName
  loZeile = Application.Match(strName, Sheets("Ergebnistabelle 2").Columns(1), 0)
 
  Range("B4").Value = Range("B4").Value & ", " & Sheets("Mitarbeiter").Range("B" & loZeile).Value
  ActiveSheet.Name = Range("B4").Value
  Range("F4").Value = Sheets("Mitarbeiter").Range("C" & loZeile).Value
  Range("B6").Value = Sheets("Mitarbeiter").Range("D" & loZeile).Value
 
  '   Sheets("Vorlage").Visible = False
 
  'Nun sollen die Maßnahmen (Spaltenbezeichnungen aus Zeile 3) in das Mitarbeiter-Blatt eingetragen werden. *Ohne Lücken!*
  With Sheets("Ergebnistabelle 2")
'      loLetzte = .Cells(Rows.Count, 1).End(xlUp).Row           ' letzte belegte in Spalte A (1)
     For i = 2 To 103
        If .Cells(loZeile, i).Value > 0 Then
           ActiveSheet.Range("B" & i + 10) = .Cells(3, i)
        End If
     Next i
  End With
 
  With Application
     .ScreenUpdating = True
     .EnableEvents = True
  End With
 
End Sub
und hier die Datei:
[attachment=12436]
off topic ...

(25.07.2017, 14:27)Rabe schrieb: [ -> ]Hi,

im Thema Analyse mit MMULT() habe ich diverse Fragen zu MMULT gestellt.
Ich habe an der Datei weitergemacht, da das unabhängig von den Antworten für die dortigen Fragen ist.
...
und hier nochmal die Datei:

Hallo Ralf, mal ganz davon abgesehen, dass ich dir hier sicher sowieso nicht helfen kann, aber wenn du an (d)einer Datei weiterarbeitest, dann tu das doch kund, in dem du 'ne Versionsnummer anhängst. Bitte. Danke für's Lesen.
Hi Jörg,

(25.07.2017, 14:52)Jockel schrieb: [ -> ]aber wenn du an (d)einer Datei weiterarbeitest, dann tu das doch kund, in dem du 'ne Versionsnummer anhängst. Bitte. Danke für's Lesen.

bin ich gerade eben selber drauf gekommen, lade sie im Beitrag hoch.

Danke!
Hallo Ralf,

indem du für die zu schreibende Zeile nicht "i" nutzt, sondern eine eigene Variable, die zu Anfang auf  11 gesetzt und vor jedem Eintrag um eins erhöht wird.

ps. Wenn du schon keine benannten Bereiche nutzt solltest du zumindest die strukturabhängigen Konstanten im Deklarationsteil festlegen, damit bei strukturellen Änderungen nicht immer der gesamte code durchsucht werden muss.
Hi Helmut,

(25.07.2017, 15:59)Ego schrieb: [ -> ]indem du für die zu schreibende Zeile nicht "i" nutzt, sondern eine eigene Variable, die zu Anfang auf  11 gesetzt und vor jedem Eintrag um eins erhöht wird.

super, das hat funktioniert! Danke!
Ich habe sie auf 12 gesetzt und nach dem Eintrag erhöht, ist das aus welchem Grund nicht so gut?

(25.07.2017, 15:59)Ego schrieb: [ -> ]ps. Wenn du schon keine benannten Bereiche nutzt solltest du zumindest die strukturabhängigen Konstanten im Deklarationsteil festlegen

Das ist mir grad zu hoch. :29:
Welche strukturabhängigen Konstanten meinst Du, die ich durch benannte Bereiche ersetzen könnte?

Bin immer offen für Verbesserungen.
Hallo Ralf,

zu:
Zitat:Ich habe sie auf 12 gesetzt und nach dem Eintrag erhöht, ist das aus welchem Grund nicht so gut?
Ich hatte mich verzählt und aus Versehen "11" und "nach" geschrieben. Beim Korrekturlesen muste ich einen Wert ändern. Blush

zu:
Zitat:Welche strukturabhängigen Konstanten meinst Du, die ich durch benannte Bereiche ersetzen könnte?
 Sorry, da ist in mir der Prinzipienreiter durchgegangen.
Natürlich muss man bei so kleinen Programmen nicht mit benannten Bereichen oder im Programm benannten Konstanten arbeiten.
Im Prinzip meine ich fast alle in deinem code rot und orange gefärbten Konstanten.
Du kannst ja einmal überlegen welche Programmzeilen du anpassen must, wenn du in einer der Arbeitsblättereine eine Zeile oder Spalte an verschiedenen Stellen einfügst oder löschst.
1) Bei benannten Bereichen muss man hierbei das Programm nicht ändern.
2) Bei im Programm benannten Konstanten muss man diese nur in der Deklaration ändern. Bei einer Vernünftigen Benamung sogar ohne den eventuell komplexen Programmablauf -neu- zu verstehen.