In verschiedenen Sheets in Abhämgigkeit von etwas

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
Bild

Betrifft: In verschiedenen Sheets in Abhämgigkeit von etwas
von: Jan Langhorst
Geschrieben am: 12.11.2015 09:33:33

Hallo liebe Excel-Experten,
ich habe (mal wieder) ein Problem und brauche eure Hilfe.
In meiner UserForm habe ich ComboBoxen, TextBoxen etc., dessen Inhalt durch ein klicken auf den Button 'Speichern' auf meine Exceltabelle übertragen werden.
In meiner ComboBox5 kann man "Nov/HDL/MEX/CHN" auswählen.
Jetzt soll er machen:
Wenn NOV ausgewählt wird, dann alle KomboBoxen & Textboxen in Babellenblatt1 (Novaky) übertragen
Wenn HDL ausgewählt wird, dann alle KomboBoxen & Textboxen in Babellenblatt3 (Haldensleben) übertragen
Wenn MEX ausgewählt wird, dann alle KomboBoxen & Textboxen in Babellenblatt4 (Mexico) übertragen
Wenn CHN ausgewählt wird, dann alle KomboBoxen & Textboxen in Babellenblatt5 (China) übertragen
Ich hoffe Ihr versteht mein Problem und könnt mir vllt sogar helfen.
Hier mein bisheriger Code für den Speicherbutton:


Private Sub CommandButton1_Click()
If Trim(CStr(TextBox1.Text)) = "" Then
          MsgBox "Sie müssen einen Kunden eingeben!", vbCritical + vbOKOnly, "FEHLER!"
          Exit Sub
End If
If Trim(CStr(TextBox2.Text)) = "" Then
          MsgBox "Sie müssen eine Bauteilbezeichnung eingeben!", vbCritical + vbOKOnly, "FEHLER! _
 _
 _
 _
"
          Exit Sub
End If
If Trim(CStr(ComboBox3.Text)) = "" Then
          MsgBox "Sie müssen einen Status auswählen!", vbCritical + vbOKOnly, "FEHLER!"
          Exit Sub
End If
If Trim(CStr(ComboBox2.Text)) = "" Then
          MsgBox "Sie müssen eine Schaumart auswählen!", vbCritical + vbOKOnly, "FEHLER!"
          Exit Sub
End If
Dim bolFound As Long
Dim i As Long
For i = 12 To 143
  bolFound = bolFound Or Controls("TextBox" & i) <> ""
Next i
If Not bolFound Then
  MsgBox "Es müssen Stückzahlen eingegeben werden"
Exit Sub
End If
   Dim ZeileMax As Long
   Dim Zeile As Long
   Dim loSpalte As Long
   
   
   With Tabelle1
      ZeileMax = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, . _
Rows.Count)   'letzte belegte Zeile in Spalte A (1)
      Zeile = ZeileMax + 1
      
      .Range("A" & Zeile).Value = Me.TextBox1.Value
      .Range("B" & Zeile).Value = Me.TextBox2.Value
      .Range("C" & Zeile).Value = Me.TextBox3.Value
      .Range("D" & Zeile).Value = Me.ComboBox3.Value
      .Range("E" & Zeile).Value = Me.TextBox4.Value
      .Range("F" & Zeile).Value = Me.ComboBox5.Value
      
    If OptionButton1.Value Then
        .Range("G" & Zeile).Value = ""
    End If
    
       
    If OptionButton2.Value Then
        .Range("G" & Zeile).Value = "Folie"
    End If
      
        .Range("H" & Zeile).Value = Me.ComboBox2.Value
        .Range("I" & Zeile).Value = Me.ComboBox1.Value
        .Range("J" & Zeile).Value = Me.ComboBox4.Value
        .Range("K" & Zeile).Value = Me.TextBox6.Value
        .Range("L" & Zeile).Value = Me.TextBox7.Value
        .Range("M" & Zeile).Value = Me.TextBox8.Value
        .Range("N" & Zeile).Value = Me.TextBox9.Value
        .Range("O" & Zeile).Value = Me.TextBox10.Value
        .Range("P" & Zeile).Value = Me.TextBox11.Value
'Jahr 2016 - 2026: eintragen der Monatsstückzahlen
      For loSpalte = 18 To 149
         .Cells(Zeile, loSpalte) = Me.Controls("TextBox" & loSpalte - 6).Value
      Next loSpalte
      
.Range("A4:P4").Copy
     .Range("A" & Zeile).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
         SkipBlanks:=False, Transpose:=False
.Range("R4:ES4").Copy
     .Range("R" & Zeile).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
         SkipBlanks:=False, Transpose:=False
         
.Range("EU4:JV4").Copy
     .Range("EU" & Zeile).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
         SkipBlanks:=False, Transpose:=False
         
         
     
.Range("EU4:JV4").Copy
     .Range("EU" & Zeile).PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
         SkipBlanks:=False, Transpose:=False
.Range("PF4:UG4").Copy
     .Range("PF" & Zeile).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
         SkipBlanks:=False, Transpose:=False
         
.Range("PF4:UG4").Copy
     .Range("EU" & Zeile).PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
         SkipBlanks:=False, Transpose:=False
        
End With
ThisWorkbook.Save
   
End Sub

Gruß
Jan

Bild

Betrifft: AW: In verschiedenen Sheets in Abhämgigkeit von etwas
von: hary
Geschrieben am: 12.11.2015 09:46:08
Moin
Mit Case

Dim loSpalte As Long
'---dazwischen
Dim wksZ As String
      Select Case Combobox5.Value
       Case "Nov": wksZ = "Novaky"
       Case "HDL": wksZ = "Haldensleben"
       Case "MEX": wksZ = "Mexico"
       Case "CHN": wksZ = "China"
      End Select
   With Worksheets(wksZ)
   '--und weiter

gruss hary

Bild

Betrifft: In verschiedenen Sheets in Abhämgigkeit von etwas
von: Jan Langhorst
Geschrieben am: 12.11.2015 10:04:08
Danke Hary. In deinem Fall kommt bei mir aber die Fehlermeldung, dass ein End With erwartet wird?
Gruß Jan

Bild

Betrifft: AW: In verschiedenen Sheets in Abhämgigkeit
von: EtoPHG
Geschrieben am: 12.11.2015 09:52:44
Hallo Jan,
Unter den Voraussetzungen, dass a) die Tabellenblätter so wie in der Beschreibung erwähnt benannt sind und b) Alle die gleichen Zellenstruktur (für die Zielzellen) aufweisen, dann nach diesem Muster:

...
    Dim wsZiel As Worksheet
    Select Case ComboBox5
    Case "NOV": Set wsZiel = ThisWorkbook.Worksheets("Novaky")
    Case "HDL": Set wsZiel = ThisWorkbook.Worksheets("Haldensleben")
    Case "MEX": Set wsZiel = ThisWorkbook.Worksheets("Mexico")
    Case "CHN": Set wsZiel = ThisWorkbook.Worksheets("China")
    End Select
    If wsZiel Is Nothing Then
        MsgBox "Zielblatt nicht gefunden!", vbCritical
        Exit Sub
    Else
        With wsZiel
            '...füll die Felder ab
        End With
    End If
...
Gruess Hansueli

Bild

Betrifft: AW: In verschiedenen Sheets in Abhämgigkeit von
von: Jan Langhorst
Geschrieben am: 12.11.2015 10:06:51
https://www.herber.de/bbs/user/101439.xlsm
Das ist eine Vereinfachte Version mal als Bsp. ;)

Bild

Betrifft: AW: In verschiedenen Sheets in Abhämgigkeit von
von: EtoPHG
Geschrieben am: 12.11.2015 10:18:57
Hallo Jan,
Du darfst dein Hirn auch einschalten.
Warum heissen deine Tabellen "Hund", "Katze" etc. und du benutzt dann "Tabelle1", "Tabelle2" ...
und Tabelle1 (ohne Quotes) ist in unseren Vorschlägen nirgends mehr erwähnt.
Was sollen wir also mit deinem Beispiel?
Einen fixfertigen Code liefern, den du dann wieder nicht verstehst, bzw. auf dein Original umsetzen kannst?
Ich hab in meiner Antwort, die Voraussetzungen für das funktionieren explizit erwähnt!
Gruess Hansueli

Bild

Betrifft: AW: In verschiedenen Sheets in Abhämgigkeit von
von: Jan Langhorst
Geschrieben am: 12.11.2015 10:34:39
Hi Hansueli,
ich habe natürlich beides ausprobiert und es hat nicht funktioniert (wie gesagt, ich bin ein Neuling und muss daher viel rumprobieren). Ich habe die vereinfachte Variante geschickt, weil meine eigentliche UserForm schon sehr umfangreich ist und ich gedacht habe, dass es so etwas einfacher und übersichtlicher ist ;)
Auch bei deiner Variante habe ich beides ausprobiert. Wobei ich aber deine Notiz
"...Füll die Felder ab"
nicht verstehe.
Daher kommt dann bei mir natürlich die msgBox "Zielblatt nicht gefunden"
Ich hoffe ich habe dich jetzt nicht zu sehr "verärgert", dass du nicht mehr antwortest.
Gruß Jan

Bild

Betrifft: AW: In verschiedenen Sheets in Abhämgigkeit von
von: EtoPHG
Geschrieben am: 12.11.2015 10:49:45
Hallo Jan,
Nochmals zur Adressierung von Tabellenblättern in VBA:
With Tabelle1 : Referenziert das Tabellenblatt mit dem Codenamen Tabelle1. Der Codename ist derjenige wie du ihn im VBA-Explorer nicht in Klammern gesetzt siehst.
With Worksheets("Novizky") : Referenziert das Tabellenblatt mit dem Registernamen Novizky. Diesen Namen siehst du im VBA-Explorer in Klammern gesetzt, bzw. in den Sheet-Tabs der Mappe.
With Worksheets(3) : Referenziert das dritte Tabellenblatt wie es in der Registerreihenfolge angezeigt wird, unabhängig vom Code- oder Registernamen.
With wsZiel : Referenziert ein vorher richtig gesetztes [z.B. mit Set wsZiel = Worksheets("Novizky")] Worksheet-Objekt.
Mit "...Füll die Felder ab" hab ich gemeint: Setze deinen restlichen, bereits vorhandenen Code (nach deinem With Tabelle1 ) anstelle dieser (blöden) Bemerkung ein!
Gruess Hansueli

Bild

Betrifft: AW: In verschiedenen Sheets in Abhämgigkeit von
von: Jan Langhorst
Geschrieben am: 12.11.2015 11:09:39
Hallo Hansueli
Danke für die ausführliche Erklärung. Für das Verständnis war das sehr hilfreich. Das hatte ich zuvor auch schon probiert (ohne Erfolg), was anschließend auch der Grund für meine vereinfachte Version war. Jetzt habe ich endlich meinen Fehler gefunden... ich habe die falsche CombBox im Code beschrieben. Daher konnte es natürlich nicht funktionieren. Habe bei meinem langen Code den Wald vor lauter Bäumen nicht gesehen.
Sorry für die Verwirrung und vielen Dank für deine Geduld und Hilfe!!
Gruß Jan

Bild

Betrifft: AW: In verschiedenen Sheets in Abhämgigkeit von
von: Jan Langhorst
Geschrieben am: 12.11.2015 11:51:14
Hi Hansueli,
(kleines Problem mit dem Pc, deswegen nicht komplette Nachricht abgeschickt...)
Aber obwohl jetzt keine Fehlermeldung mehr auftaucht, trägt er egal was ich auswähle die Infos in die erste Liste ein

Private Sub CommandButton1_Click()
   Dim ZeileMax As Long
   Dim Zeile As Long
   Dim wsZiel As Worksheet
   
   
    Select Case ComboBox1
        Case "Hund": Set wsZiel = ThisWorkbook.Worksheets("Hund")
        Case "Katze": Set wsZiel = ThisWorkbook.Worksheets("Katze")
        Case "Maus": Set wsZiel = ThisWorkbook.Worksheets("Maus")
    End Select
    If wsZiel Is Nothing Then
        MsgBox "Zielblatt nicht gefunden!", vbCritical
        Exit Sub
    Else
        With wsZiel
        
            With Tabelle1
              ZeileMax = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp). _
Row, .Rows.Count)   'letzte belegte Zeile in Spalte A (1)
              Zeile = ZeileMax + 1
              
              .Range("A" & Zeile).Value = Me.ComboBox1.Value
              .Range("B" & Zeile).Value = Me.TextBox1.Value
              .Range("C" & Zeile).Value = Me.TextBox2.Value
              .Range("D" & Zeile).Value = Me.ComboBox3.Value
              .Range("E" & Zeile).Value = Me.ComboBox2.Value
              .Range("F" & Zeile).Value = Me.ComboBox3.Value
            End With
            
        End With
    End If
  
End Sub
Private Sub UserForm_Activate()
With Me.ComboBox1
.AddItem "Hund"
.AddItem "Katze"
.AddItem "Maus"
End With
With Me.ComboBox2
.AddItem "Fleisch"
.AddItem "Vegetarisch"
End With
With Me.ComboBox3
.AddItem "Pedigree"
End With
End Sub

Hier der einfache Code. Ich habe das ansich soweit auch gut verstanden glaube ich. Aber das richtige machen tut er leider immer noch nicht.
Gruß Jan

Bild

Betrifft: AW: In verschiedenen Sheets in Abhämgigkeit von
von: EtoPHG
Geschrieben am: 12.11.2015 12:08:21
Hallo Jan,
Zwischen Lesen und Verstehen lauert der tiefe Abgrund der Unfähigkeit.
Lösche endlich mal die Zeile With Tabelle1 und das zugehörige End With!
Gruess Hansueli

Bild

Betrifft: AW: In verschiedenen Sheets in Abhämgigkeit von
von: Werner
Geschrieben am: 12.11.2015 12:17:03
Hallo Hansueli,
das habe sogar ich gesehen. Wollte gerade senden - du bist mir zuvor gekommen. Bin mit dem Tablet einfach zu langsam. ;-)
Werner

 Bild

Beiträge aus den Excel-Beispielen zum Thema "In verschiedenen Sheets in Abhämgigkeit von etwas "