MS-Office-Forum

Zurück   MS-Office-Forum > Microsoft Office > Microsoft Excel
Registrieren Forum Hilfe Alle Foren als gelesen markieren

Banner und Co.

Antworten
Ads
Themen-Optionen Ansicht
Alt 08.02.2018, 22:34   #16
Metro_82
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Hallo Zusammen,
ich habe leider heute keine Zeit mehr gehabt um all eure Hinweise einzubinden. Ich werde aber morgen weiter machen und sicher mit weiteren Fragen ums Eck kommen.

Eine Sache habe ich aber noch für Ralf, auch auf die Gefahr hin, dass du genervt bist:

Zitat: von R J Beitrag anzeigen

Nein. Du müsstest zunächst den Cursor in eine beschriebene Zelle (am besten in Zeile 2) setzen und im Menü Start auf Als Tabelle formatieren klicken und den Anweisungen folgen. Im Entwurfsmodus solltest Du sie umbenennen, weil der Standardname (Tabelle1) eherr verwirrend ist. Ich habe sie tabData genannt. Dann musst Du im Eigenschaftenfenster dDeiner Form die Rowsource der Comboboxen entfernen und im Initialize Ereignis der Form zum füllen der CB (für die Supplier) folgendes schreiben:

Code:

Private Sub UserForm_Initialize()
'Oder so, mit der Überschrift der Spalte  'Supplier
    CB_Supplier.RowSource = Tabelle1.Range("tabData[[#DATA],[Supplier]]").Address
End Sub

Ich habe mein Stammdatenblatt als "Tabelle" formatiert und den Reiter nach wie vor "Data" genannt.
Was ich gerade nicht nachvollziehen kann, ist was du mit "tabData" meinst?
Kannst du mir nur kurz erläutern, was genau dieser Teil macht:
So habe ich es jetzt versucht einzubinden
Code:

Private Sub Input_Motor_Initialize()
Dim Data As Worksheet
'Oder so, mit der Überschrift der Spalte  'Supplier
    CB_Supplier.RowSource = Data.Range("tabData[[#DATA],Supplier]]").Address
End Sub
Danke dir und natürlich allen anderen für eure Hilfe.

Gruß und Glückauf
Guido
Metro_82 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 08.02.2018, 23:40   #17
R J
MOF Meister
MOF Meister
Standard

Zitat:

Ich habe mein Stammdatenblatt als "Tabelle" formatiert und den Reiter nach wie vor "Data" genannt.

...es geht nicht um den Tabellenreiter, sondern um eine Tabelle IN der Tabelle. Die erstellt man, so wie im Post #10 beschrieben. Nochmal wiederhole ich das nicht.
Aber am Besten, Du vergisst das. Es ist eh nie sinnvoll, wenn mehrere Leute unabhängig voneinander an einem Programm arbeiten. Deswegen gebe ich ab an die, die Dir schon Vorschläge unterbreitet haben.

Zitat:

Kannst du mir nur kurz erläutern, was genau dieser Teil macht:
So habe ich es jetzt versucht einzubinden

Wenn Du den Bereich nicht als formatierte Tabelle erstellt hast, kannst Du das rausschmeißen....

__________________

Ciao, Ralf

Kommt mir irgendwie bekannt vor...
Auf, zum Markplatz der Ideen!
Der sicherste Ansatz für einen Irrtum ist der Glaube, alles im Griff zu haben.
Nur, weil ich den Recorder bedienen kann, macht mich das noch lange nicht zum Musiker.



Geändert von R J (08.02.2018 um 23:44 Uhr).
R J ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 09.02.2018, 06:23   #18
Metro_82
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Guten Morgen Ralf,

bei allem Respekt du willst mir jetzt hoffentlich nicht erklären oder gar weiß machen das genau eine Person jeweils Microsoft Word, Excel, Power Point oder gar Windows 10 programmiert hat.

Ich respektiere deine Entscheidung, aber ich habe dir geschrieben, dass ich die Tabelle als Tabelle formtiert habe. So wie du es beschrieben hast. Offensichtlich reicht das aber eben nicht aus.
Ich werde mich schlau machen, was ich falsch gemacht habe.

Tut mir leid, dass du dich mit lauter Dummys in diesem Forum abgeben musst

Besten Dank für deine Stellungnahme.
Guido
Metro_82 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 09.02.2018, 07:08   #19
RPP63neu
MOF Meister
MOF Meister
Standard

