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 sind; Die von diesem Forum gesetzten Cookies düfen nur auf dieser Website verwendet werden und stellen kein Sicherheitsrisiko dar. Cookies auf 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.

Die Updates sind abgeschlossen. Bitte meldet eventuelle Bugs und Auffälligkeiten im entsprechenden Forum.
Sollte das Loginfenster nicht sichtbar sein, ist es unten links. Entweder Ihr loggt Euch dort ein oder löscht den Browsercache und versucht es noch einmal.


Gefährdungsanalyse mit Maßnahmen-Blatt
#1
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:

.xlsb   Gefährdungsanalyse V2.xlsb (Größe: 162,45 KB / Downloads: 5)
Antwortento top
#2
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.
cu Jörg eine Rückmeldung wäre ganz reizend XL2003 bis XL2013
Antwortento top
#3
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!
Antwortento top
#4
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.
helmut

Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität.
Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen."
Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.





[-] Folgende(r) 1 Benutzer sagt Danke an Ego für diesen Beitrag:
  • Rabe
Antwortento top
#5
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.
Antwortento top
#6
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.
helmut

Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität.
Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen."
Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.





[-] Folgende(r) 1 Benutzer sagt Danke an Ego für diesen Beitrag:
  • Rabe
Antwortento top


Gehe zu:


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