Thema Datum  Von Nutzer Rating
Antwort
26.01.2022 07:53:33 Max
NotSolved
26.01.2022 08:47:55 volti
NotSolved
26.01.2022 11:38:35 Max
NotSolved
26.01.2022 11:52:57 Gast39075
NotSolved
26.01.2022 12:55:19 volti
NotSolved
Blau weitere Alternativen
26.01.2022 12:11:04 Gast17405
NotSolved

Ansicht des Beitrags:
Von:
Gast17405
Datum:
26.01.2022 12:11:04
Views:
446
Rating: Antwort:
  Ja
Thema:
weitere Alternativen

Es gibt noch weitere Alternativen als ein Ini-File.


Mit GetSetting() und SaveSetting() kann man diese mit Boardmitteln abspeichern (wird in der Windows-Regstry abgelegt). Das ist hauptsächlich dafür gedacht Einstellungen für ein späteres mal zu hinterlegen (z.B. die letzte Position einer UserForm).


Eine Weitere Möglichkeit ist, zusätzliche Werte in der Mappe zu speichern, ohne dass man diese jedoch auf einem versteckten Blatt unterbringen muss - per CustomXMLParts. Das funktioniert auch in Excel-AddIns (*.xlam).

 

Einfach gehaltenes Beispiel:

-> Kommt in ein Klassenmodul:

'Klasse: ValueStorage
Option Explicit

Private Const C_XML_NAMESPACE As String = "local::valueStorage"
Private Const C_VALUES_MAX As Long = 30

Private m_objValueStorage As Office.CustomXMLPart

Private Sub Class_Initialize()
  Set m_objValueStorage = GetValueStorage()
End Sub

'liefert, und erstellt ggf. dabei, den Werte-Speicher
Private Function GetValueStorage() As Office.CustomXMLPart
  Dim objParts As Office.CustomXMLParts
  Set objParts = ThisWorkbook.CustomXMLParts.SelectByNamespace(C_XML_NAMESPACE)
  If objParts.Count > 0 Then
    Set GetValueStorage = objParts.Item(1)
  Else
    Set GetValueStorage = InitValueStorage()
  End If
End Function

'erstellt den Werte-Speicher
Private Function InitValueStorage() As Office.CustomXMLPart
  Dim objValueStorage As Office.CustomXMLNode
  Dim i As Long
  Set objValueStorage = ThisWorkbook.CustomXMLParts.Add("<valueStorage xmlns='" & C_XML_NAMESPACE & "'/>").SelectSingleNode("*")
  For i = 1 To C_VALUES_MAX
    Call objValueStorage.AppendChildNode("value", , , "")
    Call objValueStorage.SelectSingleNode("value[last()]").AppendChildNode("ID", , msoCustomXMLNodeAttribute, CStr(i))
  Next
  Set InitValueStorage = objValueStorage.Parent
End Function

'liefert die Anzahl der gespeicherten Werte
Public Property Get ValueCount() As Long
  ValueCount = m_objValueStorage.SelectNodes("//value").Count
End Property

'setzt den Wert anhand seines Index
Public Property Let Value(Index As Long, NewValue As Variant)
  m_objValueStorage.SelectSingleNode("//value[@ID=" & Index & "]").Text = CStr(NewValue)
End Property

'liefert den Wert anhand seines Index
Public Property Get Value(Optional Index As Long) As Variant
  If Index = 0 Then
    Dim objValues As Office.CustomXMLNodes
    Dim i As Long
    Set objValues = m_objValueStorage.SelectNodes("//value")
    If objValues.Count > 0 Then
      ReDim vntValues(1 To objValues.Count)
      For i = 1 To objValues.Count
        vntValues(i) = objValues(i).Text
      Next
      Value = vntValues
    Else
      Value = Split(vbNullString)
    End If
  Else
    Value = m_objValueStorage.SelectSingleNode("//value[@ID=" & Index & "]").Text
  End If
End Property

 

-> Anwendungsbeispiel:

Option Explicit

Sub Test()
  
  Dim objValStorage As ValueStorage
  
  'Objekt der Klasse instanziieren
  Set objValStorage = New ValueStorage
  
  'zweiten Wert setzen
  objValStorage.Value(2) = "Test1234"
  
  'zweiten Wert abrufen
  Debug.Print "[2] = "; objValStorage.Value(2)
  
  'alle Werte abrufen (werden als Array zurückgegeben)
  Debug.Print "[]  = {'"; Join(objValStorage.Value(), "', '"); "'}"
  
  Debug.Print "----- "; CStr(objValStorage.ValueCount); " values -----"
  
End Sub

 


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
26.01.2022 07:53:33 Max
NotSolved
26.01.2022 08:47:55 volti
NotSolved
26.01.2022 11:38:35 Max
NotSolved
26.01.2022 11:52:57 Gast39075
NotSolved
26.01.2022 12:55:19 volti
NotSolved
Blau weitere Alternativen
26.01.2022 12:11:04 Gast17405
NotSolved