0
votes

Commutateur rapide entre les modes "prod" et "dev"

Je développe un code VBA en utilisant des macros automatisées avancées qui font "plomberie" et un débogage supplémentaire pendant la phase de développement. Cependant, lorsque j'envoie les fichiers aux utilisateurs (phase ded), je veux que tout cela soit éteint.

Ces commutateurs entre Dev et Prod se produisent beaucoup (Git + Devopshodologie).

Quel serait le moyen le plus / le plus élégant de mettre en place un "commutateur" rapide entre dev et prod? Oui, je pouvais simplement utiliser un Global Cons Isdebug (et je l'ai fait pour certains projets), mais c'est lourd, inélégant et sujet d'erreur (plus d'une fois, j'ai oublié de "retourner" le commutateur - comme je l'ai dit plus tôt, rapide et agile "Presque" CI / CD Pipeline).

Modifier

En ce moment, j'utilise un piratage sale rapide (je n'aime pas les hacks sales) qui vérifient si le fichier Excel est étant dirigé depuis un emplacement avec mon nom de connexion sur le chemin. Si oui - cela signifie que je travaille sur le dossier. Si non - quelqu'un d'autre l'utilise et que nous n'avons besoin de modes de débogage. Mais c'est moche et je peux prévoir de nombreux problèmes (pour un, demain quelqu'un d'autre pourrait développer ces VBA ... Le code de débogage devrait donc être réécrit).


5 commentaires

Dupliqué possible de Changer de manière programmatique Propriétés de compilation conditionnelle d'un projet VBA


Bonjour @gserg, merci pour le lien. C'est une idée assez intéressante ... mais un peu de surkill :) Encore une fois, je pourrais simplement utiliser un simple const appelé isdebug ... mais, comme l'expérience a prouvé, il est trop peu fiable et sujet à une erreur.


Cette question est une OMI basée sur l'opinion. Il existe de nombreuses options, un simple est getOption / setoption pour définir une option de débogage sur un ordinateur spécifique, mais vous ne pouvez pas avoir la compilation conditionnelle. Vous pouvez toutefois vous déboguer sur une station de travail spécifique sans avoir besoin de recompiler.


Qu'engage d'utiliser un fichier texte comme confort, s'il manque pas de débogage, le cas échéant, lecture / désactivation de réglage. Lors du déploiement sans le fichier de débogage du fichier est hors standard et si quelqu'un d'autre a besoin de déboguer, partagez le fichier.


@ComputerSterverSteher, honnêtement, c'est la meilleure suggestion :) Sorte de Unix-Way: Touchez .Debug :) Si vous écrivez cela dans une réponse, je vais accepter est une solution! Simple et doux. Lorsque je copie (automatiquement) ma macro, les utilisateurs n'auront pas ce fichier .debug! Totalement ce que je voulais!


3 Réponses :


1
votes

in vbe goto extras em> -> propriétés de vbaproject em> et entrez un argument pour la compilation, par exemple: xxx pré>

 Entrez la description de l'image Ici
désolé pour la capture d'écran allemande. em> sup> p>

Utilisez ensuite le code suivant P>

Option Explicit

Sub test()
    'the following #If is a compile condition
    #If DEV_MODE Then
        'this is only compiled in dev mode
        Debug.Print "debug mode is on"
    #Else
        'this is only compiled in production mode
        Debug.Print "debug mode is off"
    #End If
End Sub


4 commentaires

Comment est-ce plus facile / meilleur qu'un #Const ? Semble tout aussi facile, voire plus facile à oublier.


Merci @ pᴇʜ, je ne savais pas à propos de ces "argumers fuer bedingte kompielierung" :) pourrait être utile. Cependant, cela ne résout pas vraiment le problème - tout comme Erik A remarqué, il pourrait être encore plus facile d'oublier que de retourner une constante ...


Eh bien, il est pratiquement identique à celui d'un #Const mais mieux que d'utiliser un const . • Bien sûr, vous pouvez oublier de changer cela exactement comme n'importe quelle autre solution que vous le faites;) • Placez un avertissement de gros graisses dans votre événement ouvert au classeur qui apparaît en mode Dev, et vous devriez avoir une procédure de fonctionnement standard) pour publier quelque chose Ce qui inclut le test si le mode DEV est éteint (vous ne pouvez donc pas l'oublier).


Un autre pro pour cela est que tout le monde sait où rechercher cet interrupteur. S'il est caché dans l'un des nombreux modules, vous devez rechercher.



0
votes

Je n'aime pas la tentative d'interrupteur en tant que compilateur-réglage - oublier de changer est encore plus probable que de modifier une définition de const.

Je trouve votre tentative de vérification du nom d'utilisateur, de Devicename, du chemin du fichier ou de Des choses comme ça pas trop mal. Il suffit de mettre la logique dans une petite fonction istesmode () (même s'il s'agit d'une doublure) qui renvoie un booléen . Dans cette fonction, il est facile de changer de logique si une autre personne prendra le contrôle du travail. Utilisez cette fonction (et rien d'autre!) Pour vérifier si ou si vous ne voulez pas exécuter vos déclarations de débogage . xxx


3 commentaires

Cela semble exactement ce que l'OP déclare être un "hack sale", ils utilisent actuellement.


À la fin, tout est un hack. Const, Compiler le commutateur, INI-File, Registry ... Je voulais juste souligner que vous devriez avoir un endroit unique pour le vérifier afin qu'il soit facile de changer la logique. Et vous ne pensez-vous pas que la réponse acceptée du lien en double n'est pas un piratage beaucoup plus grand?


C'est aussi un piratage, mais ce n'est pas un hack l'OP utilise déjà .



1
votes

Vous pouvez utiliser un fichier texte dans le parcours de classeur comme condition.

Si le fichier est manquant ('debugmode.txt' Dans l'exemple) ou l'option de débogage ('débogmode: sur' dans TextFile) n'est pas définie, désactivez-la. Mode de débogage, sinon le tourne sur.

Si vous déployez le classeur sans le fichier texte sans fil de texte, le mode de débogage est éteint.

Si quelqu'un a besoin de mode de débogage sur, partager / créer le fichier.

exemple de code: xxx


2 commentaires

Juste un peu de note. Sachez que ce n'est pas un coffre-fort Mac. Donc, si vous avez des utilisateurs de Mac potentiels mais que vous ne développez que dans Windows, vous pouvez simplement la définir toujours en mode de production dans MacS. Par conséquent, utilisez la compilation conditionnelle #idif Mac puis ... 'Production ... #elle ... ' Votre code ... #End si . • Si vous souhaitez développer sur Mac également, vous aurez besoin d'une manière MAC pour tester le fichier, car scripting.filesystemObject n'est pas disponible sur Mac.


C'est la meilleure solution. Totalement automatique et sans tracas (lorsque vous copiez un fichier de bureau aux utilisateurs, ils n'auront pas le fichier .debug)! Si vous avez oublié d'ajouter le fichier .debug, vous le remarqueriez très rapidement pendant la phase de développement (lorsque certains outils cesseraient de travailler) :)