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.

VBA Projekt Lagerhaltung
#21
Nein! Ich versuche alles mitzunehmen was mir an Wissen vermittelt wird! Trotzdem hinterlässt Kritik immer einen faden Nachgeschmack....und davon hatte snb jetzt doch recht viel....
Eine Menge reden, aber nichts sagen können viele...
Antworten Top
#22
Hallo

Noch etwas Feedback von mir.
Mit VBA bin ich nicht so bewandert. Und Userforms finde ich meistens überflüssig. Man kann alles auch direkt in den Tabellen erledigen. Deshalb habe ich mich auf die Tabellen und allgemeine Fragen konzentriert.

Blatt "Übersicht"
Änderungsvorschläge für die Spaltenüberschriften:
Inventierter Bestand -> Anfangsbestand
Könnte missverstanden werden in dem Sinne dass nach jeder Inventur die Werte angepasst werden.
Bestandsbuchungen -> Bestandsveränderungen

Spaltenreihenfolge:
Aktueller Bestand nach Anfangsbestand und Bestandsveränderungen. Die abhängigen Zellen stehen in der Regel links von einer Formel.

Die Formel in der Spalte "Letzte Buchung" ermittelt nicht den Zeitpunkt der letzten Buchung. Hier würde ich MAXWENNS() verwenden. Alternativ je nach Excel-Version: AGGREGAT() oder {MAX(WENN))}. Um die Anzeige der 0 zu unterdrücken würde ich hier ein benutzerdefiniertes Zahlenformat verwenden.

Du schreibst jedem Artikel nur einen Lagerplatz zu. Entspricht das den Gegebenheiten?
Falls ja, dann kann hier eine Gültigkeitsprüfung verwendet werden und im Blatt "Buchungssätze" kann der Lagerplatz mit einer Formel ermittelt werden. 
Falls nein, dann muss die Information hier entfallen oder die "Übersicht" muss mit Pivot-Tabelle und/oder Power Query aufgebaut werden.

In aktuellen Datei gibt es bei "Aktueller Bestand" negative Werte. Das muss bereits bei der Bestandsbuchung verhindert werden.

Blatt "Buchungssätze"
Wofür steht "BS"? Wenn es keine bei den Mitarbeitern bekannte Abkürzung ist dann besser ausschreiben. Gleiches gilt auch für die Werte (AB, ZU). Hier fehlt auch noch die Möglichkeit einer Korrekturbuchung. Ein Textfeld mit Erklärung wäre sicher auch nicht falsch.

Die Spalten "Datum" und "Uhrzeit" sollten durch die Spalte "Zeitstempel" ersetzt werden.

In den Spalten "Ort" und "Ersteller" gibt es keine Gültigkeitsprüfung obwohl entsprechende Listen existieren. Deswegen gibt es hier für "Halle 5" verschiedene Schreibweisen.

Allgemeines
Spalten einheitlich in den verschiedenen Blättern benennen:
Mal "Lagerplatz", mal "Ort". Mal "Artikelnummer/SKU", mal "SKU".

Strukturierte Verweise in den Formeln verwenden.
Wir sehen uns!
... Detlef

Meine Beiträge können Ironie oder Sarkasmus enthalten.

[-] Folgende(r) 1 Nutzer sagt Danke an shift-del für diesen Beitrag:
  • Frogger1986
Antworten Top
#23
@  Snb welche Bereiche würdest du denn mit Multipage Gestalten? Ein Kompletter Aufbau auf Multipage scheint mir unsinnig...

Danke @ Shift - Del damit lässt sich arbeiten..
Eine Menge reden, aber nichts sagen können viele...
Antworten Top
#24
Hallo,

im Dialog zu den Einstellungen führt Dein Code zum Hinzufügen eines Erstellers bei mir zum Absturz von Excel 2016. Das könnte an der intelligenten Tabelle liegen, die es hier
anscheinend nicht mag, per Code eine Zeile hinzuzufügen. Oder auch womöglich an einem anderen Code-Teil. Ich habe das aus Zeitmangel nicht genauer untersucht.
Und, ob das jetzt ein Excel-Bug ist oder nicht, weiss ich (noch) nicht. Kann aber sein, dass es schon bekannt ist.

Du verwendest eine intelligente Tabelle, was an sich sehr praktisch ist, da Du diese unabhängig ihrer Position im Code ansprechen kannst. Deine Einfügeprozedur habe ich
mal rudimentär (man könnte z.B. noch Leertext abfangen, siehe auch Hinweise weiter unten) überarbeitet und diese sähe dann so aus. Beim Testen hatte ich die
Tabelle mal auf Spalte K gelegt, da auch Absturz für Spalte F.

Code:
Private Sub Button_Übertrag_Ersteller_Click()
  
  Dim finden As Range
  
  With ThisWorkbook.Worksheets("Einstellungen") _
      .ListObjects("Ersteller")
    
    Set finden = .ListColumns(1).DataBodyRange.Find(TextBoxErsteller)
    
    If finden Is Nothing Then
        
      If TextBoxErsteller.Text <> "" Then
        
       .ListRows.Add
       .ListRows(.ListRows.Count).Range(1).Value = TextBoxErsteller.Text
        
        Me.TextBoxErsteller = ""
        
        Call UserForm_Initialize
      
      End If
      
    Else
      
      MsgBox "Bereits Vorhanden!"
      
    End If
  
  End With
  
End Sub

Ein paar Anmerkungen zum Code (auch von Dir)...
  • Spreche bitte die Eigenschaften immer vollständig an, also statt TextBoxErsteller dann z.B. TextBoxErsteller.Text oder statt Cells(x,y) dann Cells(x,y).Value.
  • Achte auf die Referenzierung: Set finden = Range("F:F").Find(... bezieht sich auf die aktive Tabelle! Somit auf die Übersicht, gesetzt von Start.
  • Me kannst Du weglassen, denn der Code wird bereits in der UserForm ausgeführt.
  • Ereignisse sind nicht dafür gedacht, diese im Code aufzurufen (Call UserForm_Initialize). Wenn Du Code-Teile aus der Initalisierung brauchst, dann mache für den Teil eine Prozedur und rufe den dann in der Intialisierung und woanders auf.
  • Was mich betrifft, bin ich ein Freund von Variablendeklarationen. Strukturiert und führt vor Augen, um was für Datentypen und Werte es sich handelt.
  • Was mich betrifft, bin ich ein Freund von korrekten Code-Einrückungen (blockweise), macht das Ganze doch leserlicher.
  • Vermeide Umlaute in Prozedur-, Variablen- und weiteren Namen, die den Code betreffen. Auch wenn Du es wahrscheinlich nicht planst, aber z.B. auf einem Mac mit Excel, hättest Du dadurch weniger Probleme. Unabhängig davon, dass ListViews auf einem Mac eh' nicht funktionieren.
  • Was übrigens Multipages betrifft, so kann - muss aber nicht - das Verwenden von ListViews in Multipage-Seiten dazu führen, dass diese sich zur Laufzeit nicht korrekt positionieren.
Gruß
Microsoft Excel Expert · Microsoft Most Valuable Professional (MVP) :: 2011-2019 & 2020-2022 :: 10 Awards
https://de.excel-translator.de/translator :: Online Excel-Formel-Übersetzer :: Funktionen :: Fehlerwerte :: Argumente :: Tabellenbezeichner
[-] Folgende(r) 1 Nutzer sagt Danke an maninweb für diesen Beitrag:
  • Frogger1986
Antworten Top
#25
Moin Mourad!
(01.07.2018, 08:30)maninweb schrieb: Ereignisse sind nicht dafür gedacht, diese im Code aufzurufen

Ein wenig off topic, sorry dafür …
Ich musste mal für ein Projekt der "Rechtsklick-Ersatz-Taste" zwischen Alt Gr und Strg "klarmachen", dass sie gefälligst auch ein Rechtsklickereignis auslösen soll.
Dies wollte der Auftraggeber, weil er sinnvollerweise ein Tastatur-Junkie ist.
Lösung:

Tabelle1
Code:
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)

Private in Public umbenannt.

DieseArbeitsmappe
Code:
Private Sub Workbook_Activate()
Application.OnKey "+{F10}", "RechtsKlickErsatz"
End Sub

