Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Variablen füllen mit Schleife
#21
Funktioniert leider nicht wie es soll. Am Anfang funktioniert es noch (aber nicht Dein letzter Code). Aber je komplexer das dynamische Menü werden soll umso mehr verschluckt sich der Code, d.h. dass etwas an der Zusammenstellung des XML-Codes nicht mehr passt (ich kann aber nicht nachvollziehen was da schief läuft). Muss ich doch beim bisherigen Code bleiben. Aber vielleicht kommt ja noch ein weiterer Vorschlag. Danke für den Denkanstoß!
Antworten Top
#22
Jetzt nach dem Ausschlafen hat es doch noch funktioniert. Wer weiss woran er sich gestern verschluckt hat.

         strConfKey = Split("Caption MacroName ButtonId imageMSO isSeparator separatorID screentip supertip keytip tag")
         strStrings = Split("strLabel strMacro strButtonID strImageMSO strIsSeparator strSepName strScreentip strSupertip strKeytip strTag")

         strReadKeys = strConfKey
            For strConfKeyCount = 0 To Ubound(strConfKey)
                strReadKeys(strConfKeyCount) = MenueinhaltEinlesen(strMenuPoint & lngMenuPos, strConfKey(strConfKeyCount), strConfigPath)
            Next strConfKeyCount


VBA/HTML - CodeConverter für Office-Foren, AddIn für Excel/Word 2002-2013 - komplett in VBA geschrieben von Lukas Mosimann. Projektbetreuung durch mumpel

Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0


Jetzt wäre es noch schön wenn man die Inhalte den Variablen (die stehen in strStrings, gleich in der passenden Reihenfolge des Einlesens) zuweisen könnte.
Antworten Top
#23
Code:
Sub M_snb()
    MsgBox ErstelleMenueInhalt(Split(ThisDocument.FullName, ".")(0) & ".ini", "snb_001", 12, 20)
End Sub

