VBA - Neues Sheet erzeugen
#41
Hi Ralf,

mal aus dem Bauch heraus:

Code:
Textbox1.Value=strArtikel
Mit freundlichen Grüßen  :)
Michael
Top
#42
Hallo Ralf,

(03.11.2015, 17:38)Rabe schrieb: @all:
wie kann ich der Userform den Wert von strArtikel als Wert für Textbox1 übergeben?

speichere die Variable in der Tag-Eigenschaft der Userform.

Code:
Userform1.Tag = strArtikel

und im Klassenmodul der Userform

Code:
TextBox1.Value = Userform1.Tag
Gruß Stefan
Win 10 / Office 2016
Top
#43
Hallo Michael und Stefan,

der Code für den Aufruf der Userform ist ja:
Code:
  strArtikel = ActiveCell.Value
 
 Set rng = Worksheets("Sheet1").Range("A:A").Find(strArtikel)
 If rng Is Nothing Then
    Userform1.Show
 Else

und die Frage war:
wie kann ich der Userform den Wert von strArtikel als Wert für Textbox1 übergeben?
jetzt erweitert um "beim Aufruf (oder gleich danach)".

Ich habe es so probiert:
Code:
  strArtikel = ActiveCell.Value
 
  Set rng = Worksheets("Sheet1").Range("A:A").Find(strArtikel)
     userform1.Tag = strArtikel
     userform1.Show
  Else

und so:
Code:
  strArtikel = ActiveCell.Value
 
  Set rng = Worksheets("Sheet1").Range("A:A").Find(strArtikel)
     userform1.Show userform1.Tag = strArtikel
  Else

und dann so:
Code:
Private Sub UserForm1_Initialize()
  TextBox1.Value = userform1.Tag
End Sub

auch das strArtikel als Public-Variable und dann:
Code:
Private Sub UserForm1_Initialize()
  TextBox1.Value = strArtikel
End Sub

Textbox1 bleibt immer leer.
Warum ist der Name mal als "UserForm1", mal als "Userform1" und mal als "userform1" geschrieben? Hat das was damit zu tun?
Top
#44
Moin,

die Beispieldatei gefällt mir ja schon sehr muss ich sagen !
vielen Dank für die mühen.

ich werde mir das alles morgen mal in ruhe durchlesen und anschauen.
muss heute auf eine Tagung.

Vielen Dank leute :15:
Top
#45
Hi,

jetzt habe ich's:

(04.11.2015, 10:02)Rabe schrieb: und die Frage war:
wie kann ich der Userform den Wert von strArtikel als Wert für Textbox1 übergeben?
jetzt erweitert um "beim Aufruf (oder gleich danach)".

[...]
Warum ist der Name mal als "UserForm1", mal als "Userform1" und mal als "userform1" geschrieben?

Code:
Private Sub Userform_Activate()             'Userform aufrufen
TextBox1 = strArtikel
'For i = 1 To 7
'        Me.Controls("TextBox" & i) = ""
'        Me.Controls("TextBox" & i) = "bitte eintragen!"
'    Next
'        Me.Controls("TextBox1") = strArtikel
'        Me.Controls("TextBox7") = ""
End Sub

Beide Versionen funktionieren.

.xlsm   DemoTest - mit Userform 2.xlsm (Größe: 126,54 KB / Downloads: 4)
Top
#46
Hallo Ralf,

so müsste es gehen.

(04.11.2015, 10:02)Rabe schrieb: Ich habe es so probiert:
Code:
  strArtikel = ActiveCell.Value
 
  Set rng = Worksheets("Sheet1").Range("A:A").Find(strArtikel)
     userform1.Tag = strArtikel
     userform1.Show
  Else

und dann so:
Code:
Private Sub UserForm_Initialize()
  TextBox1.Value = userform1.Tag
End Sub

Warum ist der Name mal als "UserForm1", mal als "Userform1" und mal als "userform1" geschrieben? Hat das was damit zu tun?

beachte hier Userform_Initialize() und nicht Userform1_Initialize().
Gruß Stefan
Win 10 / Office 2016
Top
#47
Hi Stefan,

(04.11.2015, 10:27)Steffl schrieb: beachte hier Userform_Initialize() und nicht Userform1_Initialize().

aaah, ja, klar, da bin ich ja schon in der Userform, deswegen muß nicht der Name aufgerufen werden, das ist wie bei Userform_Activate.

Aber mit dem Initialize geht es trotzdem nicht. Kein Problem, denn mit dem Activate geht es.

Wie kommt es zur unterschiedlichen Schreibweise des Userforms?
Top
#48
Hallo Ralf,

(04.11.2015, 10:54)Rabe schrieb: Wie kommt es zur unterschiedlichen Schreibweise des Userforms?

das weiß ich nicht. Bezüglich dem Initialize-Ereignis: Durch das Befüllen der Tag-Eigenschaft wird das Ereignis zweimal aufgerufen siehe hier.
Gruß Stefan
Win 10 / Office 2016
Top
#49
Hey Hey,

hier ürberschlagen sich ja die Ereignisse   :19: 

eine Frage habe ich, wie genau funktioniert das jetzt ?

- ich klicke auf Artikel , dann auf Historie anzeigen
- Ich klicke auf neuen Auftragen anlegen , trage alles ein, speichern, und er hüft in die Historie

- allerdings wenn ich den Filter nicht zurück setzte und den einen anderen Artikel wähle, den es eig schon gibt und
aub Historie anzeigen klicke, macht der das Fenster zum neueintragen auf.

mach ich was falsch ? oder ist das zurück setzten des filter immer zwingend notwendig?

Danke schonmal und Gruß
Sascha :05:
Top
#50
Hi Sascha,

(05.11.2015, 08:44)alti89 schrieb: mach ich was falsch ? oder ist das zurück setzten des filter immer zwingend notwendig?

nein, du machst nichts falsch, es muß bisher zwingend der Filter zurückgesetzt werden, denn:
Wenn die Historie gefiltert ist,
  1. kann der zwar in der Liste vorhandene, aber nicht angezeigte Artikel nicht gefunden werden
  2. ist nicht unbedingt die letzte angezeigte Zeile auch tatsächlich die letzte Zeile der Liste.

Ich habe das Rücksetzen des Filters nun im Makro Historie an den Anfang gesetzt, damit wird der Filter erst gelöscht und dann nach der Artikelnummer gesucht.
PHP-Code:
Sub Historie()
 
  '
   ' 
Historie Makro
   
'
  Dim strArtikel As String
   Dim rng 
As Range
   
'
   strArtikel = ActiveCell.Value
   
   Sheets("Sheet1").Range("$A:$F").AutoFilter Field:=1                           '
Filter zurücksetzen
   Set rng 
Worksheets("Sheet1").Range("A:A").Find(strArtikel)
 
  If rng Is Nothing Then
      userform1
.Tag strArtikel
      userform1
.Show
   
Else
 
     With Sheets("Sheet1")
 
        .Activate
'         .Range("$A:$F").AutoFilter Field:=1                          'Filter zurücksetzen
         loLetzteA 
IIf(IsEmpty(.Cells(.Rows.Count1)), .Cells(.Rows.Count1).End(xlUp).Row, .Rows.Count  'letzte belegte Zeile in Spalte A (1)
         .Range("$A$3:$F" & loLetzteA).AutoFilter Field:=1, Criteria1:=strArtikel   '
Filter setzen
      End With
   End 
If
 
  strArtikel ""
End Sub 

auch im Userform-Makro sollte das Rücksetzen nach oben verschoben werden.
Code:
Private Sub CommandButton1_Click()
   With Sheets("Sheet1")
      .Activate
      .Range("$A:$F").AutoFilter Field:=1                           'Filter zurücksetzen
      loLetzteA = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, .Rows.Count)   'letzte belegte Zeile in Spalte A (1)
      loZeile = loLetzteA + 1
      .Range("$A" & loZeile) = Me.TextBox1.Value                               'Artikelnummer in neue Zeile eintragen
      .Range("$B" & loZeile) = Me.TextBox2.Value                               'Auftrag eintragen
      .Range("$C" & loZeile) = Me.TextBox3.Value & " - " & Me.TextBox4.Value   'Reparaturzeit eintragen
      .Range("$D" & loZeile) = Me.TextBox5.Value                               'Kunde eintragen
      .Range("$E" & loZeile) = Me.TextBox6.Value                               'Ort eintragen
      .Range("$F" & loZeile) = Me.TextBox7.Value                               'Bemerkung eintragen
   End With
   strArtikel = ""
   Me.TextBox1.Value = ""
   Unload Me
End Sub

Teste das mal.
Top


Gehe zu:


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