Private Sub Workbook_Deactivate()
On Error Resume Next
Application.OnKey "+{F10}"
On Error GoTo 0
End Sub

allgemeines Modul
Code:
Sub RechtsKlickErsatz()
Call Tabelle1.Worksheet_BeforeRightClick(ActiveCell, True)
End Sub

Wüsstest Du eine Lösung abseits meines callen?

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#26
Moin Ralf,

ich würde jetzt dafür API nehmen, wobei es dann ja auch nur in Windows funktionieren würde. Einfacher ist sicherlich, für diesen Ausnahmefall,
doch das Ereignis aufzurufen. Insofern kann man meine vorherige Aussage durchaus etwas relativieren, vermeiden würde ich es generell trotzdem.
Im obigen Fall (Frogger1986) in jedem Fall.

Code:
  Option Explicit
  
' API...
  
  Private Declare PtrSafe Sub apiMouseEvent Lib "user32" _
          Alias "mouse_event" (ByVal dwFlags As Long, ByVal dx As Long, _
          ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
  
' Constants...
  
  Private Const cstMouseRightDown   As Long = &H8
  Private Const cstMouseRightUp     As Long = &H10
  
' Functions...
  
  Sub RechtsKlickErsatz()
    
    apiMouseEvent cstMouseRightDown, 0, 0, 0, 0
    apiMouseEvent cstMouseRightUp, 0, 0, 0, 0
    
  End Sub

Gruß
Microsoft Excel Expert · Microsoft Most Valuable Professional (MVP) :: 2011-2019 & 2020-2022 :: 10 Awards
https://de.excel-translator.de/translator :: Online Excel-Formel-Übersetzer :: Funktionen :: Fehlerwerte :: Argumente :: Tabellenbezeichner
[-] Folgende(r) 1 Nutzer sagt Danke an maninweb für diesen Beitrag:
  • RPP63
Antworten Top
#27
Danke dafür!

Ich habe selbstverständlich getestet und folgendes Problem festgestellt:
Die API simuliert einen Rechtsklick auf die Position des Mauszeigers.
Gewünscht war damals aber natürlich der "Rechtsklick" auf die aktive Zelle.
Nach Studium der MS-Seite könnte man natürlich auch den Mauszeiger vorher mittels API positionieren.
Wäre für mich hier aber eher ein Fall für die armen Spatzen (die mit den Kanonen).
 
Anyway:
Ich habe es mir mal für meine API-Sammlung verlinkt.

Gruß und Danke,
Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#28
Vielen dank für die investierte Zeit euch allen.. 

Die Bereiche für "Ersteller" und "Orte" habe ich in normale Bereiche Konvertiert.. das war dann auch des Fehlers Lösung zum Absturz!  -------> Deinen Code teste ich noch
Der Fehler mit der Listview ärgert mich tierisch,  aber ich bin schon dabei diese gegen Listboxen zu tauschen... ----->  Passiert mir nicht noch einmal!
Der Fehler mit der Optik im Code wird mir auch gerade beim überarbeiten bewusst... das ist echt schwierig.. ---> Passiert mir nicht noch einmal!
Mit den Ereignissen wollte ich Fehler minimieren, es etwas übersichtlicher gestalten und mir das Hacken ersparen! -------> Werde ich mit der Optik im Code versuchen
umzubauen 

Frei nach dem Motto "Mach`s zu deinem Projekt!"
Eine Menge reden, aber nichts sagen können viele...
Antworten Top
#29
@SNB 

Ich hab mich etwas eingelesen zur Multipage und ziehe meine Frage zurück..  Angel 
Ganz klar gehört alles in die Multipage!
Eine Menge reden, aber nichts sagen können viele...
Antworten Top
#30
Manchmal sollte man nicht reagieren, doch warten bis  .....   Idea   (in NL.  'tot het kwartje valt')  :19:


Statt 'commandbuttons' im Startuserfom hast du nun 'Tabs' im Multipage.
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
[-] Folgende(r) 1 Nutzer sagt Danke an snb für diesen Beitrag:
  • Frogger1986
Antworten Top


Gehe zu:


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