Anzeige
Archiv - Navigation
956to960
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
956to960
956to960
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Userform daten übertragung

Userform daten übertragung
08.03.2008 21:02:25
Manuel
Hallo ihr fleißigen Helfer,
nachdem ihr mir hier im Forum schon das ein oder andere Mal geholfen habt, hätte ich nun nochmals ein kleines Problem, bei dem ich eure Hilfe bräuchte.
1.) Ich verwende in meiner Exceldatei den Befehl zum Laden eines Addins:

Private Sub Workbook_Open()
AddIns("Alle Bertsch-Wasserdampffunktionen Nach IAPWS-IF97").Installed = True
End Sub


Nun finde ich leider den vergleichbaren Befehl beim Öffnen einer UserForm nicht. Ich möchte nämlich, dass Excel mir – wenn ich per Button eine Userform aufrufe – aus einem Arbeitsblatt „ einen Datums-Wert ausliest und in einem Textfeld (Name = „Datum_Alt“) darstellt. Wie muss hier der Befehl lauten?
Mit:


Private Sub Userform_open()
End Sub


funktioniert es leider nicht!
2.) Außerdem würde ich mich freuen, wenn mir jemand den entsprechenden Befehl nennen kann, sodass Excel für den oben genannten Datums-Wert folgende Systematik anwendet.
Der entsprechend gewünschte Datums-Wert findet sich jeweils in der letzten aktuell ausgefüllten Zeile in Spalte B. Mit jedem Mal wo die UserForm aufgerufen wird, wird diese Zeile jedoch um 6 Zeilen weiter unten liegen, da jedesmal 6 Zeilen von Spalte A bis K ausgefüllt werden. Funktioniert es also mit der Funktion:
Me.Controls("Datum_Alt").Value = Sheets("An_Abfahren").Range("B65536").End(xlUp).Value
Mein Problem ist leider, ich kann Punkt 2 nicht testen ohne das Punkt 1 funktiert. Also würde ich mich freuen, wenn mir einer von euch wirklich helfen könnte.
Grüße Manuel

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Userform daten übertragung
09.03.2008 03:18:00
fcs
Hallo Manuel,
für solche Zwecke gibt es für Userforms die Ereignis-Prozedur Initialize, manchmal ist auch die Activate-Prozedur sinnvoll. Allerdings macht das Laden des Addins mit dem Userform eigentlich nur Sinn, wenn es mit dem Schliessen des UF auch wieder entfernt wird. Ansonsten ist das Laden des Addins mit der Workbook_Open Prozedur der sinnvollere Weg.
Da Excel in der neuesten Version nicht mehr die Zeilenbegrenzung von 65536 hat, sollte man hier auch eine etwas allgeneinere Syntax verwenden.
Der Code der Initialisierungs-Prozedur schaut dann etwa so aus. Ob du die Text oder Value-Eigenschaft der Datumszelle ausliest ist ggf. Geschmackssache. Mit Value wird das Datum gemäß den Systemeinstellungen in der Textbox dargetsellt, mit Text so wie in der Tabelle formatiert. Bei dieser Form der Variablendeklaration kannst du in allen Prozeduren des Userforms die Objekt-Variable ws verwenden, statt Worksheets("An_Abfahren") ständig wiederholen zu müssen.

Option Explicit
'Deklarationen für das UF-Modul
Private ws As Worksheet 'Tabelle mit Daten
Private Sub UserForm_Initialize()
AddIns("Alle Bertsch-Wasserdampffunktionen Nach IAPWS-IF97").Installed = True
Set ws = Worksheets("An_Abfahren")
With ws
Me.Controls("Datum_Alt").Value = .Cells(.Rows.Count, 2).End(xlUp).Value
'oder
Me.Controls("Datum_Alt").Value = .Cells(.Rows.Count, 2).End(xlUp).Text
End With
End Sub

Gruß
Franz

Anzeige
nachgefragt wg. letzte Zeile
09.03.2008 03:58:39
Matthias
Hallo Franz
Da wir uns fast zur selben Zeit mit dem Beitrag von Manuel beschäftigten, habe ich eine Frage betreff's der letzte Zeile in einer höheren Excelversion. Welche Zeile ist bei Euch das Maximum
Bei mir XL2000 ist bei Zeile 65536 Schluss. (ich hatte die Version von Manuel glatt überlesen, sorry)
Und beim Abfragen der letzten befüllten Zelle muss man aufpassen, das sie auch korrekt erkannt wird.
Userbild
Schreibe ich z.B nur
Me.Datum_Alt.Value = Sheets("An_Abfahren").Range("B65536").End(xlUp).Value
erkennt Excel den Eintrag der letzte Zelle nicht.
Deshalb habe ich es mit: If ... Then ... Else ... End If geschrieben.
also:

Private Sub UserForm_Activate()
With Sheets("An_Abfahren")
If .Range("B65536").Value = "" Then
Me.Datum_Alt.Value = .Range("B65536").End(xlUp).Value
Else
Me.Datum_Alt.Value = .Range("B65536").Value
End If
End With
End Sub


Ist dieses Problem in den höheren Excelversionen behoben, oder besteht es weiterhin?
Und welche ist die letzte Zeile ?
Gruß Matthias

Anzeige
AW: nachgefragt wg. letzte Zeile
09.03.2008 04:58:55
fcs
Hallo Mathias,
die genaue Zeilenzahl bei Excel2007 kenne ich nicht. Ich meine aber es wären jetzt über 1,2 Mio Zeilen möglich. Auch die Spaltenzahl ist bei der 2007er Version nicht mehr auf 256 begrenzt.
Das Problem der ausgefüllten letzten Zeile bei Anwendung von .End(xlup) dürfte aber weiter bestehen. In meiner 18-jährigen Erfahrung mit Excel hab ich erst 2 mal bei großen Datenimporten die Notwendigkeit gehabt zu Prüfen ob die letzte Zeile ausgefüllt ist. Deswegen lasse ich diese Prüfung meist weg.
Allerdings sollte konsequenter Weise die Zelle auf "Leer" und nicht auf Leerstring geprüft werden.

Sub aaaTest()
MsgBox LastFilledRow(ActiveSheet, 10)
End Sub
Function LastFilledRow(ws As Worksheet, iSpalte As Integer) As Long
With ws
If IsEmpty(.Cells(.Rows.Count, iSpalte)) Then
LastFilledRow = .Cells(.Rows.Count, iSpalte).End(xlUp).Row
Else
LastFilledRow = .Cells(.Rows.Count, iSpalte).Row
End If
End With
End Function

Gruß
Franz

Anzeige
Danke ___ oT
09.03.2008 09:03:10
Matthias

AW: Userform daten übertragung
09.03.2008 03:21:00
Matthias
Hallo Manuel
meinst es so ?
Userbild

Option Explicit
Private Sub UserForm_Activate()
If Sheets("An_Abfahren").Range("B65536").Value = "" Then
Me.Datum_Alt.Value = Sheets("An_Abfahren").Range("B65536").End(xlUp).Value
Else
Me.Datum_Alt.Value = Sheets("An_Abfahren").Range("B65536").Value
End If
End Sub


Gruß Matthias

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige