Seite 2 von 3 ErsteErste 1 2 3 LetzteLetzte
Ergebnis 11 bis 20 von 25

Thema: Word Makro für Tabellen mit Auswahlliste (Office 2016)

  1. #11
    Office-Hilfe.com - Auskenner
    Registriert seit
    06.06.2016
    Beiträge
    154
    Hallo actimel,

    "Das hat es sicher noch komplizierter gemacht."
    Stimmt. Warum ignorierst du meinen Wunsch nach einem Musterdokument? Du kannst doch die geplante Lösung in mein Dokument händisch einbauen.

    Ich versteh es nämlich immer noch nicht. Wenn du zwei identische Leistungen zu zwei verschiedenen Preisen anbietest, würden deine Kunden ja wohl immer den günstigeren wählen, womit das Anbieten des teureren entfiele.

    Ich mach dir einen letzten Vorschlag ohne Musterdokument von deiner Seite. Jetzt wird der Alternativtext direkt ins Dropdown eingetragen, d.h. der gewählte Eintrag wird überschrieben. Die Einträge im Listenfeld selber bleiben davon unberührt. Bei erneuter Auswahl stehen die alten Einträge wieder zur Verfügung.
    Angehängte Dateien Angehängte Dateien

  2. #12
    Office-Hilfe.com - Neuling
    Registriert seit
    13.02.2020
    Beiträge
    14
    Zitat Zitat von actimel.b Beitrag anzeigen
    Guten Morgen Gerhard,

    wir sind nah dran. Es tut mir echt leid das ich es kompliziert mache.
    Ich versuche es nochmal
    In der Dropdown wähle ich den Eintrag "Apfel" aus.
    In der Tabelle soll dann aber nicht "Apfel" stehen sondern unter Leistungen "Apfel1" und unter Einzelpreis halt der Preis.

    Ich möchte aus der Liste also etwas auswählen was nur eine Hilfe für mich ist, in der Rechnung aber der richtige volle Text und Preis erscheint.

    Anderes erklärt:
    In der Dropdown habe ich später zwei Einträge
    - oApfel
    - Apfel
    Bei Auswahl von oApfel erscheint der Text "Apfel1" mit dem Preis "0,99"
    Bei Auswahl von Apfel erscheint der Text "Apfel1" mit dem Preis "2,99"
    Ich habe also zwei identische Leistungen zu unterschiedlichen Preisen.

    Das hat es sicher noch komplizierter gemacht
    Hi Gerhard,

    könntest du mir nochmal helfen?
    Hab auch versucht mal einen Eintrag zu ändern, das wird in der Dropdown gar nicht übernommen
    Irgendwie klappt das alles nicht :/


    Danke & Gruß

  3. #13
    Office-Hilfe.com - Auskenner
    Registriert seit
    06.06.2016
    Beiträge
    154
    Hallo actimel,

    mir scheint, du hast den Beitrag #11 vom 9.3.2020 übersehen. Wenn das dortige Musterdokument von mir nicht weiterhilft, brauche ich, wie erwähnt, ein Musterdokument von deiner Seite. Da solltest du ein wenig Licht ins Dunkle bringen:

    "Bei Auswahl von oApfel erscheint der Text "Apfel1"
    Unklar geblieben ist mir insbesondere, wo genau der Text erscheinen soll. Zu meinem Vorschlag äußerst du dich ja nicht.
    Ich seh auch nicht, was "irgendwie" nicht klappt.
    Und ich seh nicht, was du schon probiert hast.

  4. #14
    Office-Hilfe.com - Neuling
    Registriert seit
    13.02.2020
    Beiträge
    14
    Hallo Gerhard,

    erst einmal eine ganz Große Entschuldigung meinerseits.
    Ich habe die Seite 2 mal voll übersehen. Das ist schon echt blond, sorry.

    Nun habe ich mir deinen letzten Vorschlag angesehen, genau so wollte ich es realisieren mit den unterschiedlichen Preisen. Vielen Dank dafür.

    Ich habe nun versucht weitere Einträge in die Dropdown zu bekommen.
    Dazu habe ich einen weiteren Case Eintrag gemacht/kopiert.
    Dropdown-Einträge.JPG

    Leider sehe ich diese im Dokument nicht. Vermutlich muss ich noch einen Schritt machen.


    Ebenfalls versuche ich verzweifelt, dass wenn ich eine neue Zeile hinzufüge die Dropdown direkt eingeblendet wird.
    Sprich als Default Einstellung sozusagen.

    Ich hab folgendes Makro welches mir eine neue Zeile einfügt und formatiert und konfiguriert. Evtl. kann man das hier mit einfügen?

    Sub Zeile_Hinzufügen()
    Dim Doc As Word.Document
    Dim tabelle As Word.Table, Zeile As Word.Row
    Dim ctTab As Long, ctZl As Long, Formel$

    Set Doc = ActiveDocument
    With Doc
    ctTab = .Tables.Count 'Anzahl Tabellen im Dokument
    With .Tables(ctTab) 'In der letzten Tabelle ...
    Set Zeile = .Rows.Add 'wird eine neue Zeile angefügt
    ctZl = .Rows.Count 'Anzahl Zeilen dieser Tabelle
    With Zeile
    With .Shading 'Diese Zeile formatieren
    .Texture = wdTextureNone
    .ForegroundPatternColor = wdColorAutomatic
    .BackgroundPatternColor = wdColorWhite
    End With
    'Vorbesetzung der Zellen mit Werten und Formel/Format:
    .Cells(1).Range.Text = ctZl - 1

    .Cells(4).Range.Text = 1
    Formel$ = Replace("=Z@S3*Z@S4", "@", ctZl)
    .Cells(5).Formula Formula:=Formel$, numformat:="#.##0,00 €;-#.##0,00 €"
    End With
    End With
    End With
    End Sub


    Lieben Gruß
    Mel
    und sorry nochmal
    Angehängte Dateien Angehängte Dateien

  5. #15
    Office-Hilfe.com - Auskenner
    Registriert seit
    06.06.2016
    Beiträge
    154
    Hallo Mel,

    ich kann deinen Anhang nicht entzippen; er kommt leer bei mir an. Hängst du ihn nochmal an, falls es mit dem Folgenden nicht erledigt ist?

    Erweiterung um andere Artikel:
    Soweit ich deinem Screenshot ansehe, ist der gelb markierte Teil korrekt, allerdings folgt er nicht dem Schema vom "Apfel":

    Den gibts ja zweimal, einmal als "oApfel" und einmal als "Apfel". Müsste das bei den Birnen nicht genau so sein? Und: Selbstverständlich musst du dich um das Erweitern des Dropdowns im Dokument um die beiden Birnen-Varianten selber kümmern. Das macht das Makro ja nicht, es liest nur aus.

    Erweiterung um eine neue Zeile
    hab ich per Kopieren erledigt; das erscheint mir einfacher. Als Feld für die Summe hab ich die Product-Funktion genommen, auch das erschien mir einfacher anzupassen. Trotzdem ist das der längste Teil im Makro geworden:
    Code:
    Sub zeileAnfuegen()
    Dim doc As Document
    Dim ctab As Long, letzteZeile As Long
    Dim formel_1 As String, formel_2 As String, formel_3 As String, format As String
    
    Set doc = ActiveDocument
    ctab = doc.Tables.Count
    
        With Tables(ctab)
            letzteZeile = .Rows.Count 'Letzte Zeile bestimmen
            .Rows(letzteZeile).Range.Copy 'letzte Zeile kopieren und Einfügen
            .Rows(letzteZeile).Range.PasteAndFormat (wdFormatOriginalFormatting)
            letzteZeile = .Rows.Count 'letzte Zeile neu bestimmen
            
            'eingefügte Zeile anpassen:
            .Cell(letzteZeile, 1).Range.Text = letzteZeile - 1                  'Spalte 1
            .Cell(letzteZeile, 2).Range.ContentControls(1).Range.Text = ""      'Spalte 2
            .Cell(letzteZeile, 3).Range.Text = 0                                'Spalte 3
            .Cell(letzteZeile, 4).Range.Text = 1                                'Spalte 4
            
            'Formel der letzten Zelle anpassen                                  'Spalte 5
            formel_1 = "=Product(C"
            formel_2 = ";D"
            formel_3 = ") "
            format = "\# " & """ #.##0,00 €;-#.##0,00 €"""
        End With
    
    
        With doc
            'Fortsetzung Formel anpassen
            .Fields.Add Range:=.Range( _
            Start:=.Tables(ctab).Cell(letzteZeile, 5).Range.Start, End:=.Tables(ctab).Cell(letzteZeile, 5).Range.End - 1) _
            , Type:=wdFieldEmpty, _
            Text:=formel_1 & letzteZeile & formel_2 & letzteZeile & formel_3 & format
         End With
       
    End Sub
    Ich hab übrigens im OnExit-Makro im Else-Teil der Select-Verzweigung noch ein bisschen was geändert, um ungewollte "Diese Leistung gibt es nicht"-Meldungen zu minimieren.
    Angehängte Dateien Angehängte Dateien

  6. #16
    Office-Hilfe.com - Neuling
    Registriert seit
    13.02.2020
    Beiträge
    14
    Hi Gerhard,

    es funktioniert soweit nun alles bis auf dein Makro.
    Egal was ich versuche es macht beim Ausführen nichts zumindest bei mir nicht.

    Habe versucht es als neues Makro einzufügen, dann erhalte ich immer eine Fehlermeldung: "Fehler beim Kompilieren: Sub oder Function nicht definiert"
    Aber auch wenn ich es versuche in deinem Dokument auszuführen passiert nichts, es wird keine neue Zeile erstellt.

    Hier mal meine Makros die derzeit existieren:

    Code:
    Sub Zeile_Hinzufügen()
    
     Dim doc As Word.Document
     Dim tabelle As Word.Table, Zeile As Word.Row
     Dim ctTab As Long, ctZl As Long, Formel$
         
       Set doc = ActiveDocument
       With doc
         ctTab = .Tables.Count    'Anzahl Tabellen im Dokument
         With .Tables(ctTab)      'In der letzten Tabelle ...
           Set Zeile = .Rows.Add  'wird eine neue Zeile angefügt
           ctZl = .Rows.Count     'Anzahl Zeilen dieser Tabelle
           With Zeile
             With .Shading        'Diese Zeile formatieren
               .Texture = wdTextureNone
               .ForegroundPatternColor = wdColorAutomatic
               .BackgroundPatternColor = wdColorWhite
             End With
             'Vorbesetzung der Zellen mit Werten und Formel/Format:
             .Cells(1).Range.Text = ctZl - 1
           
             .Cells(4).Range.Text = 1
                       Formel$ = Replace("=Z@S3*Z@S4", "@", ctZl)
             .Cells(5).Formula Formula:=Formel$, numformat:="#.##0,00 €;-#.##0,00 €"
           End With
         End With
       End With
    End Sub
    
    
    Sub Formeln_Korrigieren()
    
    Dim doc As Word.Document
    Dim tabelle As Word.Table, Zeile As Word.Row, RgFeld As Word.Range
    Dim ctTab As Long, ctZl As Long, Formel$
      
      Set doc = ActiveDocument
      With doc
        ctTab = .Tables.Count
        With .Tables(ctTab)
          For Each Zeile In .Rows
            With Zeile
              ctZl = .Index
              If ctZl <> 1 Then
                 .Cells(1).Range.Text = ctZl - 1
                 
                 Set RgFeld = .Cells(5).Range
                 RgFeld.MoveEnd Unit:=wdCharacter, Count:=-1
                 Formel$ = Replace("=Z@S3*Z@S4", "@", ctZl) & " \# ""#.##0,00 €;-#.##0,00 €"""
                 doc.Fields.Add Range:=RgFeld, Type:=wdFieldEmpty, Text:=Formel$, preserveformatting:=False
               End If
            End With
          Next Zeile
        End With
      End With
    End Sub
    
    
    Sub zeileAnfuegen()
    
    Dim doc As Document
    Dim ctab As Long, letzteZeile As Long
    Dim formel_1 As String, formel_2 As String, formel_3 As String, format As String
    
    Set doc = ActiveDocument
    ctab = doc.Tables.Count
    
        With Tables(ctab)
            letzteZeile = .Rows.Count 'Letzte Zeile bestimmen
            .Rows(letzteZeile).Range.Copy 'letzte Zeile kopieren und Einfügen
            .Rows(letzteZeile).Range.PasteAndFormat (wdFormatOriginalFormatting)
            letzteZeile = .Rows.Count 'letzte Zeile neu bestimmen
            
            'eingefügte Zeile anpassen:
            .Cell(letzteZeile, 1).Range.Text = letzteZeile - 1                  'Spalte 1
            .Cell(letzteZeile, 2).Range.ContentControls(1).Range.Text = ""      'Spalte 2
            .Cell(letzteZeile, 3).Range.Text = 0                                'Spalte 3
            .Cell(letzteZeile, 4).Range.Text = 1                                'Spalte 4
            
            'Formel der letzten Zelle anpassen                                  'Spalte 5
            formel_1 = "=Product(C"
            formel_2 = ";D"
            formel_3 = ") "
            format = "\# " & """ #.##0,00 €;-#.##0,00 €"""
        End With
    
    
        With doc
            'Fortsetzung Formel anpassen
            .Fields.Add Range:=.Range( _
            Start:=.Tables(ctab).Cell(letzteZeile, 5).Range.Start, End:=.Tables(ctab).Cell(letzteZeile, 5).Range.End - 1) _
            , Type:=wdFieldEmpty, _
            Text:=formel_1 & letzteZeile & formel_2 & letzteZeile & formel_3 & format
         End With
    End Sub
    Angehängte Dateien Angehängte Dateien

  7. #17
    Office-Hilfe.com - Neuling
    Registriert seit
    13.02.2020
    Beiträge
    14
    Hallo Gerhard,

    irgendwie wurde meine Antwort von gestern wohl nicht gespeichert... doof.
    Aber dann schreib ich nochmal.

    Das mit der Dropdown Erweiterung habe ich hinbekommen.

    Leider funktioniert das Makro welches du geschrieben hast bei mir nicht.
    Sobald ich es Ausführe passiert im Dokument nichts

    Habe es auch nochmal neu bei mir eingebaut aber nur meine zwei Makros funktionieren...
    Code:
    Sub Zeile_Hinzufügen()
    
       Dim doc As Word.Document
       Dim tabelle As Word.Table, Zeile As Word.Row
       Dim ctTab As Long, ctZl As Long, Formel$
         
       Set doc = ActiveDocument
       With doc
         ctTab = .Tables.Count    'Anzahl Tabellen im Dokument
         With .Tables(ctTab)      'In der letzten Tabelle ...
           Set Zeile = .Rows.Add  'wird eine neue Zeile angefügt
           ctZl = .Rows.Count     'Anzahl Zeilen dieser Tabelle
           With Zeile
             With .Shading        'Diese Zeile formatieren
               .Texture = wdTextureNone
               .ForegroundPatternColor = wdColorAutomatic
               .BackgroundPatternColor = wdColorWhite
             End With
             'Vorbesetzung der Zellen mit Werten und Formel/Format:
             .Cells(1).Range.Text = ctZl - 1
           
             .Cells(4).Range.Text = 1
                       Formel$ = Replace("=Z@S3*Z@S4", "@", ctZl)
             .Cells(5).Formula Formula:=Formel$, numformat:="#.##0,00 €;-#.##0,00 €"
           End With
         End With
       End With
    End Sub
    
    Sub zeileAnfuegen()
    
    Dim doc As Document
    Dim ctab As Long, letzteZeile As Long
    Dim formel_1 As String, formel_2 As String, formel_3 As String, format As String
    
    Set doc = ActiveDocument
    ctab = doc.Tables.Count
    
        With Tables(ctab)
            letzteZeile = .Rows.Count 'Letzte Zeile bestimmen
            .Rows(letzteZeile).Range.Copy 'letzte Zeile kopieren und Einfügen
            .Rows(letzteZeile).Range.PasteAndFormat (wdFormatOriginalFormatting)
            letzteZeile = .Rows.Count 'letzte Zeile neu bestimmen
            
            'eingefügte Zeile anpassen:
            .Cell(letzteZeile, 1).Range.Text = letzteZeile - 1                  'Spalte 1
            .Cell(letzteZeile, 2).Range.ContentControls(1).Range.Text = ""      'Spalte 2
            .Cell(letzteZeile, 3).Range.Text = 0                                'Spalte 3
            .Cell(letzteZeile, 4).Range.Text = 1                                'Spalte 4
            
            'Formel der letzten Zelle anpassen                                  'Spalte 5
            formel_1 = "=Product(C"
            formel_2 = ";D"
            formel_3 = ") "
            format = "\# " & """ #.##0,00 €;-#.##0,00 €"""
        End With
    
    
        With doc
            'Fortsetzung Formel anpassen
            .Fields.Add Range:=.Range( _
            Start:=.Tables(ctab).Cell(letzteZeile, 5).Range.Start, End:=.Tables(ctab).Cell(letzteZeile, 5).Range.End - 1) _
            , Type:=wdFieldEmpty, _
            Text:=formel_1 & letzteZeile & formel_2 & letzteZeile & formel_3 & format
         End With
    End Sub
    
    Sub Formeln_Korrigieren()
    
    Dim doc As Word.Document
      Dim tabelle As Word.Table, Zeile As Word.Row, RgFeld As Word.Range
      Dim ctTab As Long, ctZl As Long, Formel$
      
      Set doc = ActiveDocument
      With doc
        ctTab = .Tables.Count
        With .Tables(ctTab)
          For Each Zeile In .Rows
            With Zeile
              ctZl = .Index
              If ctZl <> 1 Then
                 .Cells(1).Range.Text = ctZl - 1
                 
                 Set RgFeld = .Cells(5).Range
                 RgFeld.MoveEnd Unit:=wdCharacter, Count:=-1
                 Formel$ = Replace("=Z@S3*Z@S4", "@", ctZl) & " \# ""#.##0,00 €;-#.##0,00 €"""
                 doc.Fields.Add Range:=RgFeld, Type:=wdFieldEmpty, Text:=Formel$, preserveformatting:=False
               End If
            End With
          Next Zeile
        End With
      End With
    End Sub

    Wenn ich dein Makro ausführe erhalte ich immer eine Fehlermeldung: Fehler beim Kompilieren: Sub oder Function nicht definiert


    Gruß
    Mel
    Angehängte Dateien Angehängte Dateien

  8. #18
    Office-Hilfe.com - Auskenner
    Registriert seit
    06.06.2016
    Beiträge
    154
    Hallo Mel,

    bei mir funktioniert das Zeilen hinzufügen. Vielleicht ist es ein Missverständnis: Momentan musst du dieses Makro händisch aufrufen (über Entwicklertools > Makros, oder über den VBA-Editor. Das kann man später per Schaltfläche machen lassen.

    Was allerdings nicht zur Zufriedenheit funktioniert (vielleicht hast du es noch nicht bemerkt): Da du die Zusatztexte nicht mehr in das Control schreiben lässt, sondern dahinter (was ich dir eh vorschlagen wollte), wird momentan der alte Zusatztext nicht gelöscht, sondern der neue wird einfach hinten dran gehängt.

    Um das zu vermeiden hab ich eine weitere Spalte für den Zusatztext eingefügt, mit der Folge, dass ich die Spalten in den beiden Makros alle anpassen musste.

    Deshalb hier dein geändertes Dokument zurück. Die Tabelle enthält nur 1 Datenzeile, also beginne mit Zeile hinzufügen.

    Es gibt noch einen Mangel: Momentan aktualisiert sich der Preis nicht, wenn man die Anzahl ändert. Das könnte man leicht beheben und ich mach dir gern dazu einen Vorschlag. Aber jetzt muss erst mal das Zeile hinzufügen klappen.
    Angehängte Dateien Angehängte Dateien

  9. #19
    Office-Hilfe.com - Auskenner
    Registriert seit
    06.06.2016
    Beiträge
    154
    Hallo Mel,

    es geht grad wohl ein bisschen durcheinander hier, und das mit der Fehlermeldung Sub oder Function nicht definiert hab ich jetzt erst gelesen. Also: Um die Fehlermeldung richtig einordnen zu können, musst du sie im Einzelschritt (mit F8) durchlaufen lassen und mir die Zeile sagen, die dann gelb unterlegt ist.

    Aber ich hab eine Vermutung: Das Makro will ja das Inhaltssteuerelement in der jeweils letzen Zeile vom Inhalt befreien. Aber in deinem Musterdokument ist die letzte Zeile ohne Inhaltssteuerelement.

    In meinem (zumindest in dem letzten) gibts nur eine, aber dafür vollständig gefüllte Zeile. Deshalb dürfte mein letztes Musterdokument bei dir auch funktionieren, aber deins nicht.

    Moral von der Geschicht: die letzte Zeile muss in Spalte 2 immer ein Inhaltssteuerelement mit dem Tag "Leistung" haben.

  10. #20
    Office-Hilfe.com - Neuling
    Registriert seit
    13.02.2020
    Beiträge
    14
    Hi Gerhard,

    ja nun ist irgendwie alles durcheinander. Warum auch immer wurden meine Antworten verzögert im Forum hochgeladen.

    Ich würde nochmal komplett versuchen zusammenzufassen:

    Das Dokument: "Rechnung4a" enthält genau die Dropdown die ich brauche.
    Es wird ein Artikel ausgewählt und der entsprechend hinterlegte Text bei Leistung und der hinterlegte Preis bei Einzelpreis in die Tabelle geschrieben.
    Sprich in der Dropwon steht z.B.
    Case "oApfel"
    preis = 0.99
    zusatztext = " Apfel 1"
    In der Tabelle steht dann
    Leistung = Apfel 1
    Einzelpreis = 0,99€


    Das Dokument: "rechnung neu2" enthält das Makro um eine neue Zeile + Dropdown einzufügen.


    Ich habe mir damals ein Makro geschrieben um die Zeilen bzw. Rechenformeln zu korrigieren. Sprich es wird geprüft ob vorne die Positionsnummern stimmen und hinten der Gesamtpreis entsp. berechnet.
    Code:
    Sub Formeln_Korrigieren()
      Dim doc As Word.Document
      Dim tabelle As Word.Table, Zeile As Word.Row, RgFeld As Word.Range
      Dim ctTab As Long, ctZl As Long, Formel$
      
      Set doc = ActiveDocument
      With doc
        ctTab = .Tables.Count
        With .Tables(ctTab)
          For Each Zeile In .Rows
            With Zeile
              ctZl = .Index
              If ctZl <> 1 Then
                 .Cells(1).Range.Text = ctZl - 1
                 
                 Set RgFeld = .Cells(5).Range
                 RgFeld.MoveEnd Unit:=wdCharacter, Count:=-1
                 Formel$ = Replace("=Z@S3*Z@S4", "@", ctZl) & " \# ""#.##0,00 €;-#.##0,00 €"""
                 doc.Fields.Add Range:=RgFeld, Type:=wdFieldEmpty, Text:=Formel$, preserveformatting:=False
               End If
            End With
          Next Zeile
        End With
      End With
    End Sub
    Jetzt müsste man eine Kombi aus den drei Funktionen bauen.

    Am Ende würde ich gerne aus der Dropdown meinen Artikel auswählen. Leistung und Einzelpreis werden entsprechend gefüllt (Dok: Rechnung4a).
    Die Anzahl kann ich manuell Ändern.
    Der Gesamtpreis müsste dann über ein Makro korrigiert werden.
    Sollten es mehrere Artikel sein würde ich gerne eine neue Zeile einfügen bei der die Dropdown auch direkt sichtbar ist (Dok: rechnung neu2)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  
Excel Ticker - News, Tipps und Tricks zu Microsoft Excel