Registriert seit: 02.12.2017
Version(en): Office 365
30.06.2018, 20:39
(Dieser Beitrag wurde zuletzt bearbeitet: 30.06.2018, 20:39 von Frogger1986.)
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....
Registriert seit: 12.04.2014
Version(en): Office 365
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.
Registriert seit: 02.12.2017
Version(en): Office 365
@ 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..
Registriert seit: 08.05.2014
Version(en): Office 2010, Office 365, Office 365 Betakanal
01.07.2018, 09:30
(Dieser Beitrag wurde zuletzt bearbeitet: 01.07.2018, 09:31 von maninweb.)
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 Awardshttps://de.excel-translator.de/translator :: Online Excel-Formel-Übersetzer :: Funktionen :: Fehlerwerte :: Argumente :: Tabellenbezeichner
Registriert seit: 12.10.2014
Version(en): 365 Insider (64 Bit)
01.07.2018, 09:52
(Dieser Beitrag wurde zuletzt bearbeitet: 01.07.2018, 09:52 von RPP63.)
Moin Mourad! (01.07.2018, 09: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: Tabelle1Code: Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Private in Public umbenannt. DieseArbeitsmappeCode: 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 ModulCode: 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)
Registriert seit: 08.05.2014
Version(en): Office 2010, Office 365, Office 365 Betakanal
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 Awardshttps://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:1 Nutzer sagt Danke an maninweb für diesen Beitrag 28
• RPP63
Registriert seit: 12.10.2014
Version(en): 365 Insider (64 Bit)
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)
Registriert seit: 02.12.2017
Version(en): Office 365
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!"
Registriert seit: 02.12.2017
Version(en): Office 365
@SNB Ich hab mich etwas eingelesen zur Multipage und ziehe meine Frage zurück.. Ganz klar gehört alles in die Multipage!
Registriert seit: 29.09.2015
Version(en): 2030,5
01.07.2018, 12:59
(Dieser Beitrag wurde zuletzt bearbeitet: 01.07.2018, 12:59 von snb.)
Manchmal sollte man nicht reagieren, doch warten bis .....  (in NL. 'tot het kwartje valt') :19: Statt 'commandbuttons' im Startuserfom hast du nun 'Tabs' im Multipage.
Folgende(r) 1 Nutzer sagt Danke an snb für diesen Beitrag:1 Nutzer sagt Danke an snb für diesen Beitrag 28
• Frogger1986
|