Advertisement
Guest User

Untitled

a guest
Aug 17th, 2017
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Sub AlleRechnungenErstellen()
  2.  
  3.       Dim members As Collection
  4.     Set members = New Collection
  5.  
  6.     Dim memberAddrs As Object
  7.     Set memberAddrs = CreateObject("Scripting.Dictionary")
  8.  
  9.     Dim row, row2 As Long
  10.     Dim maxRow, maxRow2 As Long
  11.     Dim workbooks2 As Object
  12.     Dim sheet, sheet2 As Worksheet
  13.  
  14.     Set sheet2 = ActiveWorkbook.Worksheets(1)
  15.     maxRow = sheet2.Cells(sheet2.Rows.Count, "A").End(xlUp).row
  16.  
  17.     Set workbooks2 = Workbooks.Open("C:\juni 2017.xlsx")
  18.  
  19.     Set sheet = workbooks2.Worksheets(1)
  20.  
  21.     maxRow2 = sheet.Cells(sheet.Rows.Count, "A").End(xlUp).row
  22.  
  23.  
  24.     Dim answer As Integer
  25.     Dim language As Integer
  26.     Dim answer2 As Integer
  27.     Dim curName As String
  28.     Dim curHour As Double
  29.     Dim curAddr As String
  30.     Dim curName2 As String
  31.     Dim curAddr2 As String
  32.     Dim curAddressed As String
  33.     Dim curNr As String
  34.     Dim curAnrede As String
  35.     Dim curPLZ As String
  36.     Dim curOrt As String
  37.     Dim curAuftragsDatum As String
  38.     Dim curStundensatz As Integer
  39.     Dim RechnungsSumme As Long
  40.     Dim vormonat As Integer
  41.    
  42.    
  43.  
  44.     For row2 = maxRow To 2 Step -1  'Läuft von unten nach oben
  45.        curName2 = sheet2.Cells(row2, 2)
  46.         curAddr2 = sheet2.Cells(row2, 3)
  47.         curAddressed = sheet2.Cells(row2, 6)
  48.         vormonat = sheet2.Cells(row2, 22)
  49.        
  50.      
  51.        
  52.         If IsNumeric(sheet2.Cells(row2, 12)) Then
  53.         curStundensatz = sheet2.Cells(row2, 12)
  54.         End If
  55.        
  56.         curAnrede = sheet2.Cells(row2, 5)
  57.         If InStr(1, sheet2.Cells(row2, 4), " ") Then
  58.             curPLZ = Split(sheet2.Cells(row2, 4), " ")(0)
  59.             curOrt = Split(sheet2.Cells(row2, 4), " ")(1)
  60.         End If
  61.  
  62.         curAuftragsDatum = sheet2.Cells(row2, 14)
  63.        
  64.         If Not memberAddrs.Exists(curName2) Then
  65.             Set newMember = New auftrag
  66.             Call newMember.Create(curName2, 0, curAddr2, curAddressed, curAnrede, curPLZ, curOrt, curAuftragsDatum, curStundensatz, vormonat)
  67.             Call members.Add(newMember)
  68.             Call memberAddrs.Add(curName2, curAddr2)
  69.         End If
  70.        
  71.     Next row2
  72.    
  73.    
  74.  
  75.     For row = 1 To maxRow2
  76.         curName = sheet.Cells(row, 1)
  77.         curAddr = memberAddrs(curName)
  78.         curHour = Val(sheet.Cells(row, 7))
  79.        
  80.         If MemberExist(members, curName) Then
  81.  
  82.             Set checkMember = GetMemberByName(members, curName)
  83.             checkMember.AddHours (Val(curHour))
  84.        Else
  85.        
  86.         Set newMember = New auftrag
  87.         Call newMember.Create(curName, 0, curAddr, "Nicht im Auftragsverzeichnis", "Nicht im Auftragsverzeichnis", "Nicht im Auftragsverzeichnis", "Nicht im Auftragsverzeichnis", "Nicht im Auftragsverzeichnis", 0, 0)
  88.         Call members.Add(newMember)
  89.         End If
  90.    
  91.     Next row
  92.    
  93.     Dim strEintrag As Integer
  94.     strEintrag = InputBox("Tragen Sie die aktuelle Rechnungsnummer ein:")
  95.  
  96.     Dim member As auftrag
  97.    
  98.    
  99.     For Each member In members
  100.    
  101.         If member.GetHours > 0 Then
  102.        
  103.         RechnungsSumme = (member.GetHours * member.GetStundensatz) + ((member.GetHours * member.GetStundensatz) / 100) * 19
  104.        
  105.    
  106.         MsgBox ("Name: " & member.GetName & vbNewLine & "Stunden: " & member.GetHours & vbNewLine & "Straße: " & member.GetAddr & vbNewLine & "PLZ: " & member.GetPLZ & vbNewLine & "Ort: " & member.GetOrt & vbNewLine & "Anrede: " & member.GetAnrede & vbNewLine & "Ansprechpartner: " & member.GetAddressed & vbNewLine & "Stundensatz: " & member.GetStundensatz & vbNewLine & "Rechnungssumme: " & RechnungsSumme & vbNewLine & "Stunden Vormonat: " & member.GetStundenVormonat)
  107.        
  108.        
  109.         If member.GetStundenVormonat > 0 Then
  110.        
  111.        
  112.         answer2 = MsgBox("Es existieren Stunden aus dem Vormonat (" & member.GetStundenVormonat & "). ")
  113.        
  114.         Set checkMember = GetMemberByName(members, member.GetName)
  115.         checkMember.AddHours (Val(member.GetStundenVormonat))
  116.      
  117.            
  118.         End If
  119.        
  120.        
  121.         answer = MsgBox("Wollen Sie eine Rechnung für " & member.GetName & " (Stunden: " & member.GetHours & ") stellen?", vbYesNo + vbQuestion, "Rechnungsstellung")
  122.        
  123.        
  124.         If answer = vbYes Then
  125.             strEintrag = strEintrag + 1
  126.        
  127.             Dim pfad As String
  128.             Dim savePfad As String
  129.             Dim objWDApp As Object  'Word.Application
  130.            Dim objDocx As Object    'Word.Document
  131.  
  132.  
  133.  
  134.            
  135.  
  136.          'SPRACHE DER RECHNUNG AUSWÄHLEN UND PFAD ENTSPRECHEND WÄHLEN
  137.         'Vorlage für Englische Rechnungen schreiben
  138.      
  139.  
  140.             pfad = ThisWorkbook.Path & "\Makro Vorlagen\Rechnung.docx"
  141.             savePfad = ThisWorkbook.Path & "\Makro Output\Rechnung " & member.GetName & " 2017-" & strEintrag & ".docx"
  142.  
  143.             If Dir(pfad) = "" Then
  144.                 MsgBox "Datei """ & pfad & """ nicht gefunden!"
  145.                 Exit Sub
  146.             End If
  147.  
  148.  
  149.  
  150.  
  151.             Application.ScreenUpdating = False
  152.  
  153.             If objWDApp Is Nothing Then
  154.                 'damit wird verhindert das Word ein zweites Mal
  155.                'mit CreateObject geöffnet wird
  156.                'die erstere lässt sich sonst aus dem Task nicht entfernen
  157.                'Bei mehreren Versuchen erreicht man ganz schnell ein OutOfMemory
  158.                Set objWDApp = CreateObject("Word.Application")
  159.                 bolWordLiefNicht = True
  160.             End If
  161.  
  162.  
  163.  
  164.             'Word-Anwendung sichtbar starten
  165.            Set objWDApp = CreateObject("Word.Application")
  166.             objWDApp.Visible = True
  167.             'Vorlage öffnen - schreibgeschützt
  168.            Set objDocx = objWDApp.Documents.Open(pfad)
  169.  
  170.             'Werte aus Zellen in Excel an Textmarken im Worddokument einfügen
  171.  
  172.  
  173.  
  174.  
  175.             If objDocx.Bookmarks.Exists("Auftraggeber") = True Then
  176.                 objDocx.Bookmarks("Auftraggeber").Range.Text = member.GetName
  177.             End If
  178.             If objDocx.Bookmarks.Exists("Straße") = True Then
  179.                 objDocx.Bookmarks("Straße").Range.Text = member.GetAddr
  180.             End If
  181.             If objDocx.Bookmarks.Exists("Rechnungsnummer") = True Then
  182.                 objDocx.Bookmarks("Rechnungsnummer").Range.Text = "2017-" & strEintrag
  183.             End If
  184.             If objDocx.Bookmarks.Exists("Stunden") = True Then
  185.                 objDocx.Bookmarks("Stunden").Range.Text = member.GetHours
  186.             End If
  187.             If objDocx.Bookmarks.Exists("Ort") = True Then
  188.                 objDocx.Bookmarks("Ort").Range.Text = member.GetOrt
  189.             End If
  190.             If objDocx.Bookmarks.Exists("PLZ") = True Then
  191.                 objDocx.Bookmarks("PLZ").Range.Text = member.GetPLZ
  192.             End If
  193.             If objDocx.Bookmarks.Exists("zuHaenden") = True Then
  194.                 objDocx.Bookmarks("zuHaenden").Range.Text = member.GetAddressed
  195.             End If
  196.             If objDocx.Bookmarks.Exists("Auftragserteilung") = True Then
  197.                 objDocx.Bookmarks("Auftragserteilung").Range.Text = member.GetAuftragsdatum
  198.             End If
  199.             If objDocx.Bookmarks.Exists("Stundensatz") = True Then
  200.                 objDocx.Bookmarks("Stundensatz").Range.Text = member.GetStundensatz
  201.             End If
  202.  
  203.    
  204.             Application.ScreenUpdating = True
  205.  
  206.  
  207.             objDocx.SaveAs (savePfad)
  208.            
  209.            
  210.             Else
  211.            
  212.             'Stunden abspeichern falls Rehcnung nicht gestellt wird
  213.            
  214.             MsgBox ("Speicher: " & member.GetHours & "Stunden")
  215.             For row2 = maxRow To 3 Step -1
  216.               If member.GetName = sheet2.Cells(row2, 2) Then
  217.               sheet2.Cells(row2, 22).Value = member.GetHours
  218.               Exit For
  219.               End If
  220.             Next row2
  221.      
  222.          
  223.        
  224.     End If
  225.     End If
  226.        
  227.        
  228.     Next member
  229.        
  230.        
  231.        
  232.    
  233.    
  234. End Sub
  235. Private Function GetMemberByName(list As Collection, name As String) As auftrag
  236.     Dim member As auftrag
  237.  
  238.     For Each member In list
  239.         If member.GetName = name Then
  240.             Set GetMemberByName = member
  241.             Exit Function
  242.         End If
  243.     Next member
  244. End Function
  245. Private Function MemberExist(list As Collection, name As String) As Boolean
  246.     Dim member As auftrag
  247.  
  248.     For Each member In list
  249.         If member.GetName = name Then
  250.             MemberExist = True
  251.             Exit Function
  252.         End If
  253.     Next member
  254.  
  255.     MemberExist = False
  256. End Function
  257.  
  258.  
  259.  
  260.  
  261.  
  262.  
  263. Private M_name As String
  264. Private M_hours As Double
  265. Private M_addressed As String
  266. Private M_addr As String
  267. Private M_stundensatz As Integer
  268. Private M_anrede As String
  269. Private M_plz As String
  270. Private M_ort As String
  271. Private M_StundenVormonat As Integer
  272. Private M_auftragsDatum As String
  273. Public Sub Create(ByVal name As String, ByVal hours As Double, ByVal addr As String, ByVal addressed As String, ByVal anrede As String, ByVal plz As String, ByVal ort As String, ByVal auftrag As String, ByVal stundensatz As Integer, ByVal stundenVormonat As Integer)
  274.     M_name = name
  275.     M_hours = hours
  276.     M_addr = addr
  277.     M_addressed = addressed
  278.     M_anrede = anrede
  279.     M_plz = plz
  280.     M_ort = ort
  281.     M_auftragsDatum = auftrag
  282.     M_stundensatz = stundensatz
  283.     M_StundenVormonat = stundenVormonat
  284. End Sub
  285.  
  286. Public Function GetStundensatz() As Integer
  287. GetStundensatz = M_stundensatz
  288. End Function
  289. Public Function GetAnrede() As String
  290.     GetAnrede = M_anrede
  291. End Function
  292. Public Function GetAuftragsdatum() As String
  293.     GetAuftragsdatum = M_auftragsDatum
  294. End Function
  295. Public Function GetPLZ() As String
  296.     GetPLZ = M_plz
  297. End Function
  298. Public Function GetOrt() As String
  299.     GetOrt = M_ort
  300. End Function
  301. Public Function GetName() As String
  302.     GetName = M_name
  303. End Function
  304. Public Function GetHours() As Double
  305.     GetHours = M_hours
  306. End Function
  307. Public Function GetAddr() As String
  308.     GetAddr = M_addr
  309. End Function
  310. Public Function GetStundenVormonat() As Integer
  311.     GetStundenVormonat = M_StundenVormonat
  312. End Function
  313. Public Function GetAddressed() As String
  314.     GetAddressed = M_addressed
  315. End Function
  316. Public Sub AddHours(hours As Double)
  317.     M_hours = M_hours + hours
  318. End Sub
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement