Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1800to1804
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
VBA Globale Variablen definieren
18.12.2020 08:59:10
Erwin
Guten Morgen,
über eine Auswertung erhalte ich eine Region, ein Aktenzeichen und einen Gemeindeschlüssel.
Ich möchte eine Teamzuordnung der Fälle aufgrund verschiedener Kriterien machen.
Da diese Daten nicht immer in der gleichen Spalte stehen wird der erste Wert immer über eine Inputbox und Variable gelöst.
Im ersten Schritt, den ich bereits habe, bereite ich die Daten nochmals auf; im zweiten Schritt müsste ich das zuständige Team ermitteln.
Allerdings habe ich die Variablen, die ich wieder verwenden möchte "verloren". Natürlich habe ich gelesen und probiert, aber trotz Option Explcit und Public… habe ich es nicht hinbekommen.
Beispieldatei: https://www.herber.de/bbs/user/142412.xlsm
Wichtigste Fragen:
Wie übernehme ich die schon deklarierten Variablen in die nachfolgenden Module?
Muss ich diese später gesondert wieder löschen oder entleeren?
Nice to have:
Wie ändere ich im 1. Modul "Range(Selection, Selection.End(xlDown)).Select" in die Schreibweise von unten nach oben "...(end(xlup).row"?
Wie bekomme ich die 3 select raus, die man ja nicht machen soll?
Danke schon mal im Voraus ihr fleißigen Helfer

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Globale Variablen definieren
18.12.2020 09:05:20
Hajo_Zi
Variablen nicht im Makro, sondern Option Explicit. Falls Mappen weit nicht Dim sondern Public.

AW: VBA Globale Variablen definieren
18.12.2020 09:15:22
Erwin
Hallo Hajo,
danke für die Antwort, die bringt aber nichts.
Wenn du den Text richtig gelesen hättest, hättest du gesehen, dass ich das schon probiert habe, aber mit meinen bescheidenen Kenntnissen es nicht geschafft habe.
Ich bräuchte, wenn es geht, schon ein paar Ansätze, am besten natürlich im Code.
Grüße - Erwin
AW: VBA Globale Variablen definieren
18.12.2020 09:28:43
Hajo:Zi
Hallo Erewin,
ich habe mich mit meiner Antwort auf den Download bezogen.
Zu deiner geänderten Datei kann ich nichts schreiben, da ich nicht auf fremde Rechner schaue. Aus diesem Grunde bin ich dann auch raus.
Viel Erfolg noch.
Gruß Hajo
Anzeige
AW: VBA Globale Variablen definieren
18.12.2020 09:32:27
Rudi
Hallo,
Public Variablen werden außerhalb einer Prozedur deklariert, innerhalb dann nicht mehr!
Schema:
Option Explicit
Public Var1
Sub Makro1()
Var1 = "Test"
Call Makro2
End Sub
Sub Makro2()
MsgBox Var1
End Sub

