Registriert seit: 06.12.2024
Version(en): LTSC / Excel 2013
22.07.2025, 10:41
(Dieser Beitrag wurde zuletzt bearbeitet: 22.07.2025, 10:41 von ExcelEnte.)
Ich wollte eine Konstante über mehrere Zeilen erstellen, Excel scheint aber die Verkettung von Strings bei CONST abzulehnen. Kann ich eine lange Konstantenstringliste irgendwie aufteilen bei der Konstanten Deklaration? Bsp: Code: const Stadtliste1 = " (Stadt like 'Köln%' " & _ " OR Stadt like 'Bochum%'" & _ " OR Stadt like 'Düssel%') "
Die Liste ist natürlich viel länger als drei Städte. In einer Zeile geschrieben ist es ok.
Registriert seit: 22.09.2024
Version(en): 2010, 2021
22.07.2025, 10:52
(Dieser Beitrag wurde zuletzt bearbeitet: 22.07.2025, 10:52 von knobbi38.)
Dein Code-Beispiel funktioniert doch. Wo ist das Problem?
Registriert seit: 25.11.2021
Version(en): 2019, 365
22.07.2025, 11:25
(Dieser Beitrag wurde zuletzt bearbeitet: 22.07.2025, 11:27 von Ralf A.)
(22.07.2025, 10:41)ExcelEnte schrieb: Code: const Stadtliste1 = " (Stadt like 'Köln%' " & _ " OR Stadt like 'Bochum%'" & _ " OR Stadt like 'Düssel%') "
Die Liste ist natürlich viel länger als drei Städte. In einer Zeile geschrieben ist es ok. Das sieht mir eher nach dem Versuch aus, das als "Variable" in einem SQL-String verwenden zu wollen. Da werfen die Unterstriche als Bestandteil des Strings natürlich einen Fehler. Du musst unterscheiden zwischen der Deklaration, die in mehrere Zeilen aufgeteilt, und der Anweisung, die im SQL-Sring ausgegeben werden soll. Da muss die Deklaration so aussehen: PHP-Code: Const Stadtliste1 = " (Stadt like 'Köln%' " _ & " OR Stadt like 'Bochum%'" _ & " OR Stadt like 'Düssel%') "
...also die Unterstriche dürfen NICHT Teil des Strings sein.
Der sicherste Ansatz für einen Irrtum ist der Glaube, alles im Griff zu haben. Nur, weil ich den Recorder bedienen kann, macht mich das noch lange nicht zum Musiker.
Ciao, Ralf
Registriert seit: 02.12.2017
Version(en): Microsoft365
22.07.2025, 11:46
(Dieser Beitrag wurde zuletzt bearbeitet: 22.07.2025, 11:46 von EA1950.)
Hallo, Zitat:const Stadtliste1 = " (Stadt like 'Köln%' " & _
" OR Stadt like 'Bochum%'" & _ " OR Stadt like 'Düssel%') " du kannst in einer VBA-Konstanten deklaration keine Operatoren verwenden, denn der Code, der dafür notwendig wäre, existiert zur Laufzeit des Programms nicht. Konstanten werden nämlich vom Compiler bereits zur Kompilierzeit des Codes vollständig erstellt und nicht erst zur Laufzeit des Programmes mittels irgendwelcher Operatoren. Warum gibst du das Ganze nicht in eine String-Variable, indem du dieser Variable (--> zur Laufzeit) den gewünschten String zuweist? Code: Dim Stadtliste1 As String '.... Stadtliste1 = " (Stadt like 'Köln%' " & _ " OR Stadt like 'Bochum%'" & _ " OR Stadt like 'Düssel%') "
Gruß Anton.
Windows 10 64bit Office365 32bit
Folgende(r) 1 Nutzer sagt Danke an EA1950 für diesen Beitrag:1 Nutzer sagt Danke an EA1950 für diesen Beitrag 28
• ExcelEnte
Registriert seit: 18.01.2021
Version(en): 365
(22.07.2025, 11:38)EA1950 schrieb: Hallo, du kannst in einer VBA-Konstantendeklaration keine Operatoren verwenden, denn der Code, der dafür notwendig wäre, existiert zur Laufzeit des Programms nicht. Konstanten werden nämlich vom Compiler bereits zur Kompilierzeit des Codes vollständig erstellt und nicht erst zur Laufzeit des Programmes mittels irgendwelcher Operatoren.
Warum gibst du das Ganze nicht in eine String-Variable und weist dieser Variable (--> zur Laufzeit) den gewünschten String zu?
Code: Dim Stadtliste1 As String '.... Stadtliste1 = " (Stadt like 'Köln%' " & _ " OR Stadt like 'Bochum%'" & _ " OR Stadt like 'Düssel%') "
Deine KI halluziniert, genauso wie meine, die meint Zitat:1. Const-Deklarationen dürfen keine zusammengesetzten Ausdrücke enthalten In VBA dürfen Const-Werte nur einfache, zur Kompilierzeit bekannte Werte enthalten – also keine Zeichenkettenverkettung (&), keine Funktionsaufrufe, keine Berechnungen.
2. Zeilenumbruch mit _ ist bei Const nicht erlaubt Auch der Zeilenumbruch mit Unterstrich (_) ist bei Const-Deklarationen nicht erlaubt, wenn er innerhalb eines Ausdrucks verwendet wird.
Folgende(r) 1 Nutzer sagt Danke an DeltaX für diesen Beitrag:1 Nutzer sagt Danke an DeltaX für diesen Beitrag 28
• ExcelEnte
Registriert seit: 15.04.2018
Version(en): 2013
22.07.2025, 12:00
(Dieser Beitrag wurde zuletzt bearbeitet: 22.07.2025, 12:10 von slowboarder.)
Hi Meinen Tests nach darf eine Programmzeile aus maximal 25 Editor-Zeilen bestehen ab der 26. Zeile kommt dann die Fehlermeldung "Zu viele Zeilenfortsetzungen" dh du darfst maximal 24x mit "_" umbrechen. Lösungen fallen mir jetzt folgende ein: a) alles in eine Zeile oder zumindest mehrere Städte in eine Zeile, so dass du unter 26 Zeilen für die Konstante bleibst. b) Variable statt Konstante. Variablen kannst du mit : x = x & "abc" in einer eigenen Programmzeile schrittweise erweitert, so dass du beliebig viele Textteile hinzufügen kannst (ggf auch per Schleife aus einer Tabelle als Vorgabeliste) c) wenn die Konstante in mehreren Makros verwendet werden soll, kann man auch eine Funktion erstellen: Code: Public Function Stadtliste1() As String Stadtliste1 = " (Stadt like 'Köln%' " Stadtliste1 = Stadtliste1 & " OR Stadt like 'Bochum%'" Stadtliste1 = Stadtliste1 & " OR Stadt like 'Düssel%'" End Function
diese Funktion kannst du dann wie eine Konstante in anderen Makros verwenden. Gruß Daniel
(22.07.2025, 11:46)EA1950 schrieb: Hallo, du kannst in einer VBA-Konstantendeklaration keine Operatoren verwenden, doch das geht. Einfache Operatoren wie & für Texte oder +-*/ sind in der Konstantendeklaration zulässig. sowas funktioniert: Code: Option Explicit Const x As Long = (1 + 2 + 3) * 25
Sub test() Debug.Print x End Sub
die verwendeten Werte müssen Konstant sein, dh man kann hier keine Variablen verwenden, aber man darf rechnen und vorhandene Konstanten verwenden. sogar das funktioniert: Code: Option Explicit Const y As Long = 3 Const x As Long = (1 + 2 + y) * 25
Sub test() Debug.Print x End Sub
Gruß Daniel
Registriert seit: 18.01.2021
Version(en): 365
22.07.2025, 12:15
(Dieser Beitrag wurde zuletzt bearbeitet: 22.07.2025, 12:18 von DeltaX.)
Für Konstanten ist folgendes möglich Code: Enum recht X = 42 Y = 43 Z = 44 End Enum Const rechtx = recht.X Const green = vbGreen
Sub testC() Debug.Print rechtx, green End Sub
[MS-VBAL]: Constant Expressions | Microsoft Learn Abgesehen davon, wenn es darum geht eine WHERE Klausel aus Städtenamen aufzubauen, würde ich folgende Funktion verwenden Code: Function BuildWhereClause(cityList As Variant) As String Dim whereClause As String Dim i As Integer If UBound(cityList) < 0 Then BuildWhereClause = "" Exit Function End If
whereClause = "(" For i = LBound(cityList) To UBound(cityList) whereClause = whereClause & "Stadt LIKE '" & cityList(i) & "%'" If i < UBound(cityList) Then whereClause = whereClause & " OR " End If Next i whereClause = whereClause & ")"
BuildWhereClause = whereClause End Function
Sub testBeispiel() Dim liste As Variant liste = Array("Köln", "Düsseldorf", "Bochum") ' In Praxis aus einer Tabelle lesen Debug.Print BuildWhereClause(liste) End Sub
Folgende(r) 1 Nutzer sagt Danke an DeltaX für diesen Beitrag:1 Nutzer sagt Danke an DeltaX für diesen Beitrag 28
• ExcelEnte
Registriert seit: 22.09.2024
Version(en): 2010, 2021
22.07.2025, 15:05
(Dieser Beitrag wurde zuletzt bearbeitet: 22.07.2025, 15:05 von knobbi38.)
@Ralf:
Die Unterstriche sind ja auch nicht Teil des zusammengesetzten Strings, egal ob der & - Operator nachgestellt oder in der nächsten Zeile steht. Wichtig ist, daß der Unterstrich immer als Letztes in der Zeile die Fortführung ankündigt, sonst steigt der Parser aus.
Der gezeigte Code ist somit eine gültige Konstantendefinition, auch wenn Anton das anders sieht.
Daniel hat das alles eigentlich sehr verständlich erklärt. 👌
Knobbi38
Registriert seit: 06.12.2024
Version(en): LTSC / Excel 2013
23.07.2025, 07:49
(Dieser Beitrag wurde zuletzt bearbeitet: 23.07.2025, 07:50 von ExcelEnte.)
Das sehe ich jetzt nur den Unterschied dass du erst den Zeilenumbruch machst und dann die Verkettung, und ich mache es andersherum.
Ich schreibe es einfach als globale Variable, das ist die praktikabelste Lösung. Danke für euren Input!
Registriert seit: 25.11.2021
Version(en): 2019, 365
(22.07.2025, 15:05)knobbi38 schrieb: @Ralf:
Die Unterstriche sind ja auch nicht Teil des zusammengesetzten Strings, egal ob der & - Operator nachgestellt oder in der nächsten Zeile steht. Wichtig ist, daß der Unterstrich immer als Letztes in der Zeile die Fortführung ankündigt, sonst steigt der Parser aus. ...stimt. Das kommt davon, wenn man Fett auf der Brille hat...
Der sicherste Ansatz für einen Irrtum ist der Glaube, alles im Griff zu haben. Nur, weil ich den Recorder bedienen kann, macht mich das noch lange nicht zum Musiker.
Ciao, Ralf
|