Excel Eingabemaske auf separater Arbeitsmappe

Moderator: ModerationP

Excel Eingabemaske auf separater Arbeitsmappe

Beitragvon Falke888 » 02. Dez 2020, 12:08

Hallo zusammen,

ich habe mir via Userform eine Eingabemaske gebaut. Diese soll mit der Zeit wachsen, zur Verdeutlichung reichen aber die bisherigen Angaben. Hier werden 3 Informationen hinterlegt und in eine Tabelle gespeichert. Da sich die Eingabemaske direkt vor die Tabelle schaltet und der Button zum Aufrufen der Maske (startet automatisch mit Programm-Start) auf der gleichen Seite wie die Tabelle ist, sieht das alles "unschön" aus. Mein Ziel ist es, dass ich ein Tabellenblatt (Arbeitsmappe) habe, auf der sich nur der Button für die Eingabe befindet. Diese Seite auch als einziges genutzt wird und die in der Eingabemaske eingetragenen Daten auf das andere Tabellenblatt (andere Arbeitsmappe) eingefügt werden. Für jemanden der sich damit auskennt, ist das bestimmt schnell gemacht .. für mich nicht :?

Auf dem ersten Blatt, mit welchem gestartet werden soll wenn die Tabelle geöffnet wird, steht simpel der Befehl zum Aufrufen der Eingabemaske:

Private Sub Workbook_Open()

Load Eingabemaske
Eingabemaske.Show

End Sub

Hier sollen einfach die Daten eingegeben werden. Nichts weiter. Wer die Maske "aus Versehen" weg klickt, der soll sie sich über einen Button, der sich auf dem Blatt befindet, wieder aufrufen können. Das ist auch soweit vorhanden.

Die Eingabemaske sieht folgendermaßen aus:

Private Sub Workbook_Open()

Load Eingabemaske
Eingabemaske.Show

End Sub

--------------------------------

Private Sub Button_Abbrechen_Click()

Unload Eingabemaske

End Sub

--------------------------------

Private Sub Button_Eingabe_Click()

'Erste freie Zeile ausfindig machen
Dim last As Integer
last = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row + 1

'Artikelnummer
Cells(last, 1).Value = TextBox_Artikelnummer

'Grund
Cells(last, 3).Value = TextBox_Grund

'Ersatzteil
If CheckBox_ET.Value = True Then Cells(last, 4).Value = CheckBox_ET.Caption

'Bearbeiter
Cells(last, 6).Value = ListBox_Bearbeiter.Value

End Sub

--------------------------------

Private Sub UserForm_Initialize()

'Artikelnummer
TextBox_Artikelnummer = ""

'Grund
TextBox_Grund = ""

'Ersatzteil
CheckBox_ET.Value = False

'Bearbeiter
With ListBox_Bearbeiter
.AddItem "Anke"
.AddItem "Eylin"
.AddItem "Franzi"

End With

End Sub

--------------------------------

Das Problem ist, dass das Makro sich jetzt die erste freie Zeile auf dem aktiven Tabellenblatt sucht und dieses befüllt. Alles was ich möchte ist, dass es nicht das aktuelle Tabellenblatt, welches aktiv ist, beschreibt, sondern das "nicht aktive" Blatt welches derzeit den Namen "Auswertung" trägt.

Hier ist eine Tabelle mit:

Spalte A = Artikelnummer
Spalte B = Artikelbezeichnung (wird nicht vom Makro angesteuert)
Spalte C = Grund
Spalte D = Ersatzteil
Spalte E = Datum (wird nicht vom Makro angesteuert)
Spalte F = Bearbeiter
Spalte G = Änderung (wird nicht vom Makro angesteuert)

Alle neuen Einträge sollen dann in diese Tabelle eingetragen werden, nur mit dem Unterschied, dass sich die Tabelle nicht mehr auf dem aktiven Tabellenblatt, sondern auf einem namentlich benannten Blatt befindet.

Kann mir jemand bitte helfen :?:

Beste Grüße
Falke888
 


Re: Excel Eingabemaske auf separater Arbeitsmappe

Beitragvon DerHoepp » 02. Dez 2020, 13:47

Moin,

wenn du auf die UserForm verzichtest, und einfach ein Tabellenblatt zur eingabe nutzt, erleichterst du dir das Leben ungemein. Wenn du doch Code verwendest, solltest du ihn im Forum in Code-Tags packen, dass erleichtert Uns das Leben ungemein.

Viele Grüße
derHöpp
DerHoepp
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 9234
Registriert: 14. Mai 2013, 11:08

Re: Excel Eingabemaske auf separater Arbeitsmappe

Beitragvon HKindler » 02. Dez 2020, 13:58

Hi,

ersetze ActiveSheet durch Worksheets("gewünschtesBlatt") und denk dran, dass diese Angabe auch vor jedes Cells gehört.
Am besten packst du das alles in einen With-Block
Code: Alles auswählen
With Worksheets("gewünschtesBlatt")
    last = .Cells(Rows.Count, 1).End(xlUp).Row + 1
    .Cells(last, 1).Value = TextBox_Artikelnummer
    ...
End With
Beachte bitte jeweils den Punkt bei .Cells
Übrigens wirst du einen Fehler erhalten sobald deine Tabelle mehr als 32.768 Zeilen hat. Daher nimm besser Dim last As Long

Überhaupt: Warum eine Userform? Ein Excelblatt hat 17.179.869.184 Eingabefelder. Reicht dir das nicht?
Gruß,
Helmut

----------------------------
Windows 10 Enterprise (64 Bit) / Office 365 ProPlus (32 Bit)
Benutzeravatar
HKindler
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 5351
Registriert: 04. Jul 2013, 09:02

Re: Excel Eingabemaske auf separater Arbeitsmappe

Beitragvon Falke883 » 02. Dez 2020, 14:59

HKindler hat geschrieben:Hi,

ersetze ActiveSheet durch Worksheets("gewünschtesBlatt") und denk dran, dass diese Angabe auch vor jedes Cells gehört.
Am besten packst du das alles in einen With-Block
Code: Alles auswählen
With Worksheets("gewünschtesBlatt")
    last = .Cells(Rows.Count, 1).End(xlUp).Row + 1
    .Cells(last, 1).Value = TextBox_Artikelnummer
    ...
End With
Beachte bitte jeweils den Punkt bei .Cells
Übrigens wirst du einen Fehler erhalten sobald deine Tabelle mehr als 32.768 Zeilen hat. Daher nimm besser Dim last As Long

Überhaupt: Warum eine Userform? Ein Excelblatt hat 17.179.869.184 Eingabefelder. Reicht dir das nicht?


Vielen Dank. Das hat super funktioniert :) :) :)
Falke883
Neuling
 
Beiträge: 1
Registriert: 02. Dez 2020, 11:50

Re: Excel Eingabemaske auf separater Arbeitsmappe

Beitragvon DerHoepp » 02. Dez 2020, 15:14

Moin,

ich habs mir auch noch mal angeguckt.
Load und Unload sind unnötig. Verwende stattdessen eine eigene Instanz der UserForm-Klasse. Die Kontrolle über diese eigene Instanz behältst du im passenden Worksheet-Modul.
Du solltest deine Informationen nicht in hardcodierte Zellen schreiben, sondern die Informationen in ein ListObject / intelligente Tabelle / Strg+T-Tabelle schreiben. Dann erzeugst du für jeden Datensatz eine neue ListRow und kannst die Zielrange über eine Intersection aus ListColumn("Spaltenname").Range und der neuen ListRow.Range ermitteln. Dann sparst du dir die "magischen" Ziffern, bei denen du immer im Hinterkopf behalten musst, in welche Spalte denn nun welche Information muss.
Artikelnummern solltest du auch validieren.
Die Listbox mit dem Bearbeiter kannst du dir sparen, wenn du einfach die Umgebungsvariable für den User abrufst. Ansonsten gehören die Benutzerinformationen in eine Tabelle und werden in die Listbox als Array in die .List-Eigenschaft geschrieben und nicht über .AddItem hartcodiert.

Ansonsten:
Verzichte auf UserForms zur Erfassung von Daten und nutze stattdessen einfache Tabellenblätter. Dann kannst du die Validierungsschritte deutlich einfacher vornehmen. Noch einfacher ist es natürlich, wenn du dir die Erfassungsmaske ganz sparst und direkt in der Zieltabelle erfasst.

Viele Grüße
derHöpp
DerHoepp
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 9234
Registriert: 14. Mai 2013, 11:08


Zurück zu Excel Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: AndiS und 9 Gäste