Gruß
Rudi
AW: VBA Globale Variablen definieren
18.12.2020 09:53:14
Erwin
Hallo Rudi,
danke für die Hilfe und den Ansatz.
Geht das nur dann, wenn ich vor dem Ende des 1. Makros mit call… ein weiteres … und dann noch ein Makro ... aufrufe?
Oder kann ich das 1. Makro auch beenden und die Variable trotzdem behalten?
Hintergrund: Bei dieser Aufgabe brauche ich immer alle Makros; bei einem anderen Projekt reicht mir das 1. Makro und dann ENDE (das würde ja hier nicht gehen, wenn ein weiteres Marko aufgerufen wird).
Kann man das evtl. über eine msgBox lösen?
Anzeige
AW: VBA Globale Variablen definieren
18.12.2020 10:48:06
Rudi
Hallo,
die Variablen bleiben erhalten bis du die Mappe schließt (oder ein Fehler auftritt).
Gruß
Rudi
AW: VBA Globale Variablen definieren
18.12.2020 11:03:51
Erwin
Hallo Rudi,
bedeutet Mappe schließen gleich Sub beenden (ohne ...call…) vorher?
Ich habe den Code mal angepasst:
Option Explicit
Public pub_reg_beg   'public_region_beginn
Sub Region()
'Das Wort "Region " soll (i.d.R.) aus Spalte A entfernt werden
'1. Variabler Beginn durch Inputbox
Dim intSp%, lngLRow&, intUeb&
'    Dim rngSel As Range
Dim strSel As String
On Error Resume Next
Set pub_reg_beg = Application.InputBox("Bitte erste Zelle mit 'Region' in der Liste auswä _
hlen", "Auswahl Region", Type:=8)
If pub_reg_beg Is Nothing Then Exit Sub
On Error GoTo 0
strSel = pub_reg_beg.Address
intUeb = Range(strSel).Row - 1                      'Sprung in die Zeile darüber
intSp = Range(strSel).Column                        'Spalte mit dem Bereich
lngLRow = Cells(Rows.Count, intSp).End(xlUp).Row    'letzte Zelle in Spalte ermitteln
'2. Ab hier wird das Wort "Region " durch nichts ersetzt (= gelöscht)
Range(strSel).Select
Range(Selection, Selection.End(xlDown)).Select  '
Wie könnte man am Ende noch eine Auswahl anfügen:
z. B.
...Ende des Codes oder weiter mit nächstem Makro (damit man die Variable behalten kann?)?
Grüße - Erwin
Anzeige
AW: VBA Globale Variablen definieren
18.12.2020 15:12:45
Yal
Hallo Erwin,
ich verstehe nicht zu recht: Du ermittelst "Zellen", setzst Variablen, aber diese werden nirgendwo verwendet.
Auf Grund deiner Datei habe ich die Aufgaben unter Makro Recorder gemacht.
Das einzige relevant, aber sag mir falls ich was übersehen habe, ist auf welchem Blatt man sich gerade befindet und dafür gibt es den Excel-Eigenschaft ActiveSheet (wobei diese per Default angenommen wird)
Ich habe den Code gekürzt. Es sieht jetzt so aus:
Sub Makro3()
'"Region " (inkl. Leerzeichen) löschen (druch nichts ersetzen)
Columns("A:A").Select
Selection.Replace What:="Region ", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
'azneu Komma in Punkt ersetzen
Columns("B:B").Select
Selection.Replace What:=",", Replacement:=".", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
'Gebietsnummer 8 Stellig
For Each Z In Range(Range("C6"), Range("C6").End(xlDown)).Cells
Z.Value = Right("'0" & Z.Value, 8)
Next
'3 letzte Stellen
For Each Z In Range(Range("B6"), Range("BC6").End(xlDown)).Cells
Z.Offset(0, 2) = Right(Z.Value, 3)
Next
'Überschirft setzen
Range("D5") = "azneu Endziffern"
End Sub
Ich gehe davon aus, Region ist immer in Spalte A, azneu in B, Gebietsnumemr in C, Überschrift ist immer in Zeile 5.
VG Yal
Anzeige
AW: VBA Globale Variablen definieren
18.12.2020 21:30:57
Erwin
Hallo Yal,
danke für deine Mühe und den Code.
Leider ist es nicht so, dass immer die Spalten A-C belegt sind, das könnte in einer anderen Auswertung auch die Spalten A, D und G sein, sonst wäre es ja einfach; außerdem steht manchmal nicht in der 5 Zeile, es könnte auch mal in der 8. Zeile stehen.
Deshalb habe ich den Beginn auch über die Inputbox gelöst.
Mir ist auch klar, dass wenn ich keine 3 SUB's habe, die Variablen im ganzen Sub zur Verfügung habe, aber das war ja auch nicht das Problem.
Mein Ziel war es,
- variabel zu sein, was die Spalten und Zeilenbeginn betrifft (darum Inputbox)
- ich wollte 3 Sub's haben, um diese auch unabhängig von dieser Prozedur zu haben
- die erzeugten Variablen sollten mit public später in diesem Modul noch zur Verfügung stehen
Vielleicht etwas viel, aber in meiner Ursprungsdatei habe ich ja schon alles so hergerichtet, dass man darauf aufbauen kann.
Leider wurden auch meine konkreten Fragen nicht beantwortet.
Vielleicht hat ja noch jemand Lust, ist stell deswegen wieder auf offen.
Danke und Grüße - Erwin
Anzeige
AW: VBA Globale Variablen definieren
18.12.2020 22:14:06
Yal
Hallo Erwin,
was Du eigentlich möchtest, ist zu identifizieren, wo diese Spalte "Region" in der Tabelle liegt, richtig?
Eine Variable in einem VBA-Code ist dafür nicht optimal, weil sie nicht mit der Element selbst verbunden ist.
Du könntest Zellen der Überschrift einen Namen vergeben. Noch besser ist diese Bereich als Tabelle zu definieren: eine Zelle aus der Liste markieren, Strg+t drucken.
Dann hast Du ein Element, den man per VBA anfassen kann. Wenn nur eine solche Tabelle pro Blatt gibt, dann kann man sie eindeutig "anfassen".
Probiere es: in den 2 Blätter, die Du uns gesendet hast, Strg+t auf jede einzelne, dann folgende Code laufen lassen (Ausgabe in Direkt-Fenster, Strg+g in VB-Editor)
Sub ListObject_auflisten()
Dim W As Worksheet
Dim L As ListObject
For Each W In ThisWorkbook.Worksheets
For Each L In W.ListObjects
Debug.Print String(10, "-")
Debug.Print W.Name
Debug.Print L.Name, L.Range.Address
Debug.Print L.HeaderRowRange(1).Address, L.HeaderRowRange(1).Value
Debug.Print L.HeaderRowRange(2).Address, L.HeaderRowRange(2).Value
Debug.Print L.HeaderRowRange(3).Address, L.HeaderRowRange(3).Value
Next
Next
End Sub
bei mir kam das raus
----------
Teamaufteilung
Tabelle1      $A$4:$C$16
$A$4          region
$B$4          azneu
$C$4          Gemeindeschlüssel
Auswertung
Tabelle2      $A$5:$C$88
$A$5          region
$B$5          azneu
$C$5          Gemeindeschlüssel
Anhaltspunkte, wie man diese "ListObject" in VBA anspricht, findest Du hier:
https://www.thespreadsheetguru.com/blog/2014/6/20/the-vba-guide-to-listobject-excel-tables
Viel Erfolg
Yal
Anzeige

326 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige