kompatibilität zu zukünftigen Office-Versionen

  • Excel

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von mumpel.

    kompatibilität zu zukünftigen Office-Versionen

    Naben,
    Für die Uni muss ich in einem bestimmten Fach einen entsprechenden Leistungsnachweis erbringen. Meine Aufgabe ist es, etwas bestimmtes zu implementieren. Die Programmiersprache ist völlig egal. Da ich in VBA einigermaßen fit bin und ich etwas implementieren muss, welches den Rechenweg zum gewünschten Ergebnis mit aufführt (sind ca. 10 -15 5X3-Tabellen), dachte ich mir, dass man dies wunderbar in VBA über ein Excel Sheet machen könnte. Habe heute mit meinem Dozenten gesprochen und er hätte an sich nichts dagegen, dass ich dies über Excel machen, jedoch hat er die Sorge, dass dies in zukünftigen Office Versionen Probleme bereiten könnte. Er meinte, dass er schön öfters mit Power Point Probleme gehabt hätte bzgl. der kompatibilität...Das hatte ich auch schon öfters, jedoch muss ich sagen, dass dies in meinen Augen bei Excel nicht so wirklich zutrifft. Bis vor kurzem habe ich noch mit Office 2003 gearbeitet und all das, was ich dort in Excel gezaubert habe (inkl. VBA hat auch wunderbar in Office 2013/2016 funktioniert. Finde ich hier Zustimmung, oder gibt es hier Leute die damit schon Probleme hatten ? Ich schätze mal es ist schwierig zu sagen, ob das was man HEUTE in Excel/VBA erstellt, in sagen wir mal 3 - 5 Jahren in neueren Version auch noch so reibungslos funktioniert, oder ? falls ja, gibt es irgendeine Möglichkeit die ich tun kann, dass das was ich HEUTE entwickle (in Excel) später noch funktioniert ohne irgendwelche Formatierungsprobleme etc. zu bekommen. Ich stelle mir das irgendwie so vor, dass ich diese Datei entsprechend SO abändere, dass zukünftige Versionen erkennen, dass dies eine Datei ist, die aus einer älteren Excel-Version stammt und dann auch entsprechend die "Werkzeuge" benutzt, die es Damals (Heute) gab. Hoffe ihr versteht, das ich meine :D Da VBA ja auf vb6 basiert, könnte man meinen, dass ich daraus ja eine.vbs Datei erstellen kann...Jedoch ist das Problem, dass ich die Zeilen in Excel verwende....Somit würde das nicht gehen.
    Hallo!

    Kommt darauf an was Du erreichen möchtest. "Einfache Rechenoperationen" z.B. würden auch in Zukunft noch funktionieren. Im Übrigen sind wir inzwischen bei VBA7, nicht mehr bei VBA6, daher ist eine Abwärtskompatibilität nicht immer möglich. Und man kann nicht alles ohne Weiteres nach VBS übertragen. Es weiss auch niemand ob es in 5 Jahren noch VBA gibt, vielleicht wird es ja durch .Net ersetzt.

    Also was genau hast Du vor?

    Gruß, René
    Hallo und Danke für deine Antwort!
    Ich implementiere den Simplex-Algorithmus. Dies besteht aus einfachen Rechenoperation (+ - * /) und aus paar Farb-Formatierungen (Font.Colour, Interior.ColorIndex).

    Ich poste einfach mal den Code. Ist zwar noch nicht fertig, aber da wird nicht mehr viel kommen.

    Visual Basic-Quellcode

    1. Public xAchse As Long
    2. Public yAchse As Long
    3. Public Runde As Long
    4. Public FirstZeile As Long
    5. Public ZeilenIndex As Long
    6. Public ZeilenAnfangTableAlt As Long
    7. Public ZeilenAnfangTableNeu As Long
    8. Public ZeilenIndexAlt As Long
    9. Public MaxSpalte As Long
    10. Public MinQuotientZeile As Long
    11. Public PivotGleichung As Long
    12. Public PivotelementZeile As Long
    13. Public Pivotelement As Double
    14. Private Sub cmclear_Click()
    15. Range("A1:Z10000").Clear
    16. Ursprung
    17. End Sub
    18. Private Sub cmdBerechnen_Click()
    19. Berechne
    20. End Sub
    21. Private Sub cmdStart_Click()
    22. Dim Zähler As Long
    23. Dim SpaltenIndex As Long
    24. Range("D1").Value = "Ausgangstableau"
    25. Range("A3").Value = "GL"
    26. ZeilenIndex = 3
    27. xAchse = InputBox("Anzahl der X-Elemente ?")
    28. yAchse = InputBox("Anzahl der Y-Elemente?")
    29. Range("Z99") = xAchse
    30. Range("Z100") = yAchse
    31. For Zähler = 1 To xAchse
    32. Cells(3, ZeilenIndex) = "x" & Zähler
    33. ZeilenIndex = ZeilenIndex + 1
    34. Next Zähler
    35. For Zähler = 1 To yAchse
    36. Cells(3, ZeilenIndex) = "y" & Zähler
    37. ZeilenIndex = ZeilenIndex + 1
    38. Next Zähler
    39. Cells(3, ZeilenIndex) = "R.S."
    40. SpaltenIndex = 4
    41. For Zähler = 1 To yAchse
    42. Cells(SpaltenIndex, 1) = Zähler
    43. Cells(SpaltenIndex, 2) = "y" & Zähler
    44. SpaltenIndex = SpaltenIndex + 1
    45. Next Zähler
    46. Cells(SpaltenIndex, 2) = "ZF"
    47. End Sub
    48. Sub Berechne()
    49. Dim Schritt As Long
    50. Dim WeitereIteration As Boolean
    51. Dim ZF_Zeile As Long
    52. Dim Zähler As Long
    53. Dim Wert As Double
    54. Runde = Runde + 1
    55. If Runde = 1 Then
    56. ZF_Zeile = 4 + yAchse
    57. Else
    58. ZF_Zeile = ZeilenAnfangTableNeu + yAchse + 1
    59. End If
    60. SpaltenIndex = 3
    61. For Zähler = 1 To xAchse
    62. Wert = CDbl(Cells(ZF_Zeile, SpaltenIndex).Value)
    63. If Wert > 0 Then
    64. WeitereIteration = True
    65. End If
    66. SpaltenIndex = SpaltenIndex + 1
    67. Next Zähler
    68. If WeitereIteration Then
    69. If Runde = 1 Then
    70. ZeilenAnfangTableAlt = 3
    71. ZeilenAnfangTableNeu = ZeilenAnfangTableAlt + yAchse + 8
    72. Else
    73. ZeilenAnfangTableAlt = ZeilenAnfangTableNeu
    74. ZeilenAnfangTableNeu = ZeilenAnfangTableNeu + yAchse + 8
    75. End If
    76. Schritt1
    77. End If
    78. End Sub
    79. Sub CopyTableBefor()
    80. Dim ZählerZeile As Long
    81. Dim ZählerSpalte As Long
    82. ZeilenAnfangTable = ZeileUeberschrift + 2
    83. ZeilenIndex = ZeilenAnfangTableNeu
    84. ZeilenIndexAlt = ZeilenAnfangTableAlt
    85. SpaltenIndex = 1
    86. For ZählerZeile = 1 To yAchse + 2
    87. For ZählerSpalte = 1 To xAchse + yAchse + 3
    88. 'MsgBox ZeilenIndexAlt
    89. Cells(ZeilenIndex, SpaltenIndex) = Cells(ZeilenIndexAlt, SpaltenIndex)
    90. SpaltenIndex = SpaltenIndex + 1
    91. Next ZählerSpalte
    92. SpaltenIndex = 1
    93. ZeilenIndex = ZeilenIndex + 1
    94. ZeilenIndexAlt = ZeilenIndexAlt + 1
    95. Next ZählerZeile
    96. End Sub
    97. Sub Schritt1()
    98. Dim ZeileUeberschrift As Long
    99. Dim Wert As Double
    100. Dim MaxWert As Double
    101. Dim ZF_Zeile As Long
    102. Dim Zähler As Long
    103. ZeileUeberschrift = ZeilenAnfangTableNeu - 2
    104. If Runde = 1 Then
    105. Cells(ZeileUeberschrift - 2, 4).Value = "Runde 1"
    106. Else
    107. Cells(ZeileUeberschrift - 2, 4).Value = "Weiter mit Runde " & Runde & ", da in ZF noch mindestens ein Wert > 0 herrscht"
    108. End If
    109. Cells(ZeileUeberschrift, 4).Value = "1. Pivotspalte"
    110. CopyTableBefor
    111. ZF_Zeile = ZeilenAnfangTableNeu + yAchse + 1
    112. SpaltenIndex = 3
    113. 'Berechne welche Spalte den höchsten Wert in ZF hat
    114. For Zähler = 1 To xAchse
    115. Wert = Cells(ZF_Zeile, SpaltenIndex).Value
    116. If Wert > MaxWert Then
    117. MaxWert = Wert
    118. MaxSpalte = SpaltenIndex
    119. End If
    120. SpaltenIndex = SpaltenIndex + 1
    121. Next Zähler
    122. ZeilenIndex = ZeilenAnfangTableNeu
    123. 'Pivotspalte farblich markieren
    124. For Zähler = 1 To yAchse + 2
    125. Cells(ZeilenIndex, MaxSpalte).Interior.ColorIndex = 50
    126. ZeilenIndex = ZeilenIndex + 1
    127. Next Zähler
    128. Schritt2
    129. End Sub
    130. Sub Schritt2()
    131. Dim Zähler As Long
    132. Dim WertRS As Double
    133. Dim WertVonPivotSpalte As Double
    134. Dim Ergebnis As Double
    135. Dim SpalteRS As Long
    136. Dim MinQuotientWertAlt As Double
    137. Dim MinQuotientwertNeu As Double
    138. Dim ErsterQuotient As Boolean
    139. ErsterQuotient = True
    140. SpalteRS = xAchse + yAchse + 3
    141. ZeilenAnfangTableAlt = ZeilenAnfangTableNeu
    142. ZeilenAnfangTableNeu = ZeilenAnfangTableNeu + yAchse + 6
    143. CopyTableBefor
    144. Cells(ZeilenAnfangTableNeu - 2, 4).Value = "2. Quotienten ermitteln"
    145. ZeilenIndex = ZeilenAnfangTableNeu
    146. 'Pivotspalte färben
    147. For Zähler = 1 To yAchse + 2
    148. Cells(ZeilenIndex, MaxSpalte).Interior.ColorIndex = 50
    149. ZeilenIndex = ZeilenIndex + 1
    150. Next Zähler
    151. Cells(ZeilenAnfangTableNeu, SpalteRS + 1).Value = "Quotient"
    152. ZeilenIndex = ZeilenAnfangTableNeu + 1
    153. 'Quotienten berechnen und kleinsten Wert berechnen
    154. For Zähler = 1 To yAchse
    155. WertRS = CDbl(Cells(ZeilenIndex, SpalteRS))
    156. WertVonPivotSpalte = CDbl(Cells(ZeilenIndex, MaxSpalte))
    157. If WertVonPivotSpalte <> 0 Then
    158. Ergebnis = WertRS / WertVonPivotSpalte
    159. If ErsterQuotient Then
    160. MinQuotientWert = Ergebnis
    161. MinQuotientZeile = ZeilenIndex
    162. ErsterQuotient = False
    163. End If
    164. If Ergebnis < MinQuotientWert Then
    165. MinQuotientWert = Ergebnis
    166. MinQuotientZeile = ZeilenIndex
    167. End If
    168. Cells(ZeilenIndex, SpalteRS + 1).Value = WertRS & "/" & WertVonPivotSpalte & "=" & Ergebnis
    169. End If
    170. ZeilenIndex = ZeilenIndex + 1
    171. Next Zähler
    172. PivotGleichung = MinQuotientZeile - ZeilenAnfangTableNeu
    173. 'End If
    174. 'Welche Gleichungsnummer ist die Pivotzeile !?
    175. Cells(MinQuotientZeile, SpalteRS + 1).Interior.ColorIndex = 50
    176. Cells(MinQuotientZeile, SpalteRS + 2).Value = "<- Kleinster Quotient!"
    177. Schritt3
    178. End Sub
    179. Sub Schritt3()
    180. Dim Zähler As Long
    181. SpaltenIndex = 2
    182. ZeilenAnfangTableAlt = ZeilenAnfangTableNeu
    183. ZeilenAnfangTableNeu = ZeilenAnfangTableNeu + yAchse + 6
    184. Cells(ZeilenAnfangTableNeu - 2, 4).Value = "3. PivotZeile, Schnittpunkt = Pivotelement"
    185. CopyTableBefor
    186. 'Pivotzeile markieren
    187. For Zähler = 1 To xAchse + yAchse + 2
    188. Cells(ZeilenAnfangTableNeu + PivotGleichung, SpaltenIndex).Interior.ColorIndex = 50
    189. SpaltenIndex = SpaltenIndex + 1
    190. Next Zähler
    191. ZeilenIndex = ZeilenAnfangTableNeu
    192. 'PivotSpalte markieren
    193. For Zähler = 1 To yAchse + 2
    194. Cells(ZeilenIndex, MaxSpalte).Interior.ColorIndex = 50
    195. ZeilenIndex = ZeilenIndex + 1
    196. Next Zähler
    197. Pivotelement = CDbl(Cells(ZeilenAnfangTableNeu + PivotGleichung, MaxSpalte).Value)
    198. Cells(ZeilenAnfangTableNeu + PivotGleichung, MaxSpalte).Interior.ColorIndex = 3
    199. Schritt4
    200. End Sub
    201. Sub Schritt4()
    202. Dim Zähler As Long
    203. Dim AktuellerWert As Double
    204. Dim NeuerWert As Double
    205. ZeilenAnfangTableAlt = ZeilenAnfangTableNeu
    206. ZeilenAnfangTableNeu = ZeilenAnfangTableNeu + yAchse + 6
    207. Cells(ZeilenAnfangTableNeu - 2, 4).Value = "4. PivotZeile durch Pivotelement teilen"
    208. CopyTableBefor
    209. ZeilenIndex = ZeilenAnfangTableNeu + PivotGleichung
    210. SpaltenIndex = 3
    211. Cells(ZeilenAnfangTableNeu, xAchse + yAchse + 4).Value = "Rechenschritt"
    212. Cells(ZeilenAnfangTableNeu + PivotGleichung, xAchse + yAchse + 4).Value = "/" & Pivotelement
    213. Cells(ZeilenIndex, MaxSpalte).Font.Color = vbRed
    214. 'Piivotzeile durch Pivotelement teilen
    215. For Zähler = 1 To xAchse + yAchse + 1
    216. AktuellerWert = CDbl(Cells(ZeilenIndex, SpaltenIndex))
    217. NeuerWert = AktuellerWert / Pivotelement
    218. Cells(ZeilenIndex, SpaltenIndex) = NeuerWert
    219. SpaltenIndex = SpaltenIndex + 1
    220. Next
    221. Schritt5
    222. End Sub
    223. Sub Schritt5()
    224. Dim xChange As String
    225. Dim yChange As String
    226. Dim AktuellerWert As Double
    227. Dim WertInPivotZeile As Double
    228. Dim NeuerWert As Double
    229. Dim Teiler As Double
    230. Dim ZählerSpalte As Long
    231. Dim ZählerZeile As Long
    232. ZeilenAnfangTableAlt = ZeilenAnfangTableNeu
    233. ZeilenAnfangTableNeu = ZeilenAnfangTableNeu + yAchse + 6
    234. Cells(ZeilenAnfangTableNeu - 2, 4).Value = "5. Rechenschritte"
    235. CopyTableBefor
    236. Cells(ZeilenAnfangTableNeu, xAchse + yAchse + 4).Value = "Rechenschritte"
    237. xChange = Cells(ZeilenAnfangTableNeu + PivotGleichung, 2)
    238. yChange = Cells(ZeilenAnfangTableNeu, MaxSpalte)
    239. With Cells(ZeilenAnfangTableNeu + PivotGleichung, 2)
    240. .Value = yChange
    241. .Font.Color = vbBlue
    242. End With
    243. With Cells(ZeilenAnfangTableNeu, MaxSpalte)
    244. .Value = xChange
    245. .Font.Color = vbBlue
    246. End With
    247. ZeilenIndex = ZeilenAnfangTableNeu + 1
    248. SpaltenIndex = 3
    249. Cells(ZeilenAnfangTableNeu + PivotGleichung, MaxSpalte).Font.Color = vbRed
    250. For ZählerZeile = 1 To yAchse + 1
    251. Teiler = CDbl(Cells(ZeilenIndex, MaxSpalte).Value)
    252. If (ZeilenIndex - ZeilenAnfangTableNeu) <> PivotGleichung Then
    253. Cells(ZeilenIndex, xAchse + yAchse + 4).Value = "-" & Teiler & "*GL" & PivotGleichung
    254. End If
    255. SpaltenIndex = 3
    256. For ZählerSpalte = 1 To xAchse + yAchse + 1
    257. If (ZeilenIndex - ZeilenAnfangTableNeu) <> PivotGleichung Then
    258. AktuellerWert = CDbl(Cells(ZeilenIndex, SpaltenIndex).Value)
    259. WertInPivotZeile = CDbl(Cells(ZeilenAnfangTableNeu + PivotGleichung, SpaltenIndex).Value)
    260. NeuerWert = AktuellerWert - (Teiler * WertInPivotZeile)
    261. ' MsgBox "akt " & AktuellerWert & " wertinpiv " & WertInPivotZeile
    262. Cells(ZeilenIndex, SpaltenIndex) = NeuerWert
    263. End If
    264. SpaltenIndex = SpaltenIndex + 1
    265. Next ZählerSpalte
    266. ZeilenIndex = ZeilenIndex + 1
    267. Next ZählerZeile
    268. Berechne
    269. End Sub
    270. Sub Ursprung()
    271. xAchse = 0
    272. yAchse = 0
    273. Runde = False
    274. FirstZeile = 0
    275. ZeilenIndex = 0
    276. ZeilenAnfangTableAlt = 0
    277. ZeilenAnfangTableNeu = 0
    278. ZeilenIndexAlt = 0
    279. MaxSpalte = 0
    280. MinQuotientZeile = 0
    281. PivotGleichung = 0
    282. PivotelementZeile = 0
    283. Pivotelement = 0
    284. End Sub