Collapse column

Autor Thema: Makroerweiterung um eine kleine Userformabfrage  (Gelesen 2733 mal)

Offline nico345

  • Newbie
  • *
  • Beiträge: 2
    • Profil anzeigen
  • Office-KnowHow: Fortgeschritten
  • VBA-KnowHow- : Mittelmäßig
  • Version [Office] : Office 2003
Makroerweiterung um eine kleine Userformabfrage
« am: Februar 23, 2012, 19:12:11 Nachmittag »
Hallo liebe Mitglieder,

vor ein paar Monaten wurde mir geholfen aus einer Excel-Datenbank (bzw. Liste), automatisch eine Rechnung zu generieren. In der Liste befinden sich Stammdaten wie Name, Rechnungsnummer, Kundennummer, Stunden, Stundensatz etc.
In einem weiteren Spreadsheet ist dann das Layout der Rechnung. Durch das folgende Makro wurden erfolgreich die Daten in das Layout kopiert.
Doch wie es im Leben so ist, ändern sich mit der Zeit einfach die Anforderungen. Ich hatte bislang pro Rechnung nur einen Posten aufgeführt. Somit war der Excel-gesteuerte Vorgang recht einfach (Kopiere von A nach B). In letzter Zeit kommen aber des öfteren immer die selben Posten dazu. Deshalb würde ich gerne das Makro erweitern. Mein erster Gedanke war dann, eine Userform mit Checkboxabfrage einzubauen. Die Userform kann z.B. 3 Checkboxen und 2 Command-buttons (OK u. Abbrechen) beinhalten.

Checkbox 1 steht für die Berechnung der Anreise
Checkbox 2 steht für die Berechnung der Abreise
Checkbox 3 steht für die Berechnung sonstiger Posten

Jetzt erst einmal der Code

Hier sieht man unten die verschiedenen "case" ich hab versucht durch die Ergänzung von kommentaren sichtbar zu machen was gerade passiert.

Ok jetzt zum Problem: Vom logischen und gestalterischen Ablauf her, muss die Berechnung der Anreise vor die eigentliche Leistung. Die Anreise an sich, ist aber variabel und nicht Teil von jeder Rechnung. Somit würde ja die Zeile mit der die Rechnung beginnt (also die Aufzählung der Posten) variieren. Bei dem Kopiervorgang der Zellen (unten) seht ihr dass der Ort an den die Information kopiert wird, klar definiert ist. Das macht es zum Problem wenn ich davor aber noch was "einschieben" will. Im prinzip will ich durch die Checkboxabfrage sagen: kopiere zwar immer noch in die selbe spalte, aber jetzt eben eine zeile darunter. Quasi als Rechnungsposten Nr.2. Posten Nr. 1 (durch die Checkboxangewählt) ist ja nun die Anreise und damit verbunden bedeutet es dass in den spalten C bis H immer die selben werte reinkommen.

Ich hoffe es ist nicht so verwirrened.