Zitat: von Metro_82 Beitrag anzeigen

bei allem Respekt du willst mir jetzt hoffentlich nicht erklären oder gar weiß machen das genau eine Person jeweils Microsoft Word, Excel, Power Point oder gar Windows 10 programmiert hat.

[off topic]
Moin Guido!

Nö, sicher nicht!
Die arbeiten aber koordiniert zusammen (sollte zumindest so sein).
Dies ist in einem Forum eher nicht gegeben.
Da greift dann wieder das Sprichwort mit den vielen Köchen und dem Brei.
Nix anderes hat Dir Ralf geschrieben.

Gruß Ralf

__________________

Meine Logik war nicht fehlerhaft, nur meine Interpretation!
Tuvok
RPP63neu ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 09.02.2018, 14:49   #20
Phi.VBA
MOF User
MOF User
Standard

@Metro

den Code, der mit

PHP-Code:

Datasheet(60) As DBlatt
Public As Integer 'Zeiger auf bestimmtes Datenblatt

'
Variablen der Userform Daten die an die Excel-Datei übergeben werden sollen
Public Type Datasheet
Project data
vProject 
As String
vDate 
As Date 
hatte ich als "gut" eingeschätzt, aber bei genauerer Prüfung ist dieser (lange) Code an der falschen Stelle plaziert (muss in den Deklarationsteil) und vermutlich überflüssig. Nach dem Ausfüllen sollten die Felder der userForm direkt in die Tabelle geschrieben werden.

Die Felder der userForm sind zwar inhaltlich benannt, aber dies erschwert das Übertragen in einer Schleife. So muss wohl jedes Element einer Spalte in Sheet zugeordnet werden.

Noch einmal die Frage nach einem Dienstleister, in jedem Fall erscheint mir ein Spezialist mit viel Zeit notwendig.

mfg
Phi.VBA ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 09.02.2018, 16:05   #21
R J
MOF Meister
MOF Meister
Standard

Zitat:

Offensichtlich reicht das aber eben nicht aus.
Ich werde mich schlau machen, was ich falsch gemacht habe.

...Du wirst sie vermutlich nicht umbenannt haben...

__________________

Ciao, Ralf

Kommt mir irgendwie bekannt vor...
Auf, zum Markplatz der Ideen!
Der sicherste Ansatz für einen Irrtum ist der Glaube, alles im Griff zu haben.
Nur, weil ich den Recorder bedienen kann, macht mich das noch lange nicht zum Musiker.


R J ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 09.02.2018, 16:08   #22
H_E_K
MOF User
MOF User
Standard

Zitat: von Phi.VBA Beitrag anzeigen

@Metro

den Code, der mit

PHP-Code:

Datasheet(60) As DBlatt ..... 
hatte ich als "gut" eingeschätzt, aber bei genauerer Prüfung ist dieser (lange) Code an der falschen Stelle plaziert (muss in den Deklarationsteil)...

Genau das hatte ich ihm bereits in Beitrag #13 mitgeteilt.

Zitat:

und vermutlich überflüssig. Nach dem Ausfüllen sollten die Felder der userForm direkt in die Tabelle geschrieben werden.

Oder eben auch nicht. Er erfasst eine Menge Daten zu Motoren, die er in einer sebstdefinierten Variablen gut speichern kann, was Vorteile hat, wenn er mit den Daten weiter arbeiten oder sie in einer csv-Datei speichern will.

Zitat:

Die Felder der userForm sind zwar inhaltlich benannt, aber dies erschwert das Übertragen in einer Schleife. So muss wohl jedes Element einer Spalte in Sheet zugeordnet werden.

Wie willst du das in einer Schleife machen? In Visual Basic ginge das, aber VBA kennt keine indizierten Userform-Steuerelemente (z.B. txtWert(n))

Zitat:

Noch einmal die Frage nach einem Dienstleister, in jedem Fall erscheint mir ein Spezialist mit viel Zeit notwendig.

mfg

Sehe ich normalerweise auch so, in diesem Fall aber nicht. Er hat einige Aufgaben schon sehr logisch und strukturiert umgesetzt, ich denke, er bekommt das alleine hin, mit der einen oder anderen Hilfe im Detail.
In diesem Thread hacken einige Poster sehr auf ihm herum, was ich völlig daneben finde. Die meisten von uns sind wohl irgendwann einmal so in VBA eingestiegen und haben uns über diverse Aha-Effekte weiter entwickelt. Gönnt ihm das doch!

__________________

