Hoi allemaal
Ik ben geen expert, verre van dat in VBA, maar ik hou van de tool
Ik heb een stuk code geschreven met verschillende stukjes macro om een automatische nummering van mijn onderdelen te hebben
Ik onthoud de teller in een cel van een Excel-bestand dat ik kopieer, verhoog en plak in het klembord
Technisch werkt het
maar de uitvoeringstijd is vrij lang, omdat ik het Excel-bestand open, schrijf, opsla en weer sluit
Ik vroeg me af of er niet de mogelijkheid was om de waarde van mijn meter ergens anders op te slaan, zodat deze sneller zou zijn
tijdens het zoeken op het net, zag ik dat je informatie kon opslaan in een INI-bestand, maar de code werkt niet met Solidworks
Heeft u ideeën voor het opslaan van de waarde van mijn teller (4 tekens 1234)
Ik vroeg me af of er geen manier was om deze teller rechtstreeks in het macro .swp-bestand op te slaan
Wat denk je
Bedankt
JC.
Ter informatie: de Smartproperties-teller van Visiativ maakt gebruik van xml.
Hier is een voorbeeld van hoe je de opties van een userform kunt opslaan (checkbox)
Om dit in referentie te doen, controleert u Microsoft XML, v3.0 (volgende versie Office)
Code du main:
sPathXML = Environ("USERPROFILE") & "\.SaveMacroSldworks\"
sPathNameXML = sPathXML & nomfichierXML
Debug.Print sPathXML & nomfichierXML
'On vérifie si le dossier de sauvegarde existe sinon création de ce dossier
If Dir(sPathXML, vbDirectory + vbHidden) = "" Then
Debug.Print "Création du dossier: " & sPathXML
MkDir sPathXML
End If
FichierXml = sPathXML & nomfichierXML
Debug.Print "Fichier xml:" & FichierXml
Om het van de macro te maken, de functie:
Sub CreationCompleteXML() 'Création du fichier xml de sauvegardes des paramètres du menu options
Dim oXML As Object
Dim oNode As Object
Dim root As Object
Dim elem As Object
Dim rel As Object
Set oXML = New MSXML2.DOMDocument
Set oNode = oXML.createProcessingInstruction("xml", "version=""1.0"" encoding=""ISO-8859-1""")
oXML.appendChild oNode
With oXML.appendChild(oXML.createElement("OPTIONS"))
.appendChild oXML.createTextNode(vbCrLf)
.appendChild oXML.createTextNode(vbTab)
With .appendChild(oXML.createElement("CheckBoxLectureSeule"))
.Text = IIf(UserformOptionsMacro.CheckBoxLectureSeule.Value = 0, "False", "True")
End With
.appendChild oXML.createTextNode(vbCrLf)
.appendChild oXML.createTextNode(vbCrLf)
.appendChild oXML.createTextNode(vbTab)
With .appendChild(oXML.createElement("CheckBoxCacherPièce"))
.Text = IIf(UserformOptionsMacro.CheckBoxCacherPièce.Value = 0, "False", "True")
End With
.appendChild oXML.createTextNode(vbCrLf)
.appendChild oXML.createTextNode(vbTab)
With .appendChild(oXML.createElement("CheckBoxCacherPlan"))
.Text = IIf(UserformOptionsMacro.CheckBoxCacherPlan.Value = 0, "False", "True")
End With
.appendChild oXML.createTextNode(vbCrLf)
.appendChild oXML.createTextNode(vbTab)
With .appendChild(oXML.createElement("CheckBoxDesignation"))
.Text = IIf(UserformOptionsMacro.CheckBoxDesignation.Value = 0, "False", "True")
End With
.appendChild oXML.createTextNode(vbCrLf)
.appendChild oXML.createTextNode(vbTab)
With .appendChild(oXML.createElement("CheckBoxCouleur"))
.Text = IIf(UserformOptionsMacro.CheckBoxCouleur.Value = 0, "False", "True")
End With
.appendChild oXML.createTextNode(vbCrLf)
.appendChild oXML.createTextNode(vbTab)
With .appendChild(oXML.createElement("CheckBoxRevision"))
.Text = IIf(UserformOptionsMacro.CheckBoxRevision.Value = 0, "False", "True")
End With
.appendChild oXML.createTextNode(vbCrLf)
End With
oXML.Save FichierXml
End Sub
Mijn gebruikersformulier om de opties op te halen die in het xml-bestand zijn opgeslagen
'Initialisation du formulaire
Private Sub UserForm_Initialize()
'position du userform par rapport à la fenêtre (1= centré/fenêtre 2= centré écran, 3=angle en haut à gauche)
'Me.StartUpPosition = 0
Me.StartUpPosition = 2 - CenterScreen
'UserformOptionsMacro.Left = Activewindow.Left + Activewindow.Width / 2 - UserformOptionsMacro.Width / 2
'initialisation du userform
CommandButtonExec.SetFocus
'On parcours le fichier xml pour récupérer les valeures sauvegardées.
Debug.Print "Fichier xml:" & FichierXml
If Dir(FichierXml) = "" Then
Debug.Print "Pas de fichier xml trouvé -> les valeures par défaut seront sélectionnées"
CheckBoxLectureSeule = True
CheckBoxCouleur = True
CheckBoxDesignation = True
CheckBoxCacherPlan = True
CheckBoxCacherPièce = True
CheckBoxRevision = False
Else
Debug.Print "Fichier xml trouvé -> les valeures sauvegardées seront sélectionnées"
Dim oXML As MSXML2.DOMDocument
Dim oNode As MSXML2.IXMLDOMNode
Set oXML = New MSXML2.DOMDocument
oXML.async = False
oXML.Load FichierXml
For Each oNode In oXML.documentElement.childNodes
For Each osubnode In oNode.childNodes
Debug.Print " - " & oNode.baseName, "=" & osubnode.Text
If oNode.baseName = "CheckBoxLectureSeule" Then CheckBoxLectureSeule = osubnode.Text
If oNode.baseName = "CheckBoxCouleur" Then CheckBoxCouleur = osubnode.Text
If oNode.baseName = "CheckBoxDesignation" Then CheckBoxDesignation = osubnode.Text
If oNode.baseName = "CheckBoxCacherPlan" Then CheckBoxCacherPlan = osubnode.Text
If oNode.baseName = "CheckBoxCacherPièce" Then CheckBoxCacherPièce = osubnode.Text
If oNode.baseName = "CheckBoxRevision" Then CheckBoxRevision = osubnode.Text
Next
Next
End If
End Sub
Code om aan te passen aan uw behoeften,
Qua snelheid merk je niets van het schrijven/lezen.
Geweldig bedankt, ik zal ernaar kijken, ik zal je op de hoogte houden
JC
Hallo en welkom.
Uw doel is om de status van uw meter te kunnen vinden na het uitschakelen van bijvoorbeeld de computer en 3 dagen later verder te gaan? Of gewoon voor een sessie? Of iets anders?
Afhankelijk van de behoefte lijkt het mij dat een gedeclareerd collectieobject na gebruik moet worden gededeclareerd, anders blijft het in het geheugen hangen, dus ik denk dat de collectie misschien ook zijn waarden behoudt. Ik heb de test nooit gedaan.
Of een meter delen met meerdere personen? (XML-bestand via netwerk)
Goedenavond, ja, ik wil de meter delen en ja, deze moet in het geheugen blijven nadat ik de computer heb uitgeschakeld
Wat is voor mijn cultuur een collector's item?
Bedankt
Voor het collectieobject:
Maar zodra SW voor mij is uitgeschakeld, verdwijnt de collectie en zou het verzamelingsobject op elke post anders zijn.
Het meest geschikt voor uw behoefte lijkt mij de XML zoals Visiativ voor hun muntenteller die we op 15-20 stations gebruikten zonder ooit problemen te hebben gehad.
Nu zijn we overgestapt op de SQL-versie om ook bij telewerken een nummer te kunnen krijgen.
Ter info, de site waarvan ik de code voor het Xml-bestand heb geëxtraheerd:
Ik had toen de code gepland voor het kantoor aangepast dankzij dit forum en een vba-specialist.