der Code steht in meiner userform:
Code: Javascript
  1. Private Sub commandbutton1_click()
  2.  
  3. Call Unload(UserForm3)
  4.  
  5.  Const w = 2
  6.     Const t1 = "Liste"
  7.     Const t2 = "Übersicht"
  8.  
  9.     Dim w1 As Worksheet
  10.     Dim w2 As Worksheet
  11.     'Dim w3 As Worksheet
  12.    Dim s As String
  13.    Dim y1 As Long
  14.    Dim x1 As Long
  15.    Dim y2 As Long
  16.    Dim x2 As Long
  17.    Dim n As Long
  18.    Dim jn As Long
  19.    
  20.    Set w1 = Worksheets("Kundendatenbank")
  21.    Set w2 = Worksheets("Rechnung")
  22.   ' Set w3 = Worksheets("PDF Online Rechnung")
  23.  
  24. ' Makrobeginn mit der Zeilenabfrage über die Inputbox
  25.  
  26.    s = InputBox("Rechnungs - relevante ZEILE?", "RECHNUNG")
  27.    If (s <> "") Then 'es wurde nicht "abbruch" oder [x] angeklickt
  28. Sheets("Kundendatenbank").Select
  29.         y1 = Val(s)
  30.         If (y1 > 0) Then 'es wurde ein gültiger zahlenwert eingegeben
  31.  
  32.            jn = MsgBox("Soll alles kopiert werden?", vbOKCancel, "Kopieren?")
  33.            
  34.             If (jn = vbOK) Then
  35.  
  36. 'Unmerge
  37.  
  38.  
  39.     Worksheets("Rechnung").Select
  40.     Range("A9:B9").Select
  41.     Selection.UnMerge
  42.     Range("A10:C11").Select
  43.     Selection.UnMerge
  44.      
  45. ' Ende Kopfbereich ANFANG KOPIEREN
  46.  
  47.  
  48.  
  49. ' Ausgabe der Rechnung mit ANREISEKOSTEN
  50.  
  51.     If CheckBox1 = True Then
  52.        
  53.        
  54.               ' Kopiervorgang der einzelnen Zellen [X1,X2 --> Spalten // Y1,Y2 --> Zeilen]
  55.      ' # = Variable Größe die sich ändert
  56.             For n = 1 To 3
  57.            
  58.                 Select Case n
  59.                     Case 1: '#####Rechnungsdatum#####
  60.                        x1 = 12: y2 = 17: x2 = 2
  61.                    Case 2: ' #####Sonderposten#####
  62.                         x1 = 17: y2 = 17: x2 = 6
  63.  
  64.                    ' Case 10: ' Ersatz
  65.                         'x1 = 14: y2 = 22: x2 = 6
  66.                    Case Else: 'mehr "n" als "case"
  67.                         x1 = 0
  68.                      
  69.                 End Select
  70.                 If (x1 > 0) Then
  71.                       w1.Cells(y1, x1).Copy
  72.                     w2.Cells(y2, x2).PasteSpecial Paste:=xlPasteValues
  73.  
  74.  
  75.                 End If
  76.             Next n
  77.  
  78.             w2.Activate
  79.  
  80.           Else
  81.             MsgBox "Bitte Ganz genau die Zeile überprüfen!!!"
  82.  
  83.         End If
  84. 'merge
  85.  
  86. Range("B18").Select
  87.  
  88. Unload Me
  89.    Else
  90.    If CheckBox1 = False Then
  91.    
  92.    End If
  93. End If
  94.  
  95.  
  96.  
  97.  
  98. ' ABREISEKOSTEN
  99.     If CheckBox2 = True Then
  100.         MsgBox ("2")
  101.      
  102.     Else
  103.     If CheckBox2 = False Then
  104.    
  105.     End If
  106. End If
  107.  
  108.  
  109.  
  110. ' SONDERKOSTEN "EXOTEN"
  111.    If CheckBox3 = True Then
  112.  
  113.        
  114.        
  115.       ' Kopiervorgang der einzelnen Zellen [X1,X2 --> Spalten // Y1,Y2 --> Zeilen]
  116.       ' # = Variable Größe die sich ändert
  117.            For n = 1 To 3
  118.            
  119.                Select Case n
  120.                    Case 1: '#####Rechnungsdatum#####
  121.                         x1 = 12: y2 = 23: x2 = 2
  122.                     Case 2: ' #####Sonderposten#####
  123.                        x1 = 17: y2 = 23: x2 = 6
  124.  
  125.                   ' Case 10: ' Ersatz
  126.                        'x1 = 14: y2 = 22: x2 = 6
  127.                     Case Else: 'mehr "n" als "case"
  128.                        x1 = 0
  129.                      
  130.                End Select
  131.                If (x1 > 0) Then
  132.                      w1.Cells(y1, x1).Copy
  133.                    w2.Cells(y2, x2).PasteSpecial Paste:=xlPasteValues
  134.  
  135.  
  136.                End If
  137.            Next n
  138.  
  139.            w2.Activate
  140.  
  141.          Else
  142.            MsgBox "Bitte Ganz genau die Zeile überprüfen!!!"
  143.  
  144.        End If
  145.  
  146.  
  147. 'merge
  148.  
  149.  
  150. Range("B18").Select
  151.  
  152.  
  153.  
  154. Unload Me
  155.        
  156.        
  157.        
  158.    
  159.     If CheckBox3 = False Then
  160.    
  161.     End If
  162. End If
  163.  
  164.  
  165.  
  166. 'KEINE ZUSATZKOSTEN
  167. 'Standard
  168.  
  169.     If CheckBox4 = True Then
  170.  
  171.        
  172.         'ABFRAGE VON OBEN ANFANGEN
  173.      
  174.      
  175. ' Kopiervorgang der einzelnen Zellen [X1,X2 --> Spalten // Y1,Y2 --> Zeilen]
  176.       ' # = Variable Größe die sich ändert
  177.            For n = 1 To 10
  178.            
  179.                Select Case n
  180.                    Case 1: ' Adresse
  181.                         x1 = 3: y2 = 10: x2 = 1
  182.                     Case 2: ' Name
  183.                       x1 = 2: y2 = 9: x2 = 1
  184.                    Case 3: 'Rechnungsnummer Nummer
  185.                         x1 = 11: y2 = 9: x2 = 6
  186.                     Case 4: 'Kundennummer
  187.                        x1 = 9: y2 = 10: x2 = 6
  188.                    Case 5: ' Bezüglich
  189.                         x1 = 10: y2 = 12: x2 = 6
  190.                     Case 6: ' Gebohren
  191.                        x1 = 4: y2 = 13: x2 = 6
  192.                    Case 7: '#####Rechnungsdatum#####
  193.                         x1 = 12: y2 = 19: x2 = 2
  194.                     Case 8: ' #####Tage#####
  195.                        x1 = 16: y2 = 19: x2 = 4
  196.                    Case 9: ' #####Tagessatz#####
  197.                         x1 = 15: y2 = 19: x2 = 5
  198.                    ' Case 10: ' Bezeichnung!!!
  199.                         'x1 = 13: y2 = 19: x2 = 3
  200.                    Case Else: 'mehr "n" als "case"
  201.                         x1 = 0
  202.                        
  203.                 End Select
  204.                 If (x1 > 0) Then
  205.                       w1.Cells(y1, x1).Copy
  206.                     w2.Cells(y2, x2).PasteSpecial Paste:=xlPasteValues
  207.  
  208.  
  209.                 End If
  210.             Next n
  211.  
  212.             w2.Activate
  213.  
  214.           Else
  215.             MsgBox "Bitte Ganz genau die Zeile überprüfen!!!"
  216.  
  217.         End If
  218.  
  219.  
  220. 'merge
  221.  
  222. Worksheets("Rechnung").Select
  223. Range("A9:B9").Select
  224. Selection.Merge
  225.  
  226.    
  227.    Range("A10:C11").Select
  228.    With Selection
  229.        .HorizontalAlignment = xlLeft
  230.        .VerticalAlignment = xlTop
  231.        .WrapText = True
  232.        .Orientation = 0
  233.        .AddIndent = False
  234.        .IndentLevel = 0
  235.        .ShrinkToFit = False
  236.        .ReadingOrder = xlContext
  237.        .MergeCells = True
  238.    End With
  239. Range("B18").Select
  240.  
  241.  
  242.        
  243.        
  244.    Else
  245.     If CheckBox4 = False Then
  246.    
  247.    End If
  248. End If
  249.  
  250.  
  251.  
  252. Unload Me
  253.  
  254. End Sub
  255.  
  256. Private Sub UserForm_Initialize()
  257. Dim ctrl As Control
  258.  
  259. For Each ctrl In Me.Controls
  260.  If Left(ctrl.Name, 6) = "CheckB" Then
  261.    ctrl.Value = False
  262.  End If
  263. Next
  264.  
  265. End Sub
  266.  
  267.  
  268.  
  269. Private Sub commandbutton2_click()
  270. Unload Me
  271. End Sub
  272.  
  273.  

