Cze wszystkim
Nie jestem ekspertem od VBA, ale podoba mi się to narzędzie
Napisałem fragment kodu z różnymi fragmentami makra, aby mieć automatyczną numerację moich części
Zapamiętuję licznik w komórce pliku Excela, który kopiuję, zwiększam i wklejam do schowka
Technicznie to działa
ale czas wykonania jest dość długi, ponieważ otwieram plik Excel, piszę, zapisuję i ponownie zamykam
Zastanawiałem się, czy nie ma możliwości zapisania wartości mojego licznika w innym miejscu, aby był szybszy
podczas wyszukiwania w sieci zauważyłem, że można przechowywać informacje w pliku INI, ale kod nie działa z Solidworks
Czy masz jakieś pomysły na przechowywanie wartości mojego licznika (4 znaki 1234)
Zastanawiałem się, czy nie ma sposobu, aby zapisać ten licznik bezpośrednio w pliku makra .swp
Co myślisz
Dziękuję
JC.
Dla Twojej informacji, licznik Smartproperties firmy Visiativ używa xml.
Oto przykład sposobu przechowywania opcji formularza użytkownika (pole wyboru)
Aby to zrobić w referencji, sprawdź Microsoft XML, v3.0 (następna wersja 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
Aby utworzyć go z makra, należy użyć funkcji:
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
Mój formularz użytkownika w celu pobrania opcji przechowywanych w pliku xml
'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
Kod dostosowujący się do Twoich potrzeb,
Jeśli chodzi o szybkość, nie zauważasz pisania/czytania.
Wielkie dzięki, zajmę się tym, będę Cię informować
JC
Witam serdecznie.
Twoim celem jest na przykład znalezienie stanu licznika po wyłączeniu komputera i wznowienie pracy 3 dni później? A może po prostu na sesję? A może coś innego?
W zależności od potrzeby wydaje mi się, że zadeklarowany obiekt Collection musi zostać zdedeklarowany po użyciu, w przeciwnym razie pozostaje w pamięci, więc myślę, że może kolekcja również zachowuje swoje wartości. Nigdy nie robiłem testu.
A może podzielić się licznikiem z kilkoma osobami? (plik XML przez sieć)
Dobry wieczór, tak, chcę udostępnić licznik i tak, musi on pozostać w pamięci po wyłączeniu komputera
Co to jest przedmiot kolekcjonerski dla mojej kultury?
Dziękuję
Dla obiektu kolekcji:
Ale gdy SW jest dla mnie wyłączony, kolekcja znika, a obiekt kolekcji byłby inny w każdym poście.
Najbardziej odpowiedni dla Twojej potrzeby wydaje mi się Xml taki jak Visiativ dla ich liczarki monet, której używaliśmy na 15-20 stacjach bez żadnych problemów.
Teraz przeszliśmy na wersję SQL, aby móc uzyskać numer nawet podczas telepracy.
FYI, strona, z której wypakowałem kod do pliku Xml:
Dzięki temu forum i specjaliście od vba dostosowałem wtedy kod planowany do biura.