VBA in Word: Endlosschleife

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • VBA in Word: Endlosschleife

    Hallo


    Das Programm an sich steht ja,
    Aber leider habe ich nun noch 2 Schönheitsfehler.
    Von den gewünschten Funktionen her klappt es wunderbar, aber ....


    also er trägt alle Daten aus Excel in die Wordtabelle ein und Berechnet auch richtig den Gesamtpreis
    wenn eine Ware leer oder in geringerer stückzahl als angegeben vorhanden ist dann gibt er die Meldung und sagt das nurnoch x vorhanden sind und das man doch die Ware y nachbestellen soll

    Problem ist nun das er dann aber trotzdem mit der Schleife weitermacht
    Ich weiß nun leider nicht wie ich ihm sage das er nach der Meldung einfach aussteigen soll und auf erneute eingabe warten soll (denke das irgendwie mit goTo gehen könnte)
    Weiteres Problem ist das er nicht am Anfang der Tabelle anfängt einzutragen, sondern lustigerweise in der mitte der Tabelle und dann füllt er von oben auf bis die tabelle voll ist
    wenn die Tabelle voll ist stürzt das Programm natürlich auch wieder ab
    Wie geht es das er die Tabelle erweitert???
    Oder soll ich einfach das Programm dann mit einem END killen und dann hat man ja seine Rechnung.
    Aber wie mache ich ihm klar das er erst wenn die Tabelle voll ist das Programm killen soll???


    der code von dem ganzen spaß:

    Quellcode

    1. Dim dateiauswahl
    2. Dim xl As Object
    3. Dim wdApp As Word.Application
    4. Dim wdDoc As Word.Document
    5. Dim wdRng As Word.Range
    6. Dim ol As Object
    7. Dim namen() As String
    8. Dim Bereich As Object
    9. Dim Einzel As Integer
    10. Dim Menge As Integer
    11. Dim i As Integer
    12. Dim a As Integer
    13. Dim b As Integer
    14. Dim gesamtpreis As Integer
    15. Private Sub UserForm_Activate()
    16. 'Datei-Öffnen Dialog zur Auswahl der Excel Datei
    17. 'Set Dialog = CreateObject("MSComDlg.CommonDialog")
    18. 'On Error Resume Next
    19. 'With Dialog
    20. ' .Filter = "Excel (*.xls)|*.xls"
    21. ' .DialogTitel = "Datei öffnen"
    22. ' .MaxFileSize = 260
    23. ' .InitDir = "C:"
    24. ' .ShowOpen
    25. ' If Err = 0 Then
    26. ' MsgBox "Ausgewälte Datei: " & .FileName
    27. ' End If
    28. dateiauswahl = "C:\waren.xls"
    29. ' End With
    30. '##Combobox mit Inhalten aus Excel füllen##
    31. Set xl = CreateObject("excel.Application")
    32. xl.workbooks.Open ("C:\waren.xls")
    33. ComboBox1.Clear
    34. Set Bereich = xl.worksheets(1).[A1].CurrentRegion
    35. For i = 2 To Bereich.Rows.Count
    36. ComboBox1.AddItem xl.worksheets(1).Cells(i, 1).Value
    37. Next
    38. ComboBox1.Value = ComboBox1.List(0)
    39. Set wdApp = CreateObject("word.Application")
    40. End Sub
    41. Private Sub ComboBox1_Change()
    42. '##Lagerbestand in Textfeld eintragen##
    43. a = ComboBox1.ListIndex + 2
    44. TextBox1.Text = xl.worksheets(1).Cells(a, 2).Value
    45. End Sub
    46. Private Sub WareBuchen_Click()
    47. '##Benötigte Ware aus Lagerbestand ausbuchen und in Worddokument eintragen (Bezeichnung, Menge, Einzelpreis und Gesamtpreis)##
    48. gesamtpreis = xl.worksheets(1).Cells(a, 3).Value
    49. TextBox1.Text = TextBox1.Text - TextBox2.Text
    50. If TextBox1.Text < 0 Or TextBox1.Text < TextBox2.Text Then
    51. MsgBox "Nicht genügend Ware vorhanden! Nurnoch " & xl.worksheets(1).Cells(a, 2).Value & " Stück vorhanden Bitte bestellen Sie umgehend " & ComboBox1.Value & " nach", vbCritical, "FEHLER"
    52. 'Hier ein Abbruch einfügen damit nicht weitergerechnet wird
    53. Else:
    54. a = ComboBox1.ListIndex + 2
    55. xl.worksheets(1).Cells(a, 2).Value = TextBox1.Text
    56. TextBox1.Text = xl.worksheets(1).Cells(a, 2).Value
    57. End If
    58. ' Do While c = False
    59. 'If ActiveDocument.Tables(1).Cell(a, 1).Range.Text = vbCr & Chr(7) Then
    60. ' c = True
    61. 'Else
    62. b = b + 1
    63. 'End If
    64. 'Loop
    65. ActiveDocument.Tables(1).Cell(a, 1).Range.Text = TextBox2.Text
    66. ActiveDocument.Tables(1).Cell(a, 2).Range.Text = xl.worksheets(1).Cells(a, 1).Value
    67. ActiveDocument.Tables(1).Cell(a, 3).Range.Text = xl.worksheets(1).Cells(a, 3).Value
    68. ActiveDocument.Tables(1).Cell(a, 4).Range.Text = gesamtpreis * TextBox2.Text
    69. ' c = False
    70. End Sub
    71. Private Sub Rechnungssumme_Click()
    72. '##Rechnungsbetrag berechnen##
    73. End Sub
    74. Private Sub Ende_Click()
    75. xl.workbooks(1).Save
    76. xl.Quit
    77. Set xl = Nothing
    78. End
    79. End Sub
    80. Private Sub UserForm_Terminate()
    81. xl.workbooks(1).Save
    82. xl.Quit
    83. Set xl = Nothing
    84. End Sub
    Alles anzeigen

    wenn jemand weitere fehler im Code auffallen dann bin ich auch sehr froh wenn man mir das sagt
  • Word VBA problem

    hier mal zwei Tipps:

    Schleife verlassen geht mit Exit Do oder Exit For

    Warum fängt das Programm mitten in der Tabelle an:

    hier lies du den ListIndex der ComboBox aus, der wird ja durch das +2 niemals 1 sein

    Quellcode

    1. Private Sub ComboBox1_Change()
    2. '##Lagerbestand in Textfeld eintragen##
    3. a = ComboBox1.ListIndex + 2
    4. TextBox1.Text = xl.worksheets(1).Cells(a, 2).Value

    und dann weiter unten wird a verwendet, ohne noch mal auf 1 zurückgesetzt worden zu sein, dann kann es ja nicht in Zeile 1 anfangen

    Quellcode

    1. ActiveDocument.Tables(1).Cell(a, 1).Range.Text = TextBox2.Text
    2. ActiveDocument.Tables(1).Cell(a, 2).Range.Text = xl.worksheets(1).Cells(a, 1).Value
    3. ...

    Viele Grüße

    stefan.sp