perladd
Goto Top

Excel 2013: Visual Basic Problem

Hallo Leute,

ich habe von VB keinerlei Ahnung und das was ich jetzt hier habe ist mit programmiert worden, aber leider kann ich denjenigen nicht mehr fragen. Ich hoffe Ihr könnt mir bei meinem Problem weiterhelfen


Private Sub workbook_open()
Dim ws3 As Worksheet
Dim lngLR3 As Long
Dim intI3 As Integer
Dim MyDate3 As Range

Set ws3 = Worksheets("Virenscanner-Laufzeiten")
lngLR3 = ws3.Cells(Rows.Count, 3).End(xlUp).Row

For intI3 = lngLR3 To 2 Step -1
Set MyDate3 = ws3.Cells(intI3, 3)
If MyDate3 <> "" Then
Datum = DateValue(MyDate3 & DatePart("yyyy", Date))
If Datum <= Date And Date - Datum <= 7 And _
MyDate3.Offset(0, 2).Value = "" Then

a = MsgBox("Der Virenscanner " & MyDate3.Offset(0, -2).Value & " läuft am " & Datum - 30 & " aus," & Chr(13) & "Nochmals erinnern ?", vbYesNo)
If a = vbNo Then ActiveWorkbook.Save: Exit Sub Else
MyDate3.Offset(0, 2).Value = "Meldung erfolgt"
Else
If Date - Datum >= 7 Then
MyDate3.Offset(0, 2).Value = ""
End If
End If
End If
Set MyDate3 = Nothing
Next

End Sub


Wenn ich jetzt nein drücke, wird die Arbeitsmappe gespeichert und das wars. Hier sollte aber in diesem Fall, in dem Tabellenblatt "Virenscanner-Laufzeiten" in Spalte E, jeweils die Meldung drin sehen "Meldung erfolgt"

Wenn ich jetzt ja drücke, kommt eine Fehler Fenster mit dem Hinweis "Laufzeitfehler `13`: Typen unverträglich. Dabei wird aber der Hinweis in die Spalte E geschrieben, was ja bei nein passieren sollte


Fragt jetzt bitte nicht nach dem Sinn dieser Abfrage, ich möchte einfach im Vorfeld von Kunden wissen, wann der Virenscanner ausläuft


Für eure Hilfe bedanke ich mich bereits jetzt schon


Gruß

Thomas

Content-ID: 257634

Url: https://administrator.de/contentid/257634

Ausgedruckt am: 15.11.2024 um 07:11 Uhr

Meierjo
Meierjo 14.12.2014 um 16:11:27 Uhr
Goto Top
Hallo

Ist ein bisschen schwierig, wenn wir nicht wissen, was in deiner Excel-Tabelle steht, und was da eigentlich geschehen sollte.
Ein bisschen mehr Info, bitte. Oder eventuell eine Abbildung deiner Tabelle

Gruss Urs
Perladd
Perladd 14.12.2014 aktualisiert um 16:37:10 Uhr
Goto Top
Hi Urs,

sorry, dachte das reicht schon face-smile

A B C D E

1 Bezeichnung Kunde Anfangsdatum Enddatum Status
2
3 Test Test 14.12. 16.01.
4 Test2 Test2 01.01. 16.01.
5 Test3 Test3 31.12. 15.01.
6 Test4 Test4 25.11. 12.12.
7 Test5 Test5 17.10. 15.01.


Bezeichnung Spalte A
Kunde Spalte B
Anfangsdatum Spalte C
Enddatum Spalte D
Status Spalte E

Test - Test5 jeweils in der Zeile 3-7


Also dann das Prinzip von vorne.
Ich öffne also meine Excel Tabelle, dann soll in dem Tabellenblatt "Virenscanner-Laufzeiten" geprüft werden, ob ein Scanner ausläuft, anhand des Datums in der Spalte C. Wenn das Datum zutrifft, soll eine Meldung erfolgen, das der Scanner am Datum - 30 Tagen ausläuft. Dann noch die Auswahl, ob der Hinweis nochmals angezeigt werden soll oder nicht. Bei nein, soll der Hinweis in Spalte E erfolgen mit "Meldung erfolgt". Bei Ja wird die Tabelle einfach nur gespeichert.

Das prüfen des jeweiligen Datums soll aber nur 7 Tage lang erfolgen. Bsp. Zeile 1, 14.12. + 7 Tage, also am 21.12. soll dann das letzte mal die Frage kommen für Zeile 3.

Ich hoffe das war etwas verständlich und du kannst es nachvollziehen, anhand der jetzigen programmierung
Meierjo
Meierjo 14.12.2014 um 16:59:52 Uhr
Goto Top
Hallo

Also, mal abgesehen davon, dass die Inhalte in den Zellen falsch formatiert sind.
Da wird in irgendeiner Zelle in Spalte E ein Wert drinstehen, mit dem Excel ein Problem hat, deshalb der Laufzeitfehler.
Wenn du den Laufzeitfehler erhältst, kannst du ja auf "Debuggen" klicken, dann öffnet sich der VBAEditor, und markiert die Zeile, in der der Fehler ausgelöst wurde.
a8b18edb980e7106e0d0e4cd53ed5e17

Wenn du dann den Mauszeiger auf den MyDate3.Offset(0, 2).Value bewegst, zeigt Excel dir den Inhalt der Zelle an, die den Fehler auslöst.

Wäre mal interessant, was dort drin steht. Ansonsten vielleicht mal die Mappe zum Download bereitstellen.

Gruss
114757
114757 14.12.2014 aktualisiert um 17:39:30 Uhr
Goto Top
Moin,
Wenn ich jetzt nein drücke, wird die Arbeitsmappe gespeichert und das wars.
kann ja auch nicht denn in der Zeile die prüft ob ja oder nein gedrückt wurde steht am Ende ein Exit Sub was da nicht hingehört, denn es springt direkt aus der ganzen Prozedur ohne deine gewünschte Meldung in die entsprechende Zelle zu schreiben !! Und außerdem steht die Zeile die die Meldung eintragen soll im else-Teil der IF-Abfrage wird also dann nur eingetragen wenn man ja gedrûckt hat !

Gruß jodel32
opalka
opalka 16.12.2014 aktualisiert um 14:32:24 Uhr
Goto Top
Hallo,

so sollte es wie gewünscht funktionieren:

Private Sub workbook_open()

   Dim ws3 As Worksheet
   Dim lngLR3 As Long
   Dim intI3 As Integer
   Dim MyDate3 As Range

   Set ws3 = Worksheets("Virenscanner-Laufzeiten")  
   lngLR3 = ws3.Cells(Rows.Count, 3).End(xlUp).Row

   For intI3 = lngLR3 To 2 Step -1
      Set MyDate3 = ws3.Cells(intI3, 3)
      If MyDate3 <> "" Then  
         Datum = DateValue(MyDate3 & DatePart("yyyy", Date))  
         If Datum <= Date And Date - Datum <= 7 And _
          MyDate3.Offset(0, 2).Value = "" Then  
            a = MsgBox("Der Virenscanner " & MyDate3.Offset(0, -2).Value & " läuft am " & Datum - 30 & " aus," & Chr(13) & "Nochmals erinnern ?", vbYesNo)  
            If a = vbNo Then
               MyDate3.Offset(0, 2).Value = "Meldung erfolgt"  
            End If
         ElseIf Date - Datum >= 7 Then
            MyDate3.Offset(0, 2).Value = ""  
         End If
      End If
      Set MyDate3 = Nothing
   Next
   ActiveWorkbook.Save
End Sub

Ein Frage hätte ich noch, ist es korrekt, dass er mit dem Anfangsdatum rechnet? Müsste er nicht mit dem Enddatum rechnen?

Gruß
Perladd
Perladd 16.12.2014 um 14:47:08 Uhr
Goto Top
Hi,

vielen dank für deine Bemühungen, werde ich heute Abend direkt testen und dir berichten.

Ist richtig mit dem Anfangsdatum, habe die Tabelle und Werte jetzt so ausgerichtet, das es das Anfangsdatum sein soll

Gruß

Thomas
Perladd
Perladd 16.12.2014 um 18:44:45 Uhr
Goto Top
Hi,

so hab es jetzt soweit eingefügt. Leider bekomme ich noch 2 Fehlermeldungen. Wenn ich nein drücke, bekomme ich die Meldung

Laufzeitfehler "13"
Typen unverträglich

in Zeile 14

Die "Meldung erfolgt" wird aber erfolgreich eingertragen

Wenn ich ja drücke bekomme ich ebenfalls

Laufzeitfehler "13"
Typen unverträglich

in Zeile 14


Kannst du mir da evtl noch einmal weiterhelfen.

Gruß
Thomas
114757
Lösung 114757 17.12.2014 aktualisiert um 14:40:14 Uhr
Goto Top
Zitat von @Perladd:

Hi,

so hab es jetzt soweit eingefügt. Leider bekomme ich noch 2 Fehlermeldungen. Wenn ich nein drücke, bekomme ich die
Meldung

Laufzeitfehler "13"
Typen unverträglich

in Zeile 14
Zeile 14 sollte so lauten:
Datum = DateValue(MyDate3.Value & DatePart("yyyy", Date)) 
opalka
Lösung opalka 17.12.2014 aktualisiert um 14:40:17 Uhr
Goto Top
Was @114757 schreibt ist an sich korrekt, aber mit 99,999999999% nicht Ursache deines Laufzeitfehler. Die Zeile 14 erzeugt ein Datum aus dem Wert der Zelle (z.B. 14.12.) und dem Jahr aus dem heutigen Datum (2014). Wenn Du aber in der Zelle 14.12, 14.12.. oder irgendwo ein Leerzeichen stehen hast, dann kann kein gültiges Datum erstellt werden. Bitte überprüfe alle Zellen darauf, ob auch wirklich nur der Tag Punkt Monat Punkt drinne stehen, ansonsten funktioniert es nicht.
Meierjo
Meierjo 17.12.2014 um 11:26:53 Uhr
Goto Top
Hallo

.............Wenn Du aber in der Zelle 14.12, 14.12..
oder irgendwo ein Leerzeichen stehen hast, dann kann kein gültiges Datum erstellt werden. Bitte überprüfe alle
Zellen darauf, ob auch wirklich nur der Tag Punkt Monat Punkt drinne stehen, ansonsten funktioniert es nicht.

Wie ich in meinem 1. Beitrag auch schon geschrieben habe.

Gruss
opalka
opalka 17.12.2014 um 11:31:55 Uhr
Goto Top
@Meierjo sorry, habs überlesen.
Perladd
Perladd 17.12.2014 um 14:42:55 Uhr
Goto Top
Hallo Leute,

ich danke euch allen, die mir sooooooooooo tatkräftig und intensiv unter die arme gegriffen haben

Es funktioniert jetzt, hatte zwar immer noch den Fehler, aber es schien tatsächlich immer noch ein Leerzeichen drin gewesen zu sein

Ich wünsche allen Frohe Weihnachten und einen guten Rutsch ins neue Jahr


Gruß

Thomas
opalka
opalka 17.12.2014 um 15:24:37 Uhr
Goto Top
Ersetz mal bitte den Code in Zeile 14 mit dem nachfolgenden:

          Datum = DateValue(Trim(MyDate3.Value) & DatePart("yyyy", Date))  

Durch das Trim werden alle unnötigen Leerzeichen entfernt.

Ansonsten ebenfalls frohe Weihnachten und einen guten Rutsch.

PS. @Meierjo hat im Grunde auch zur Lösung beigetragen face-wink