Werbung

Neueste Beiträge

Seiten: [1] 2 3 ... 10
1
Microsoft Excel / Re: 365 verschluckt sich in VBA
« Letzter Beitrag von maninweb am Heute um 10:49:56 »
Hallo Holzkopf,

Das Verwenden von Select sollte möglichst vermieden werden, das macht die Anwendung langsam und anfällig für Fehler. Ebenso Copy & Paste per Code,
denn gerade in neueren Versionen von Excel ist dies deutlich langsamer als in früheren Versionen. ActiveSheet sollte ebenfalls möglichst vermieden
werden, denn es bezieht sich auf zum Zeitpunkt, an dem der Code läuft, auf die aktive Tabelle. Wie Du siehst, wenn sich die Tabelle - aus welchem
Grund auch immer, also gewollt, ungewollt, MS Bug, MS Änderung - beim Durchlauf des Codes ändert, stimmt die Referenzierung nicht mehr.

Vermeiden lassen sich z.B. die zuvor genannten Punkte durch eine vollständige Referenzierung der Bereiche, Tabellen usw. Dann bist Du immer auf
der sicheren Seite.

Was den Durchlauf unterscheidet zwischen Aufruf aus der Tabelle und VBA-Editor betrifft, so kann ich diese Frage nicht 100 Prozent beantworten,
aber wenn der Durchlauf über den VBA-Editor erfolgt, ist das VBA-Fenster aktiv und nicht die Mappe. Das ist letzlich nicht dasselbe.

Ein Beispiel für fehlerhaften Code ist die Verwendung von Nil im Code. Nil gibt es nicht in Excel. Für Objekte die Nichts entsprechen, wäre der
Vergleich zu Nothing das Passende. Dadurch, dass Du aber nicht Option Explicit verwendest, versucht Excel das automatisch zu interpretieren und
Nil wird wie eine Variable behandelt, die leer ist. Das hat anscheinend bislang gut geklappt und tut es immer noch, aber es ist nicht korrekt.
Ausserdem hast Du Sprungmarken drin. Das ist zwar nicht grundsätzlich falsch, aber es gibt eleganteres, denn Sprungmarken sind schwer zu folgen.
Prozeduren sollten sich nicht rekursiv aufrufen, wenn keine Notwendigkeit darin besteht.

Wenn Du kein Option Explicit verwendest, lässt Du Excel freie Hand, was das Verwenden von Variablen betrifft. Es reicht nur ein Tippfehler im
Namen einer Variable und schon hast Du eine neue. Ebenso, was das Deklarieren von Variablen betrifft. Deklarierst Du nicht, nimmt Excel den Typ
Variant an und konvertiert je nach Typ (Zahl, String, ...) automatisch. Das klappt gut, aber darauf verlassen würde ich mich trotzdem nicht.
Denn VBA ist z.B. kein JavaScript und stammt aus den Neunzigern! Es gibt Verfechter, die meinen, Option Explicit und das Deklarieren von
Variablen sei nicht nötig, dem stimme ich persönlich nicht zu.

Solltest Du die Tabelle neu aufbauen, würde ich versuchen, erstmal möglichst viel per Formeln abzubilden. Ausserdem vielleicht auch das Layout
etwas umstellen und z.B. verbundene Zellen vermeiden. Den Code würde ich komplett neu schreiben. Gerne kannst Du hier Unterstützung erhalten,
sodenn es nicht eilt. Insgesamt sehe ich jedenfalls kein Problem darin, dass das Tool auch unter Excel 365 läuft.

Gruß
2
Microsoft Excel / Re: 365 verschluckt sich in VBA
« Letzter Beitrag von Holzkopf am Heute um 10:05:42 »
Hallo Maninweb,

danke erstmal für's Feedback. Klingt nach viel Arbeit, aber das sich das Problem von selbst löst wäre auch zu viel verlangt  ;D

Die Hinweise bzgl. ActiveSheet werden wir einbauen und zukünftig befolgen. Ich vermute, diese haben wir damals lediglich eingebaut, weil VBA mit dem normalen worksheets-Befehl mal wieder irgendwelche Befindlichkeiten hatte und nicht so recht wollte. Wir erleben das ab und an, dass man den gleichen Befehl mit einer range erst dann ausführen kann, wenn man die range vorher selected und dann den befehl an die selection hängt... total schwachsinnig und für uns unbegreiflich, aber Excels Wege sind manchmal eben unergründlich  ;D

Auf DB sollte er eigentlich nicht umstellen, denn das Blatt rufen wir ausschließlich für die Adresse den Empfängers auf. Und dafür brauchen wir es nicht umstellen. Das bringt mich zu meiner eigentlichen Frage:

Konntest Du nachvollziehen, wieso sich VBA da so chaotisch verläuft? Kannst Du einen fehlenden, überflüssigen oder falschen Befehl benennen? Immerhin funktioniert der Code mit F8 (auch in 2016) problemfrei. Was läuft beim Durchlauf mit F8 anders als beim Prozeduraufruf aus dem Blatt heraus?

Option Explicit kenne ich, hasse es aber wie die Pest. Ich weiß, dass unsere Programmierweise nicht ganz sauber ist - ohne diese Option - aber meiner Erfahrung nach macht diese Option mehr Probleme als sie löst. Das ist natürlich vor allem meiner hemdsärmeligen Programmierung geschuldet, das ist mir schon klar. Aber ich werde leider nicht über Nacht zum Profi.
Ich werde es dennoch versuchen umzusetzen, auch wenn dann ein komplettes Neuaufsetzen tatsächlich sinnvoll wird. Ich werde wsl versuchen, die Codeschnipsel einzeln zu transferieren. Nur wenn das Problem nicht in unserem Code liegt, habe ich nicht viel gewonnen. Und genau das ist meine Sorge, solange ich nicht weiß, was bei F8 anders läuft als bei F5.

Danke Dir aber auf jeden Fall erstmal für die Mühe. Ich weiß, dass es viel Arbeit ist, sich in einen Code eines anderen hineinzudenken, und jede Verschachtelung dieses Unterfangen noch schwieriger macht. Dafür also meinen Respekt...

Gruß, Holzkopf
3
Microsoft Excel / Re: 365 verschluckt sich in VBA
« Letzter Beitrag von maninweb am 2018-12-17 17:24:46 »
Hallo,

ich habe es mir mal angeschaut. Die Berechnung in outputblatt_erstellen der letzten Zeile bezieht sich auf das aktive Arbeitsblatt.
Besser wäre es, den Bezug auf das Blatt herzustellen, nicht auf das aktive Blatt. Das wäre dann beispielsweise so ...

Code: Visual Basic
  1. LetzteZeile = Worksheets("Output").Cells(Rows.Count, 4).End(xlUp).Row

Und dann an allen entsprechenden Stellen in der Prozedur. Ausserdem hatte ich ab und zu das Phänomen, dass das Sheet während
des Durchlaufs von outputblatt_erstellen auf das Arbeitsblatt DB umgestellt wurde, was dann wiederum eine fehlerhafte Rückgabe
von LetzteZeile bewirkt. Meine Empfehlungen wären also diesbezüglich folgende...

- Vollständige Referenzierungen verwenden (Worksheets(...).Range(...) usw.) sowie ActiveSheet vermeiden.
- Variablen mal alle korrekt deklarieren
- Option Explicit verwenden

Schau' mal, ob diese Massnahmen bereits helfen.

Generell ist der Code meines Erachtens jedoch überarbeitungsbedürftig, enthält Fehler und Konstrukte, die zu unerwartenden
Ergebnissen führen können. Excel 2016 ist da pingeliger. Ausserdem liesse sich m.E. einiges auch mit Formeln lösen.
Ich würde es bei Gelegenheit komplett neu aufsetzen.

Gruß
4
Microsoft Excel / Re: 365 verschluckt sich in VBA
« Letzter Beitrag von maninweb am 2018-12-17 09:19:51 »
Guten Morgen,

Danke für die Infos. Datei habe ich erhalten, reinschauen kann ich aber erst frühestens heute Abend.

Gruß
5
Microsoft Excel / Re: 365 verschluckt sich in VBA
« Letzter Beitrag von Holzkopf am 2018-12-16 22:34:38 »
Hallo Maninweb, hallo der Rest...

es war etwas Arbeit, aber ich habe die Version bereinigt... kann ich Dir diese jedoch per PN oder ähnliches zukommen lassen? DSGO ist auch bei uns leider ein Thema, daher würde ich sie nur als letztes Mittel der Wahl hier verteilen...

Was mir dabei auffiel, und was Du vorab schon mal wissen musst:
1) Ich möchte vermeiden, dass Nutzer die Arbeitsmappe ohne Makros starten können... Daher blendet die Mappe vor dem Speichern automatisch alle Blätter - bis auf ein NOVBA-Blatt - aus (veryhidden). Erst durch das aktivieren der Makros (in wb.open) werden diese wieder sichtbar. Diese Funktion funktioniert unter 365 möglicherweise nicht mehr, es sollten aber alle relevanten Blätter sichtbar sein...
2) Weiterhin ist der SaveAs auf xlsm limitiert (zum Glück kennt ja nicht jeder den Entwicklermodus)... sollte aber - sofern das noch funktioniert - kein Problem darstellen...
3) Es gibt ein verstecktes (veryhidden) Blatt namens Mitarbeiter - hier werden einige Einstellungen gemacht und Daten über die Mitarbeiter vorgehalten. Sofern es ausgeblendet wird: Entweder per VBA-Editor einblenden oder im JAN den Mitarbeiter EDIT eintragen (war mal der alte Weg).
4) Es gibt ein verstecktes (veryhidden) Blatt DB (Datenbank). Hier steht die Empfänger-Email drin, welche ich jedoch mit "erfundene@dresse.BLA" ersetzt habe. Weiterhin stehen hier die Projektkürzel und deren Gültigkeit drin... diese Kürzel können in den Monaten in Spalte A eingetragen werden.
5) In den Reitern der Monate ist Spalte A das Projektkürzel. Spalte B oben (grau hinterlegt) ist der Projektname (verformelt), unten (weiß hinterlegt) können Kommentare eingetragen werden. Rechts kommen dann die Tageswerte, in 0,25er Taktung einzutragen (max. 1,0 pro Tag in Summe)
6) Es werden einige Prüfroutinen bei der Eingabe durchlaufen (Modul Basisfunktionen, Function Check_WS), welche bei fehlerhafter Eingabe eine Rückmeldung geben und das Speichern verhindern. Diese werden in den Monatsreitern per worksheet.change aufgerufen - wenn nervig, hier einfach deaktivieren oder (besser) die Function Check_WS stilllegen (Rückgabe leerer Text = alles ok), da die Output-Routine einmal alles vorher durchcheckt...
7) Die Funktion "Datenbank aktualisieren" habe ich mal mehr oder minder deaktiviert - kannst Du eh nicht, weil der Zugriff fehlt... wäre auch unnötig... Die Datenbank ist nur eine zentral abgelegte xls, welche beim Öffnen oder nach Aufforderung in die Datei kopiert wird...
8 ) Die Funktionen ProtAll und UnProtAll im Modul "Basisfunktionen" scheinen auch unter 365 zu funktionieren - sind manchmal ganz hilfreich... ein Passwort ist auf den Blättern nicht drauf - hilft ja schließlich eh nicht...
9) Im Reiter OUTPUT sind die ersten Spalten ausgeblendet... hier wird in A-E alles aus den Monaten reinkopiert, in I-M steht die bisherige Historie. A-E wird anschließend sortiert und nach P-T kopiert, hier sind auch die Delta-Formeln zur Historie enthalten... Dann wird alles, was kein Delta aufweist, gelöscht. Der Nutzer sieht zum Schluß nur noch P-T. Sofern er mit den Deltas einverstanden ist, wird die Datei an einen zentralen Ansprechpartner verschickt (in DB definiert) und die Deltas in die Historie übernommen.
10) Achte im Output auf die Überschriften - klares Anzeichen für eine Fehlfunktion ist, dass die Überschriften sich verdrehen... Das liegt an einer fehlerhaften Ermittlung der Variable "LetzteZeile", wir haben nur noch nicht ganz herausgefunden, wieso die nicht korrekt ermittelt wird.
11) Wenn die Datei einmal fehlerhaft durchgelaufen ist, überschreibt und speichert sie sich auch selbst. Außerdem ist sie danach nur umständlich und mit vielen Handgriffen zu reparieren... Besser also vorher immer ein Backup machen und jedes mal von einer frischen Kopie starten. Nervig, aber ist erstmal so...

Zum testen: In einem Monat einfach mal was in Spalte A eintragen (bspw. 1 für Allgemein) und Tage belegen. Dann auf Output: "speichern und versenden" anwählen... rödelt dann etwas und fragt einen, ob die gezeigten Daten korrekt sind. wenn man bestätigt, wird die Datei normalerweise versendet (habe das .send gegen .Display getauscht), drucken ist optional...

Bin gespannt auf das Feedback - einige Programmierungen kommen den Cracks wahrscheinlich etwas hemdsärmelig vor... aber Hauptsache läuft... Meine Kollegin und ich haben unser gesamtes Excel-Wissen im Selbststudium erlernt... Wir sind definitiv keine normalen Nutzer - aber eben auch keine Programmierer... Habt also Erbarmen und Geduld mit uns, solltet ihr eure Befunde und Lösungen zweimal erklären müssen oder unsere Programmierung manchmal etwas eigensinnig sein ;D

Gruß, Holzkopf
6
Microsoft Excel / Re: 365 verschluckt sich in VBA
« Letzter Beitrag von maninweb am 2018-12-16 16:41:39 »
Hallo,

willkommen im Forum :-)

Ich würde vorschlagen, Du stellst hier eine anonymisierte Datei zur Verfügung, sodass ich und auch andere
das mal in Excel 2016 testen können.

Gruß
7
Microsoft Excel / 365 verschluckt sich in VBA
« Letzter Beitrag von Holzkopf am 2018-12-16 14:48:14 »
Hallo allerseits,

ja, ich bin neu, und ja, ich habe nicht gesucht... weil ich auch gar nicht wüsste, wie ich mein Problem suchen soll... Man möge mir bitte verzeihen...

Ich habe einen Gehaltsverrechnungsbericht, welcher für jeden Monat einen Reiter hat. Ein weiterer Reiter ist OUTPUT. Dort ist ein Knopf, welcher ein Makro startet, welches:
1) alle Einzelwerte der Monatsblätter in den Output kopiert
2) dort mit den Werten vergleicht, welche beim letzten Mal "Knopf drücken" drin standen, und anschließend das Delta in ein Sheet schreibt
3) anschließend die Datei selbst speichert und an einen hinterlegten Empfänger per Mail verschickt

Bis dahin kein Hexenwerk und lief bislang (unter MSO 2013) über Jahre bei etwa 400 Mitarbeitern hervorragend. Jetzt rüstet meine Firma auf 365 um. Damit nimmt das Drama seinen Lauf.
Das Makro verschickt ein technisch vollkommen unmögliches Ergebnis und zerschießt den gesamten Aufbau im Output. Auch die ermittelten Werte sind vollkommener Unfug.
Das Kuriose: Wenn man per F8 Schritt für Schritt durch das Makro durchklickt funktioniert alles... WTF???
Mir gehen die Ideen aus, ich weiß ehrlich nicht mal, wo ich mit meiner Fehlersuche anfangen soll...

Was hat sich geändert? Was mach ich falsch?

Sollten mehr Details notwendig werden, bitte einfach Rückmeldung geben. Ich weiß nur nicht, welche Info gebraucht wird, und bevor ich jetzt alles poste, was mir einfällt, warte ich lieber auf eure Anfrage.

Gruß, Holzkopf
8
Microsoft Outlook / outlook 2016 Posteingang
« Letzter Beitrag von landie2 am 2018-12-14 18:36:00 »
Nach ein paar Tagen sind plötzlich im Posteingang die eMails alle verschwunden. Dies trifft immer wieder auf.
9
Microsoft Outlook / Re: Mail wird fälschlicherweise als Exchange Konto geführt
« Letzter Beitrag von maninweb am 2018-12-14 11:35:12 »
Hallo,

bislang scheint wohl keiner eine Antwort dazu zu wissen. Was mich betrifft, ich leider auch nicht.
Ich kann Dir empfehlen, es mal bei MS Answers zu versuchen ...

https://answers.microsoft.com/de-de/outlook_com/forum

Gruß
10
Microsoft Outlook / Re: Outllok Office 365 sendent erst nach dem Neustart
« Letzter Beitrag von maninweb am 2018-12-14 11:31:13 »
Hallo,

starte mal Outlook im abgesicherten Modus: Windows Suchfeld aufrufen (z.B. in Windows 7 über den Startknopf, in Windows 10 über den Startknopf und lostippen)
und gebe dort outlook.exe /safe ein + Enter. Kann sein, dass Du zur Auswahl Deines Profils aufgefordert wirst. Normalerweise ist nur eins verfügbar. Teste dann
mal das Versenden einer Dummy-E-Mail.

Klappt das dann?

Gruß
Seiten: [1] 2 3 ... 10

An- und Abmeldung

 
 

Werbung