Gruß
Hans


Mit VBA löst du jedes Problem - und schaffst mindestens zwei neue ...
Windows 7 Pro, Windows 10 Home, Office 2013 H&S
H_E_K ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 09.02.2018, 19:47   #23
Metro_82
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Hallo Zusammen,

ich habe nun einen großen Teil des Tages damit verbracht mein Programm aufzuräumen und weiter zu vervollständigen.

So ist nun der Stand:

Ich kann alle UserForm Felder in eine Variable speichern und auch in das richtige TabellenBlatt kopieren. Die Daten werden nach erfolgtem Kopieren gelöscht oder eben separat löschen und ich kann meine Hilfe-Datei aufrufen.

Was nun noch nicht funktioniert:
- Das besagte variable/dynamische Füllen der Comboboxen aus dem Blatt "Data" Tabelle "tabData" (habe die Tabelle als Tabelle deklariert und auch umbenannt)
- Die Werte werden immer in die letzte Zeile der jeweiligen "Tabelle_tabMaster, tabShearer, tabPlow...etc geschrieben. Egal wie viele Zeilen sie hat.
- Der Datensatz wird bei jedem Kopieren-Click in dem jeweiligen Tabellenblatt überschrieben.

Hier würde ich das Programm gerne derart ändern, dass in die erste Zeile (also immer in Zeile 6) kopiert wird und alle Einträge automatisch nach unten wandern.

Was mir sonst noch fehlt ist eine Überwachung, dass CB_Machine zwingend ausgefüllt werden muss. Ich werde wahrscheinlich eine Sub erstellen, die prüft, dass alle Eingaben gemacht worden sind und möchte die Textfelder zusätzlich grün hinterlegen, so dass man bei der Eingabe schon sieht, was man vergessen hat.

Des Weiteren möchte ich verhindern, dass man nicht aus versehen Copy klickt, obwohl keine brauchbaren Daten enthalten sind.

Da die Copy Sub sehr aufgeblasen ist, weiß ich nicht, ob man sich eine Function bauen kann, die an die zwei Stellen die geändert werden müssen die entsprechenden Werte einträgt. Das würde sehr dazu beitragen, dass die Sub nachvollziehbar und Schlank wird.

Ich habe natürlich die Motor.xlsm angefügt, damit die, die Interesse haben mich zu unterstützen, wertvolle Tips geben können.

Ich danke euch allen wirklich sehr für eure Kommentare und natürlich auch Code-Vorschläge.

Schönen Abend und Wochenende
Glückauf
Guido

Nachtrag: Auf die Frage nach einem Spezialisten:
Ich bin mir sicher, dass es an vielen Stellen schönere, cleverere oder eben einfach bessere Lösungen gibt.
Aber da dieses Projekt kein "privates" sondern ein Projekt für meine Abteilung ist, und ich einfach Spaß an dem was ich da tue gewinne - Muss es OHNE finanzielle Aufwendung gehen.

Ich verstehe, dass viele von euch Wahrscheinlich Geld damit verdienen und meine Datei auch kein Basic mehr ist: Dennoch möchte ich diese Datei natürlich mit eurer Hilfe so kostengünstig wie möglich fertig stellen.
Und alle die jetzt sagen mögen Warum solltet ihr meine Firma unterstützen: Dafür habe ich vollstes Verständnis bitte euch dennoch es zu tun, da auch ich Freizeit dafür opfere um eben besser und besser zu werden.

Ich entschuldige mich gleich für die Romane, will nur transparent sein..
Angehängte Dateien
Dateityp: zip Motor-xlsm.zip (170,5 KB, 3x aufgerufen)

Geändert von Metro_82 (09.02.2018 um 19:54 Uhr).
Metro_82 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 09.02.2018, 20:41   #24
H_E_K
MOF User
MOF User
Standard

Hallo Guido!

Du hast eine erfrischend aufrichtige Art, das ist einer der Gründe, warum ich dir weiter helfen werde. Der andere ist, dass mir daran liegt, jemanden zur intensiveren Beschäftigung mit VBA zu "verführen", weil es atemberaubend ist, was man alles damit machen kann - aber da liegen noch Welten vor dir, was dich nicht entmutigen sollte.

Heute ist es mir schon zu spät dazu und ich arbeite auch noch an einer eigenen Sache. Morgen schaue ich mir das an und melde mich wieder!

__________________

Gruß
Hans


Mit VBA löst du jedes Problem - und schaffst mindestens zwei neue ...
Windows 7 Pro, Windows 10 Home, Office 2013 H&S
H_E_K ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 10.02.2018, 09:18   #25
H_E_K
MOF User
MOF User
Standard

So, Guido, gehen wir es einmal an.
Als erstes die Frage: Was willst du eigentlich mit der Userform anfangen? Willst du die Daten aus einer Tabelle darauf darstellen, um sie ggfs. zu verändern und wieder zu speichern? Oder willst du neue Motoren erfassen und in die Tabelle übernehmen?
Unabhängig davon: Das Formatieren bestimmter Zellbereiche als "Tabelle", wie hier von jemandem empfohlen, ist eher hinderlich, wenn du VBA einsetzen willst. Deshalb funktioniert nämlich auch die Ermittlung der nächsten freien Zeile zum Eintragen der Daten nicht. Aber dazu mehr später.

Zitat: von Metro_82 Beitrag anzeigen

Was nun noch nicht funktioniert:
- Das besagte variable/dynamische Füllen der Comboboxen aus dem Blatt "Data" Tabelle "tabData" (habe die Tabelle als Tabelle deklariert und auch umbenannt)

Wie gesagt brauche ich die Info, wann Daten vom Sheet in die Userform und wann umgekehrt von der Userform aufs Sheet transferiert werden sollen. Die Realisierung ist dann kein Hexenwerk.

Zitat:

- Die Werte werden immer in die letzte Zeile der jeweiligen "Tabelle_tabMaster, tabShearer, tabPlow...etc geschrieben. Egal wie viele Zeilen sie hat.

Wenn du die Zellbereiche eben nicht als Tabelle formatierst funktioniert es. Du brauchst übrigens die Zuweisung "lngErste = ..." nur einmal am Anfang vorzunehmen - die Zeile ändert sich ja dann nicht mehr.

Zitat:

- Der Datensatz wird bei jedem Kopieren-Click in dem jeweiligen Tabellenblatt überschrieben.

nein, bei den oben beschriebenen Änderungen nicht mehr, er wird in die erste freie (!) Zeile von oben aus geschrieben, also quasi unten angefügt.

Zitat:

Hier würde ich das Programm gerne derart ändern, dass in die erste Zeile (also immer in Zeile 6) kopiert wird und alle Einträge automatisch nach unten wandern.

Ich würde das zwar so nicht machen, aber bitte. Bei der Gelegenheit ein genereller Tipp: Wenn du eine so (scheinbar) einfache Aufgabe in VBA erledigen willst, wie eine Zeile einzufügen (die Zeile 6, die anderen rutschen ja dann automatisch nach unten), dann nutze gerade als Newbie den Makrorekorder (Makro aufzeichnen)! Du bekommst dann zum Beispiel diesen Code:
Code:

Sub Makro1()
'
' Makro1 Makro
'

'
    Sheets("Master").Select
    ActiveWindow.SmallScroll Down:=-100
    Rows("6:6").Select
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
End Sub
Der ist typischerweise total überfrachtet, die Scroll-Anweisung kannst du löschen, und das .Select Selection. sollte raus. Der Code sieht dann aufgeräumt so aus:
Code:

Sub ZeileDazu()
'Neue Zeile einfügen bei Row=6
    Sheets("Master").Rows("6:6").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
End Sub
Natürlich solltest du das Sheet über eine Variable ansteuern, oder die With / End With-Umklammerung nutzen, wie du es ja auch schon tust. Dann wäre der Code noch kürzer:
Code:

'Neue Zeile einfügen bei Row=6
    .Rows("6:6").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove

Zitat:

Was mir sonst noch fehlt ist eine Überwachung, dass CB_Machine zwingend ausgefüllt werden muss. Ich werde wahrscheinlich eine Sub erstellen, die prüft, dass alle Eingaben gemacht worden sind und möchte die Textfelder zusätzlich grün hinterlegen, so dass man bei der Eingabe schon sieht, was man vergessen hat.

Des Weiteren möchte ich verhindern, dass man nicht aus versehen Copy klickt, obwohl keine brauchbaren Daten enthalten sind.

