Registriert seit: 11.04.2014
Version(en): Office 365
Hallo! For lngMenuPos = strFrom To strTo
strCaption = MenueinhaltEinlesen(strMenuPoint + CStr(lngMenuPos), "Caption", strConfigPath)
strMacro = MenueinhaltEinlesen(strMenuPoint + CStr(lngMenuPos), "MacroName", strConfigPath)
strButtonID = MenueinhaltEinlesen(strMenuPoint + CStr(lngMenuPos), "ButtonID", strConfigPath)
strImageMSO = MenueinhaltEinlesen(strMenuPoint + CStr(lngMenuPos), "imageMSO", strConfigPath)
strIsSeparator = MenueinhaltEinlesen(strMenuPoint + CStr(lngMenuPos), "isSeparator", strConfigPath)
strSepName = MenueinhaltEinlesen(strMenuPoint + CStr(lngMenuPos), "separatorID", strConfigPath)
strScreentip = MenueinhaltEinlesen(strMenuPoint + CStr(lngMenuPos), "screentip", strConfigPath)
strSupertip = MenueinhaltEinlesen(strMenuPoint + CStr(lngMenuPos), "supertip", strConfigPath)
strKeytip = MenueinhaltEinlesen(strMenuPoint + CStr(lngMenuPos), "key", strConfigPath)
strTag = MenueinhaltEinlesen(strMenuPoint + CStr(lngMenuPos), "tag", strConfigPath)
Next lngMenuPos
VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0 Mit diesem Code fülle ich Variablen. Nur sieht das (in meinen Augen) nicht elegant aus. Das kann man doch sicher per Schleife lösen (Schleifen sind nicht mein Fall!)? Z.B. die Variablen und die zugehörigen Parameter in jeweils ein Array packen und dann darauf die Schleife aufbauen? Aber ohne dass mehr Zeilen, oder genausoviele Zeilen wie bisher, herauskommen!? Gruß, René
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
Hallo René,
das ist ja schon eine Schleife, die sich nicht noch weiter verkürzen lässt, da 10 verschiedene Variablen befüllt werden. Nur könnte man hier doch gleich den letzten Wert strTo nehmen?
Gruß Uwe
Registriert seit: 11.04.2014
Version(en): Office 365
05.12.2016, 17:29
(Dieser Beitrag wurde zuletzt bearbeitet: 05.12.2016, 17:29 von mumpel.)
(05.12.2016, 16:17)Kuwer schrieb: (...) Nur könnte man hier doch gleich den letzten Wert strTo nehmen? (...) Das kann man nicht. strTo ist der letzte Eintrag in einer Konfigurationsdatei der ausgelesen werden soll . PHP-Code: [Menü1Eintrag1] isSeparator=0 separatorID=mnu1Separator Caption=Eintrag 1 MacroName=onAction_Button ButtonID=mnu1Button imageMSO=FilesToolAddFiles tag=Tag1 screentip= supertip= keytip=
[Menü1Eintrag2] isSeparator=0 separatorID=mnu1Separator Caption=Eintrag 2 MacroName=onAction_Button ButtonID=mnu1Button imageMSO=FileInternetFax tag=Tag2 screentip= supertip= keytip=
Darum geht es: http://www.rholtz-office.de/ribbonx/dyna...nue#Teil_5 (Funktion "ErstelleMenueInhalt"). Hatte gehofft den Code noch etwas kürzer und damit übersichtlicher zu bekommen. (Diesen Teil gibt es übrigens erst seit heute).
Registriert seit: 29.09.2015
Version(en): 2030,5
05.12.2016, 17:58
(Dieser Beitrag wurde zuletzt bearbeitet: 05.12.2016, 17:58 von snb.)
statt Variablen strCaption... strTag reicht ein Array (z.B. sn)statt feste Werten Caption... tag wäre ein Array sinnvoll, z.B. spDann reichtCode: sub M_snb() sp=split("Caption MacroName ButtonId inageMSO isSeparator separatorID screentip supertip key tag") For j=0 to ubound(sp) sn(j)= MenueinhaltEinlesen(strMenuPoint & j, sp(j), strConfigPath) next End Sub
Registriert seit: 11.04.2014
Version(en): Office 365
05.12.2016, 18:19
(Dieser Beitrag wurde zuletzt bearbeitet: 05.12.2016, 18:19 von mumpel.)
Fehlermeldung: Argument ByRef unverträglich (das zweite Argument sp(j) markiert)
Registriert seit: 29.09.2015
Version(en): 2030,5
05.12.2016, 19:08
(Dieser Beitrag wurde zuletzt bearbeitet: 05.12.2016, 19:08 von snb.)
Dann solltest du die Code von MenueinhaltEinlesen zeigen müssen. (du hattest nicht erwähnt was das ist (ein sub, array, Function ,oder....)
Und was sind 'strMenuPoint' und 'strConfigPath' ?
Registriert seit: 11.04.2014
Version(en): Office 365
In #3 hatte ich einen Link gesetzt, dort steht was ich verkürzen möchte. Das zweite Attribut (sp(j)) erwartet einen String.
strConfigPath = Der Pfad zur Konfigurationsdatei strMenuPoint = Das sind die Einzelnen Punkte (siehe #3). Übergeben werden z.B. "Menü1Eintrag" (übergeben durch das Ribbon-Callback) ergänzt durch den Zähler (CStr(lngMenuPos)).
Registriert seit: 11.04.2014
Version(en): Office 365
Hier mal "komplett". Die "Declare Function" habe ich mal anders benannt und die Attribute "eingedeutscht" (im Internet heisst es immer nur Declare Function GetPrivateProfileString), damit auch Anfänger wissen wo sie was angeben und wie deklarieren müssen. Option Private Module
Option Explicit
Private Declare Function ReadXMLLayout Lib "kernel32.dll" Alias "GetPrivateProfileStringA" ( _
ByVal MenueName As String, ByVal MenueAttribut As String, ByVal NullString As String, _
ByVal LeerZeichen As String, ByVal Groesse As Long, ByVal INIPfad As String) As Long
Private Const MAX_COUNT = 255
Public Function MenueinhaltEinlesen(strMenueName As String, strMenueAttribut As String, strINIPfad As String) As String
Dim lngInhalt As Long
Dim strReturn As String
strReturn = Space$(MAX_COUNT)
lngInhalt = ReadXMLLayout(strMenueName, strMenueAttribut, vbNullString, strReturn, MAX_COUNT, strINIPfad)
MenueinhaltEinlesen = Left$(strReturn, lngInhalt)
End Function
Sub M_snb()
'######## Beginn Deklarationen ######
Dim strConfPath As String
Dim strStartZeile As String
Dim strInhalt As String
Dim strEndZeile As String
Dim sn
Dim sp
'######## Ende Deklarationen ######
'######## Konfigurationsdatei ######
strConfPath = ThisDocument.Path & "\" & Left(ThisDocument.Name, InStr(1, ThisDocument.Name, ".") - 1) & ".ini"
sp = Split("Caption MacroName ButtonId imageMSO isSeparator separatorID screentip supertip key tag")
For j = 0 To Ubound(sp)
sn(j) = MenueinhaltEinlesen(strMenuPoint & j, sp(j), strConfigPath)
Next
End Sub
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
Registriert seit: 29.09.2015
Version(en): 2030,5
05.12.2016, 22:02
(Dieser Beitrag wurde zuletzt bearbeitet: 05.12.2016, 22:02 von snb.)
Teste mal:: Code: Sub M_snb() strConfigPath = Split(ThisDocument.FullName, ".")(0) & ".ini" strMenuPoint="snb"
sp = Split("Caption MacroName ButtonId imageMSO isSeparator separatorID screentip supertip key tag") sn = sp For j = 0 To UBound(sp) sn(j) = MenueinhaltEinlesen(strMenuPoint & j, sp(j), strConfigPath) msgbox sn(j) Next End Sub
Function MenueinhaltEinlesen(c01, c02, c03) MsgBox c01 & vbTab & c02 & vbTab & c03 MenueinhaltEinlesen= c01 & vbTab & c02 & vbTab & c03 End Function
NB. es gab kein strMenuPoint und strConfigPath <>strConfPath NB2. In Word braucht man kein API für privateprofilestring: z.B. Code: c00 = "HKEY_CURRENT_USER\Software\Microsoft\Office\Outlook\OMI Account Manager"
msgbox System.PrivateProfileString("", c00, "Default Mail Account") msgbox System.PrivateProfileString("", c00 & "\Accounts\" & System.PrivateProfileString("", c00, "Default Mail Account"), "Account name")
Registriert seit: 11.04.2014
Version(en): Office 365
Wenn ich die Klammereinträge undeklariert lasse funktioniert es. Sobald ich die Deklarationen setze funktioniert es nicht. Das Weglassen der Deklarationen empfinde ich als unsauber. Dann funktioniert ees so (mit Deinem Code) leider nicht. Schade.
|