Wir haben eine Exccel-Tabelle, mit der wir den Rota für die Supporttechniker außerhalb der Geschäftszeiten verwalten können. Vor einiger Zeit habe ich ein wenig VBA-Code hinzugefügt, der die Telefonnummern des Support-Technikers außerhalb der Geschäftszeiten automatisch auf das Telefon des Technikers umleitet.
Dies geschieht durch Verbinden mit einer Datenbank, die von den Telefonanbietern ausgeführt wird, und Aktualisieren der Umleitungsnummer.
Heute Nachmittag funktioniert es plötzlich nicht mehr auf dem zentralen Server:
%Vor% Der Code stoppt an der Zeile New ADODB.Connection
und meldet:
Ich kann das Makro auf meinem Laptop immer noch ausführen, und es funktioniert ordnungsgemäß. Und auf dem zentralen Server kann ich immer noch Excel verwenden und eine Verbindung zur Datenquelle herstellen. Es wird einfach nicht mehr über VBA auf diesem Server funktionieren.
Das Makro lief um 9 Uhr morgens korrekt und umgeleitete alle Telefone zum Büro, aber die Umleitung von 17 Uhr zum Personalmakro funktionierte nicht. Ich kann nicht sehen, dass Windows heute aktualisiert wurde, oder wirklich irgendwelche anderen Änderungen überhaupt.
Hat jemand dieses Problem schon einmal gesehen?
OK hat das Problem gefunden. Anscheinend ist eine der externen Referenzen für den VBA-Kram deaktiviert (ADO 2.8 Recordset). Ich habe die Referenz hinzugefügt und es scheint jetzt OK zu funktionieren.
Da ich irgendwie 3 upvotes für die Beantwortung meiner eigenen Frage (!) habe, sollte ich ein bisschen mehr Details hinzufügen, falls andere Leute dieses Problem sehen:
Im Visual Basic-Editor unter Extras - & gt; Referenzen, ich hatte Microsoft ActiveX Data Objects 2.8 Library
ausgewählt. Aber Microsoft ActiveX Data Objects Recordset 2.8 Library
wurde nicht ausgewählt. Interessanterweise erscheint diese Bibliothek unter Windows 7 nicht einmal als Option, aber die Makros funktionieren ohne sie.
Noch eine Anmerkung, da offensichtlich viele Leute dieses Problem haben ... Meine obige Antwort löste das Problem, aber nur bis bestimmte Leute die Datei erneut bearbeiteten, woraufhin ihre Version von Office das Problem automatisch neu erzeugte und ich musste es wieder lösen.
Es gibt zwei längerfristige Lösungen:
1) Sie können die späte Bindung verwenden und die referenzierte Bibliothek vollständig entfernen. Weitere Informationen hierzu finden Sie Ссылка .
2) Für meine Zwecke habe ich die Makros komplett in eine andere Arbeitsmappe verschoben - diese Makros sollten sowieso nur vom zentralen Server ausgeführt werden (Leute, die gerade den Dienstplan sehen, haben die ODBC-Datenquelle nicht eingerichtet, also haben die Makros gewonnen Ich laufe sowieso nicht. Der erste Schritt, den die VBA in der Arbeitsmappe des Makros macht, besteht darin, die eigentliche Dienstplan-Arbeitsmappe zu öffnen, und dann wird der Rest des VBA-Codes unverändert ausgeführt.
Ich mache viel VBA-Arbeit und bin in letzter Zeit sehr oft darauf gestoßen. Ich werde ein Programm schreiben und es wird für eine lange Zeit gut laufen (für Jahre in einigen Fällen) und dann eines Tages einige Computer beginnen, diesen Fehler zu bekommen.
Eines der offensichtlichsten Dinge für einen Entwickler ist, dass ADODB.Connection und / oder ADODB.Recordset sich selbst nicht mehr selbst erzeugen. Entweder ADODB ist Kleinbuchstaben oder der zweite Teil ist. Manchmal ist die Kapitulation jedoch in Ordnung und es passiert immer noch.
Das Trennen der Erstellung des Verbindungs- und / oder Re-Cord-Set-Objekts von der Code-Änderung "Set new" hat es jedes Mal für mich behoben.
Insbesondere haben die folgenden Codeoptimierungen das immer für mich behoben:
Ändern Sie die Erstellung beliebiger Verbindungsobjekte von:
%Vor%An:
%Vor%Ändern Sie auf ähnliche Weise die Erstellung von beliebigen Re-Cord-Set-Objekten aus:
%Vor%An:
%Vor%Ich hatte ein ähnliches Problem, bei dem mein VBA-Code auf meinem lokalen Computer (Windows 7) funktionierte, aber nicht von einem Citrix Server (Windows 2003 Server) ausgeführt wurde und bei einem Laufzeitfehler von 430 fehlschlug Stellen Sie eine Verbindung her (Set Conn = New ADODB.Connection).
Ich habe nicht über die Unterschiede in den Windows-Versionen nachgedacht, bis ich diese Antworten gelesen habe, und wenn ich nicht markiert "Microsoft ActiveX Data Objects 2.8 Library" und checked "Microsoft ActiveX Data Objects 2.7 Library ", alles hat gut funktioniert.
Ich möchte nur weiterleiten und Danke für diese Beiträge sagen, die mich in die richtige Richtung führen.