Das ist nun relativ leicht, ergibt aber längeren Code. Natürlich könntest du in einer Schleife abfragen, ob irgendwo nichts ausgefüllt oder ausgewählt ist. Aber dann würde ich eher auch gleich die Logik der Eingaben mit überprüfen.
Das machst du so:
Du setzt die Enabled-Eigenschaft des Buttons "Copy" auf False, damit kann er nicht ausgelöst werden. Für jedes Steuerelement schreibst du jetzt in das Change-Ereignis den Aufruf einer Sub-Routine, die meinetwegen "Sub CheckIt" heißt. Dort prüfst du für jedes Steuerelement, ob es ausgefüllt ist, ob der Wert stimmen kann (Efficency > 100% ???), bzw. ob in den Comboboxen ein Wert ausgewählt ist. Wenn auch nur bei einer Detailprüfung ein Fehler gefunden wird, verlässt du die Routine mit Exit Sub und nichts ändert sich - der Button bleibt gesperrt. Sind aber am Ende der Sub alle Prüfungen erfolgreich gewesen, dann setzt du die Button-Eigenschaft Enabled auf True, der Copy-Befehl ist freigegeben.
Übrigens, bei der Gelegenheit: Bei der Bezeichnung (Namen) der Steuerelemente haben sich bestimmte Konventionen bewährt. Du wählst bei Comboboxen korrekt CB_, allerdings bei Buttons auch. Ein Button sollte im Code als solcher erkennbar sein, z.B. durch das Prefix 'cmd' (Command).

Zitat:

Da die Copy Sub sehr aufgeblasen ist, weiß ich nicht, ob man sich eine Function bauen kann, die an die zwei Stellen die geändert werden müssen die entsprechenden Werte einträgt. Das würde sehr dazu beitragen, dass die Sub nachvollziehbar und Schlank wird.

Überflüssig, wenn du das wie oben beschrieben machst.
Übrigens, eine Funktion nimmt man üblicherweise, um wiederkehrende Befehlsfolgen einfach aufzurufen, meist mit Übergabe eines Parameters an die Funktion. Oft von mir verwendet:
Code:

Public Function WoTag(Datum)
Dim a As Date
    b = Weekday(Datum, vbUseSystemDayOfWeek)
    WoTag = WeekdayName(b, False, vbUseSystemDayOfWeek)
End Function
Genutzt werden kann sie im Sheet mit der Formel '=WoTag(Zellwert...)' oder per VBA mit
Code:

Dim WochenTag as String
WochenTag=WoTag(Date)
Daher sollte deine "Clean"-Routine eine Sub sein, keine Funktion.

Du fragst dich wahrscheinlich, warum ich dir die Einrichtung dieser 'Datenblatt'-Variablen empfohlen habe. Darauf komme ich zurück, wenn du die hier angesprochenen Stolpersteine aus dem Weg geräumt hast, das würde jetzt den Rahmen sprengen.

__________________

Gruß
Hans


Mit VBA löst du jedes Problem - und schaffst mindestens zwei neue ...
Windows 7 Pro, Windows 10 Home, Office 2013 H&S
H_E_K ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 10.02.2018, 13:18   #26
R J
MOF Meister
MOF Meister
Standard

@Hans,

Zitat:

Unabhängig davon: Das Formatieren bestimmter Zellbereiche als "Tabelle", wie hier von jemandem empfohlen, ist eher hinderlich, wenn du VBA einsetzen willst. Deshalb funktioniert nämlich auch die Ermittlung der nächsten freien Zeile zum Eintragen der Daten nicht. Aber dazu mehr später.

Dieser jemand war ich und ...diese (falsche) Aussage bedarf einer Korrektur.

Ich stehe nach wie vor zu meiner Empfehlung. Der Einsatz von formatierten Tabellen ist weder hinderlich und selbstverständlich lässt sich da auch unter VBA die nächste freie Zeile ermitteln. Vorausgesetzt, man weiß wie es geht. Ich behaupte, damit lässt es sich (etwas Erfahrung vorausgesetzt) sogar wesentlich einfacher arbeiten.

Allerdings bestehe ich nicht drauf.... jeder so, wie er mag...

__________________

Ciao, Ralf

Kommt mir irgendwie bekannt vor...
Auf, zum Markplatz der Ideen!
Der sicherste Ansatz für einen Irrtum ist der Glaube, alles im Griff zu haben.
Nur, weil ich den Recorder bedienen kann, macht mich das noch lange nicht zum Musiker.



Geändert von R J (10.02.2018 um 13:23 Uhr).
R J ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 10.02.2018, 13:43   #27
H_E_K
MOF User
MOF User
Standard

Zitat: von R J Beitrag anzeigen

Vorausgesetzt, man weiß wie es geht.

Nur zu, ich bin gespannt.

__________________

Gruß
Hans


Mit VBA löst du jedes Problem - und schaffst mindestens zwei neue ...
Windows 7 Pro, Windows 10 Home, Office 2013 H&S
H_E_K ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 10.02.2018, 16:10   #28
Phi.VBA
MOF User
MOF User
Standard

@Metro

hier ein Mini-Beispiel, eine KomboBox auf einer userform mit eindeutigen Werten aus einem sheet zu befüllen.

Der Code kopiert eine Spalte in einen freien Berich, löscht Duplikate und befüllt eine ComboBox.

Alle Ranges müssen angepasst werden, die Kopie am besten in ein temporäres sheet.

Grüße
Angehängte Dateien
Dateityp: xlsm Metro_Test.xlsm (18,1 KB, 4x aufgerufen)
Phi.VBA ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 10.02.2018, 17:51   #29
Metro_82
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Hallo Zusammen,
[Off-Topic]
eines vorweg: Ich möchte hier kein Feuer legen oder gar einen Streit provozieren.

Deswegen @ Ralf: Guck dir meinen Code an setze das Befüllen mit deiner Methode um und du sagst uns, ob es immer noch geht oder nicht. Falls es geht, kannst du mir wenigstens einen kleinen Hinweis geben, was falsch gelaufen ist.
Wenn ich es dann hinbekomme, haben wir alle was davon:
Ralf weiß das es geht,
Hans lernt vielleicht etwas neues kennen
und ich habe eine funktionierende Lösung.

Falls es aber nicht geht, ist es eben so, dass Ralf etwas gelernt hat und Hans hatte recht.

Ist das nicht am Ende Sinn und Zweck des Forums? Sich über Probleme zu unterhalten und Lösung gemeinschaftlich verfügbar zu machen?
[/Off-Topic

Zitat: von H_E_K Beitrag anzeigen

Als erstes die Frage: Was willst du eigentlich mit der Userform anfangen? Willst du die Daten aus einer Tabelle darauf darstellen, um sie ggfs. zu verändern und wieder zu speichern? Oder willst du neue Motoren erfassen und in die Tabelle übernehmen?

Die Eingabemaske soll am Ende des Tages ein vollständiges Werkzeug zur Verwaltung vom Motoren- Daten sein - oder eben weiter gedacht für alle Komponenten und Maschinen die wir so haben. Deswegen eine übergeordnete Projektverwaltung mit einzelnen Mappen für jede Komponente.

Dieses Tool soll also in erster Linie Motorendaten einlesen. Das heißt ich bekomme in Motordatenblatt trage alle (oder alle vorhandenen Werte - dazu später mehr) in die Maske ein und kopiere sie mit cmdCopy in die Masterliste und in das jeweilige Tabellenblatt - je nachdem welche Auswahl ich bei TB_Machine gewählt habe.

Des Weiteren soll mit cmdSearch eine Suche ausgeführt werden. Hier möchte ich im Tabellenblatt "Master" alle Einträge meiner Eingaben aus der Maske suchen und in einem separaten "Result"- Tabellenblatt temporär auflisten
Natürlich könnte man auch einfach in die Master gehen und mit Autofilter suchen... ich würde es aber eben gerne "Automatisieren".

Die wohl schwierigste Aufgabe übernimmt cmdCalculation. Hier sollen entsprechend meiner Auswahl der Maske für einen spezifischen Motor eine Preisentwicklung erstellt werden.
Das heißt, wenn ich einen Motortyp in mehreren Projekten verwendet habe, hat er bei entsprechender Zeit einen unterschiedlichen Preis.
Das heißt in ein paar Jahren kann ich gemessen über die Zeit einen voraussichtlichen Preis ermitteln ohne direkt beim Hersteller anzufragen. Damit könnte ich schnell einen Budgetpreis abgeben und Projekte schnell kalkulieren.

Mit cmdUpdate möchte ich einen spezifischen Motor, also über Internal oder Supplier PN, aufrufen eine Auswahl Liste aller verbauten Motoren angezeigt bekommen und die geänderten Werte wieder für die ausgewählten Motoren zurück speichern (updaten).

Zitat: von H_E_K Beitrag anzeigen

Du brauchst übrigens die Zuweisung "lngErste = ..." nur einmal am Anfang vorzunehmen - die Zeile ändert sich ja dann nicht mehr.

Das hätte mir auch klar sein können
Habe also den Code minimal übersichtlicher gemacht. Danke

Zitat: von H_E_K Beitrag anzeigen

nein, bei den oben beschriebenen Änderungen nicht mehr, er wird in die erste freie (!) Zeile von oben aus geschrieben, also quasi unten angefügt.

Ich würde das zwar so nicht machen, aber bitte.

Der Grund warum ich immer in die Zeile 6 schreiben will, ist einfach der, dass die neusten Eintragungen immer oben stehen und ich nicht scrollen muss, wenn ich direkt in der Liste suche.

Zitat: von H_E_K Beitrag anzeigen

Bei der Gelegenheit ein genereller Tipp: Wenn du eine so (scheinbar) einfache Aufgabe in VBA erledigen willst..., dann nutze gerade als Newbie den Makrorekorder (Makro aufzeichnen)!

Dafür müsste ich wissen, wie man sowas macht

Zitat: von H_E_K Beitrag anzeigen

Natürlich solltest du das Sheet über eine Variable ansteuern, oder die With / End With-Umklammerung nutzen, wie du es ja auch schon tust. Dann wäre der Code noch kürzer:

Code:

'Neue Zeile einfügen bei Row=6
    .Rows("6:6").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove

Das habe ich versucht, hat aber nicht funktioniert.
Kommt die Fehlermeldung: Fehler beim Kompilieren: Erwartet: Anweisungsende
Code:

With Worksheets(CB_Machine.Value)
        'lngErste = .Cells.Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
        lngErste = .Rows("6:6").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove

Zitat: von H_E_K Beitrag anzeigen

Das ist nun relativ leicht, ergibt aber längeren Code. Natürlich könntest du in einer Schleife abfragen, ob irgendwo nichts ausgefüllt oder ausgewählt ist. Aber dann würde ich eher auch gleich die Logik der Eingaben mit überprüfen.

Das ist eine gute Idee. Werde mal im Deteil überlegen, wie ich das genau mache und was da Sinnvoll ist. Denn es ist leider nicht zwangsläufig so, dass IMMER alle Felder ausgefüllt sein werden und auch nicht müssen.

Zitat: von H_E_K Beitrag anzeigen

Daher sollte deine "Clean"-Routine eine Sub sein, keine Funktion.

Ich benutze die Clean- Operation mehrfach. Das wäre doch genau der Anwendungsfall, oder?

Zitat: von H_E_K Beitrag anzeigen

Du fragst dich wahrscheinlich, warum ich dir die Einrichtung dieser 'Datenblatt'-Variablen empfohlen habe.

Ich vermute, um die Werte der Daten wirklich Global zu nutzen. Also auch bei der Suche, oder beim schreiben in das temporäre "Result"- Blatt.

Zitat: von Phi.VBA Beitrag anzeigen

@Metro
hier ein Mini-Beispiel, eine KomboBox auf einer userform mit eindeutigen Werten aus einem sheet zu befüllen.

Hallo Phi.VBA,

danke für deinen Lösungsansatz. Hier müsste ich aber auch immer die Zellen fest definieren. Ralf sagt er hat eine Lösung die dynamisch nach Spaltenüberschrift sucht und mir entsprechend dynamisch die Werte in die Combobox befüllt.

Das wäre eben perfekt, wenn das gehen würde.

Ich bin nun sehr auf eure Reaktionen gespannt und wünsche euch ein schönes Wochenende.

Gruß und Glückauf
Guido

Geändert von Metro_82 (10.02.2018 um 17:55 Uhr).
Metro_82 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 10.02.2018, 18:52   #30
H_E_K
MOF User
MOF User
Standard

Hallo an ALLE!

Damit es nicht zu unübersichtlich wird, werde ich der Reihe nach die Punkte abarbeiten, ohne zu zitieren.
Keine Sorge, Guido, von Streit sind wir hier weit entfernt. Es ist nur schwierig, wenn verschiedene Leute verschiedene Lösungsansätze vor Augen haben, die sich miteinander dann nicht immer vertragen. Meine Bitte aber an alle, auch an dich: zäumt das Pferd nicht von hinten auf, sondern lasst uns der Reihe nach vorgehen!
1. Die Befüllung der Userform (nenne ich jetzt Maske)
Du hast ja erst einmal die Daten 'zu Fuß' in die Userform gesetzt, wahrscheinlich, um überhaupt erst einmal mit der Verarbeitung von Daten beginnen zu können. Da du aber primär mit der Userform Daten erfassen willst, und erst wenn das funktioniert ggfs. mit derselben Maske Daten von den Sheets holen willst, um sie anzusehen oder zu verändern, können wir das Holen der Daten vom Sheet erst einmal außen vor lassen. Welches übrigens programmiertechnisch wirklich Kinderkram ist.
Allerdings müssen wir über die ComboBoxen reden. Die dienen ja dem Anwender zur Auswahl einer Option aus mehreren vorgegebenen. Um diese Auswahlwerte in die Comboboxen zu bekommen gibt es zwei Möglichkeiten: entweder du holst sie aus einem Tabellenbereich, dann ist der Ansatz von Phil zielführend. Wenn es aber nur um wenige, feststehende Optionen geht, dann kannst du sie auch direkt in die Comboboxen übernehmen.
Code:

Private Sub UserForm_Activate()
With CB_Voltage
    .AddItem "220"       'Das "V" ist verzichtbar, steht ja im Text und würde hier die Weiterverarbeitung erschweren
    .AddItem "360"
    .AddItem "3300"     '... usw.
End With
End Sub
Dazu grundsätzlich: In die UserForm_Activate - Prozedur schreibst du alles, was vor dem Öffnen derselben auf ihr bereit gestellt werden soll. So kannst du erst einmal alle Comboboxen befüllen, damit du diese überhaupt sinnvoll nutzen kannst. Die in den Steuerelementen fest vorgegebenen Werte (z.B. "3.300 V" musst du natürlich entfernen.
Als nächstes solltest du dich erst einmal darauf konzentrieren, die in die Maske eingegebenen Daten zu validieren, also zu prüfen, um erst bei korrekter Befüllung die Daten zum Kopieren freizugeben.
Für diesePrüfroutine gebe ich dir jetzt nur den Rahmen mit einem Beispiel, schließlich sollst du bei der Gelegenheit lernen, deine Aufgaben in VBA selbst zu lösen:
In den Deklarationsteil nehme ich auf:
Code:

Public AllesOK As Boolean
Diese Variable setze ich zu Beginn der Prüfroutine auf TRUE, um sie beim erstbesten Fehler auf FALSE zu setzen. So bekommst du immer das Ergebnis FALSE, wenn auch nur eine Kleinigkeit nicht stimmt.
Ich mache es nun doch ohne Nutzung der Change-Events, weil mir das bei den Comboboxen nicht hilft. Also, als erstes in den Code des Copy-Buttons:
Code:

Private Sub CB_Copy_Click()
    Call CheckIt    'Prüfroutine aufrufen
    If AllesOK = False Then
        'Das bekommen wir später ...
    End If
Die Prüfroutine (nur ansatzweise):
Code:

Sub CheckIt()
AllesOK = True

    If CB_Voltage.ListIndex < 0 Then AllesOK = False    'Kein Eintrag ausgewählt, ListIndex=-1
    'Das machst du mit allen ComboBoxen ...
    If TB_Efficiency.Value > 100 Then AllesOK = False
    If TB_Type_G.Text = "" Then AllesOK = False
End Sub
Das sind jetzt nur Beispiele, das musst du ergänzen.
Ich muss jetzt erst einmal Pause machen, weil ich weg muss - später gehts weiter!

__________________

Gruß
Hans


Mit VBA löst du jedes Problem - und schaffst mindestens zwei neue ...
Windows 7 Pro, Windows 10 Home, Office 2013 H&S
H_E_K ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Ads
Antworten


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Besucher: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge anzufügen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist An.
Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:03 Uhr.


Partner und Co.
Access-Paradies -Alles rund um die Datenbank Microsoft Access -Code -Programme-Tools -Tipps   Kostenlose Tipps & Tricks, Downloads und Programme   www.kulpa-online.com - Tipps - Tricks - Tutorials - Meinungen - Downloads uvm...   vb@rchiv · Willkommen in der Welt der VB Programmierung   Access-Garhammer - Hier finden Sie jede Menge Beispiel-Datenbanken zu Access und mehr ...   mcseboard.de   Die Top Seite für Excel-VBA-Makros uvm.

Powered by: vBulletin Version 3.6.2 (Deutsch)
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

Copyright ©2000-2018 MS-Office-Forum. Alle Rechte vorbehalten.
Copyright ©Design: Manuela Kulpa ©Rechte: Günter Kramer
Eine Verwendung der Inhalte in anderen Publikationen, auch auszugsweise,
ist ohne ausdrückliche Zustimmung der Autoren nicht gestattet.