Keine Lösung gefunden? Du kannst Dich gerne an unser erfahrenes Experten-Team wenden und Dein Anliegen in Auftrag geben.
>>> Schnell und einfach ein unverbindliches Angebot anfordern. Per E-Mail an anfrage@excel-inside.de oder per Online-Formular
<<<

!!! Wichtige Information
!!! Dieses Forum steht aus technischen Gründen ab dem 11. September 2019 nur noch im Lesemodus zur Verfügung.
Das NEUE Office-Fragen-Forum kannst du aber unter der gewohnten Domain https://office-fragen.de wie gewohnt nutzen.

- Wir freuen uns auf deinen Besuch im neuen Forum.

Offline maninweb

  • Global Moderator
  • Hero Member
  • *****
  • Beiträge: 1.063
    • Profil anzeigen
    • Excel Formula Translator
  • Office-KnowHow: Experte
  • VBA-KnowHow- : Sehr gut
  • Version [Office] : Office 2016
Antw: Makroerweiterung um eine kleine Userformabfrage
« Antwort #1 am: Februar 24, 2012, 11:47:33 Vormittag »
Hallo nico345...

in weiteren Foren gab's Antworten zu Deinem Beitrag...

- http://www.office-loesung.de/ftopic510395_0_0_asc.php
- http://www.office-hilfe.com/support/showthread.php/16777-Makroerweiterung-um-eine-kleine-Userformabfrage

Konnten diese Lösungen Dir weiterhelfen?

Ausserdem möchte ich auf unsere Crossposting Regeln hinweisen.

Gruß
« Letzte Änderung: Februar 24, 2012, 11:50:29 Vormittag von maninweb »
Microsoft Excel Expert · Microsoft Most Valuable Professional (MVP) from 01/2011 - 06/2019
https://de.excel-translator.de :: Online Excel-Formel-Übersetzer :: Alle Übersetzungen der Excel Funktionen & Fehlerwerte

Offline nico345

  • Newbie
  • *
  • Beiträge: 2
    • Profil anzeigen
  • Office-KnowHow: Fortgeschritten
  • VBA-KnowHow- : Mittelmäßig
  • Version [Office] : Office 2003
Antw: Makroerweiterung um eine kleine Userformabfrage
« Antwort #2 am: Februar 25, 2012, 21:51:20 Nachmittag »
mhm leider konnte bisher eben nichts helfen. Deswegen bin ich ja mittlerweile 3 fach unterwegs.

Sorry wegen dem Regelverstoß. Soll nicht wieder vorkommen.

Offline Officer

  • Global Moderator
  • Hero Member
  • *****
  • Beiträge: 59.503
    • Profil anzeigen
    • Excel-Inside Solutions
  • Office-KnowHow: Profi
  • VBA-KnowHow- : Sehr gut
  • Version [Office] : Office 2019 / Office 365
Antw: Makroerweiterung um eine kleine Userformabfrage
« Antwort #3 am: Februar 26, 2012, 09:23:25 Vormittag »
Hallo Nico,
Nein, nein! Kein Regelverstoß. Im Forum ist Crossposting ausdrücklich erlaubt, siehe hier:  http://www.office-fragen.de/index.php/topic,114.0.html

Gruß Officer
« Letzte Änderung: Februar 26, 2012, 09:25:18 Vormittag von Officer »
Weitere Informationen, Tipps & Tricks findest du auf Excel-Inside.de
Bitte erfolgreich beantwortete Fragen als gelöst kennzeichnen -  zur Anleitung

Wenn du dich noch intensiver mit Excel beschäftigen möchtest, dann empfiehlt sich ein Online-Kurs,
in dem du sehr viel über Excel erfährst und das gelernte umgehend in der Praxis anwenden kannst.