Jak przechowywać zmienną (szybko)

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.

2 polubienia

Wielkie dzięki, zajmę się tym, będę Cię informować
JC

1 polubienie

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.

1 polubienie

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.

1 polubienie