Public Function ErstelleMenueInhalt(strConfigPath As String, strMenuPoint As String, x As Long, y As Long) As String
  sp = Split("separatorID ButtonId Caption MacroName  imageMSO isSeparator screentip supertip key tag")
  sn = Split("<menuseparator id_<button id_label_onAction_imageMSO_isSeparator_screentip_supertip_key_tag", "_")
 
  For j = x To y
    sq = sn
    For jj = 0 To UBound(sp)
      c00 = MenueinhaltEinlesen(strMenuPoint & jj, sp(jj), strConfigPath)
      If c00 <> "" Then sq(jj) = sq(jj) & IIf(jj < 2, j, "") & "=""" & c00 & IIf(jj < 1, "/>", "")
    Next
   
    ErstelleMenueInhalt = ErstelleMenueInhalt & "<" & Join(Filter(sn, "="), """ ") & """/>"
  Next
End Function

Schau mal weiter: http://www.snb-vba.eu/VBA_Arrays_en.html

Etwas merkwürdig: strFrom und strTo als 'Long' bezeichnen.
Antworten Top
#24
(06.12.2016, 14:36)snb schrieb: (...) Etwas merkwürdig: strFrom und strTo als 'Long' bezeichnen (...)
Ich habe gelernt Zahlen als Long zu übergeben anstatt als Integer. Bei "MenueinhaltEinlesen" habe ich jetzt alles als Variant deklariert, damit er mir das annimmt und ich trotzdem alle Variablen deklarieren kann.

Ich bekomme ein "Index außerhalb des gültigen Bereichs" bei "sq(jj) = sq(jj) & IIf(jj < 2, j, "") & "=""" & c00 & IIf(jj < 1, "/>", "")".
Antworten Top
#25
Dann kannst du sagen welche Werten jj, und sq(jj) haben:  F8  , Fenster Lokal und mouseover über Variablen.


Im 'ungarischen' Notation verwendet man 'str' als prefix zu einem 'string' Variable. Dann ist es merkwürdig zu sehen das du die strFrom als 'Long' bezeichnest.
Das könnte man 'inkonsistent' nennen, oder eben 'widersprüchlich'.
Antworten Top
#26
(06.12.2016, 18:01)snb schrieb: Dann kannst du sagen welche Werten jj, und sq(jj) haben (...)

Das 2. "sq(jj)" hat den Fehler, alle anderen sind gefüllt.

(06.12.2016, 18:01)snb schrieb: (...) oder eben 'widersprüchlich' (...)
Stimmt natürlich. Hatte ich "übersehen". ;)
Antworten Top
#27
Fehler gefunden. Zwischen "MacroName" und "imageMSO" in "sp" ist ein Leerzeichen zuviel.

Die Zusammenstellung passt aber noch nicht. Da muss ich noch nacharbeiten
Antworten Top
#28
Die Zusammenstellung passt so nicht.

<menuseparator id1="mnu1Separator"/><button id1="mnu1Button label ="Eintrag 1 on‌Action ="onAction_Button imageMSO ="FilesToolAddFiles isSeparator ="0 screentipsupertipkeytag ="Tag1

"isSeparator" darf nicht mit in den XML-Code rein, das ist nur ein Prüfeintrag (1 = menuSeparator setzen, 0 = menuSeparator nicht setzen). Der menuSeparator darf nur mit im den XML-Code rein wenn "isSeparator" auf 1 steht. "screentip" und "supertip" stehen zu nah beieinander, und dürfen nur aufgenommen werden wenn sie gefüllt sind (also <>"" sind). Es fehlen die abschließenden Anführungszeichen bei den Attributen. Zudem müssen die Attribute durch den Zähler ergänzt werden.

Richtig muss so sein wenn "isSeparator" auf 1 steht. Die Zahlen bei der Button-ID und Separator-ID sind die jeweiligen Zähler (j +1). "screentip", "supertip" und "keytip" dürfen nicht rein, da leer.
<menuSeparator id="mnu1Separator1"/><button id="mnu1Button1" label ="Eintrag 1" on‌Action ="onAction_Button" imageMSO ="FilesToolAddFiles" tag="Tag11" />
Antworten Top
#29
Sollte sein:

    ErstelleMenueInhalt = ErstelleMenueInhalt & Join(Filter(sq, "="), """ ") & """/>"

Zur Illustration wie die 'strings' aufgebaut werden:

Code:
Sub M_snb()
  sp = Split("separatorID ButtonId Caption MacroName  imageMSO isSeparator screentip supertip key tag")
  sn = Split("<menuseparator id_<button id_label_onAction_imageMSO_isSeparator_screentip_supertip_key_tag", "_")

   For j = 1 To 2
     sq = sn
     For jj = 0 To UBound(sq)
          c00 = "aaa_" & jj
          If jj <> 5 And jj <> 7 Then sq(jj) = sq(jj) & IIf(jj < 2, j, "") & "=""" & c00 & IIf(jj < 1, """/>", """")
        Next
        c01 = c01 & vbLf & Join(Filter(sq, "=")) & "/>"
   Next

   MsgBox c01
End Sub

Du siehst: wenn etwas leer ist (hier z.B. 5 und 7), wird nichts im String gesetzt.
Antworten Top
#30
Noch nicht richtig.

menuSeparator darf nur enthalten sein wenn "isSeparator" auf 1.
isSeparator ist nicht Bestandteil des XML-Codes, sondern nur ein Indikator für das Setzen des menuSeparators.

Die IDs "menuSeparator" und "button id" sind nicht korrekt. Es wird immernoch der Zähler an "id" angehängt anstatt an den Inhalt.

menuSpearator::
Falsch: <menuSeparator id1="0"/>
Richtig: <menuSeparator id="mnu1Separator1"/> (Soll sich zusammensetzen aus dem Inhalt von "separatorID" und dem Zähler lngMenuPos)

button id::
Falsch: <button id1="mnu1Button"
Richtig: <button id="mnu1Button1" (Soll sich zusammensetzen aus dem Inhalt von ButtonID und dem Zähler lngMenuPos)
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste