Registriert seit: 11.04.2014
Version(en): Office 365
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ß!
Registriert seit: 11.04.2014
Version(en): Office 365
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.
Registriert seit: 29.09.2015
Version(en): 2030,5
06.12.2016, 15:36
(Dieser Beitrag wurde zuletzt bearbeitet: 06.12.2016, 15:36 von snb.)
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.htmlEtwas merkwürdig: strFrom und strTo als 'Long' bezeichnen.
Registriert seit: 11.04.2014
Version(en): Office 365
06.12.2016, 17:38
(Dieser Beitrag wurde zuletzt bearbeitet: 06.12.2016, 17:39 von mumpel.)
(06.12.2016, 15: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, "/>", "")".
Registriert seit: 29.09.2015
Version(en): 2030,5
06.12.2016, 19:01
(Dieser Beitrag wurde zuletzt bearbeitet: 06.12.2016, 19:01 von snb.)
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'.
Registriert seit: 11.04.2014
Version(en): Office 365
06.12.2016, 19:14
(Dieser Beitrag wurde zuletzt bearbeitet: 06.12.2016, 19:14 von mumpel.)
(06.12.2016, 19: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, 19:01)snb schrieb: (...) oder eben 'widersprüchlich' (...) Stimmt natürlich. Hatte ich "übersehen". ;)
Registriert seit: 11.04.2014
Version(en): Office 365
Fehler gefunden. Zwischen "MacroName" und "imageMSO" in "sp" ist ein Leerzeichen zuviel.
Die Zusammenstellung passt aber noch nicht. Da muss ich noch nacharbeiten
Registriert seit: 11.04.2014
Version(en): Office 365
06.12.2016, 19:46
(Dieser Beitrag wurde zuletzt bearbeitet: 06.12.2016, 20:45 von mumpel.)
Die Zusammenstellung passt so nicht.
<menuseparator id1="mnu1Separator"/><button id1="mnu1Button label ="Eintrag 1 onAction ="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" onAction ="onAction_Button" imageMSO ="FilesToolAddFiles" tag="Tag11" />
Registriert seit: 29.09.2015
Version(en): 2030,5
06.12.2016, 22:16
(Dieser Beitrag wurde zuletzt bearbeitet: 06.12.2016, 22:16 von snb.)
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.
Registriert seit: 11.04.2014
Version(en): Office 365
06.12.2016, 22:25
(Dieser Beitrag wurde zuletzt bearbeitet: 06.12.2016, 22:26 von mumpel.)
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)
|