Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

VBA - auf Namen von Reihen zugreifen
#1
Guten Tag,

ich arbeite viel mit Abfragen aus Datenbanken (Microsoft Query). Wenn ich dazu ein Makro schreibe ist dies alles solange super, bis ich eine weitere Spalte aus der Datenbank ausgeben lassen.
Wenn ich dies mache, muss ich im makro meine ganzen Zahlen (Spalten) anpassen, was sehr nervig ist.

Ich kann Spalten/Bereiche definierte Namen zuordnen. Wie kann ich mit diesen Namen oder generell mit den Überschriften im Makro arbeiten? Leider hab ich bis jetzt noch nichts dazu gefunden.


Gruß
Antwortento top
#2
Moin

Mach mal ein Update auf Excel 2019 oder Office 365.
Dann hast du Möglichkeit mit PQ auf die Datenbanken zuzugreifen. Microsoft Query ist Steinzeit.
Wir sehen uns!
... shift-del
Hinweise zu meiner Hilfe in Foren
Excel Super-Funktionen: VERWEIS(), INDEX(), WAHL()
Antwortento top
#3
Hey,

der betrieb stellt leider keine neueren Versionen zur Auswahl. Deshalb bin ich an Query gebunden.
Antwortento top
#4
Hi,

meinst du so etwas:

Code:
' markiert Spalte 8 innerhalb des Namensbereichs "MeineDaten"
Range("MeineDaten").Columns(8).select

' markiert Zeile 2 innerhalb des Namensbereichs "MeineDaten"
Range("MeineDaten").Rows(2).select

' markiert die Überschrift-Zelle über dem Namensbereich "MeineDaten"
Range("MeineDaten").Cells(0).select

' Alle Zellen innerhalb eines benannten Bereichs (nur bestimmte Spalte)
For Each Zelle In Range("MeineDaten").Columns(8).Cells
V
Herzliche Grüße aus dem Rheinland
Jörg

[Windows 10, Microsoft 365]
[-] Folgende(r) 1 Benutzer sagt Danke an LuckyJoe für diesen Beitrag:
  • BMSOBoo
Antwortento top
#5
Hier ist ein Code als Beispiel

Um in die jeweilige Spalte zu gelangen, während die Zeile hochzählt, geben ich "Tabelle1.Cells(u, 9).Value" ein. Die "9" möchte ich durch einen Spaltennamen ersetzten. Wenn ich dann eine Spalte einfüge, würde der Name bestehen bleiben und ich muss den Code nicht ändern.

Wenn ich die Spalte alle mit dem Befehl "Range" benannt habe, kann ich dann meinen Befehl ändern in "Tabelle1.Cells(u, "MeineDaten").Value" bzw. wie ist der Verweis auf die jeweilige Tabelle?


Code:
For v = ZeileMax2 - 2 To ZeileMax2 + 2
    For u = 3 To ZeileMax1
   
        'RE-Menge
        If Tabelle1.Cells(u, 9).Value = Tabelle2.Cells(v, 1).Value And Tabelle1.Cells(u, 10).Value = Tabelle2.Cells(v, 10).Value Then
            REMenge = REMenge + Tabelle1.Cells(u, 3).Value
            a = a + 1
        End If
        'S100
        If Tabelle1.Cells(u, 9).Value = Tabelle2.Cells(v, 1).Value And Tabelle1.Cells(u, 4).Value > 0 And Tabelle1.Cells(u, 10).Value = Tabelle2.Cells(v, 10).Value Then
            S100 = S100 + Tabelle1.Cells(u, 4).Value
            b = b + 1
        End If
        'S110
        If Tabelle1.Cells(u, 9).Value = Tabelle2.Cells(v, 1).Value And Tabelle1.Cells(u, 5).Value > 0 And Tabelle1.Cells(u, 10).Value = Tabelle2.Cells(v, 10).Value Then
            S110 = S110 + Tabelle1.Cells(u, 5).Value
            c = c + 1
        End If
        'Mg
        If Tabelle1.Cells(u, 9).Value = Tabelle2.Cells(v, 1).Value And Tabelle1.Cells(u, 10).Value = Tabelle2.Cells(v, 10).Value Then
            Mg = Mg + Tabelle1.Cells(u, 7).Value
            d = d + 1
        End If
        'CAD
        If Tabelle1.Cells(u, 9).Value = Tabelle2.Cells(v, 1).Value And Tabelle1.Cells(u, 10).Value = Tabelle2.Cells(v, 10).Value Then
            CAD = CAD + Tabelle1.Cells(u, 6).Value
            e = e + 1
        End If

    Next u
Antwortento top
#6
Hallo,

(15.04.2020, 10:52)BMSOBoo schrieb: Wie kann ich mit diesen Namen oder generell mit den Überschriften im Makro arbeiten?
Sub aaa()
Dim lngSpalte
lngSpalte = Application.Match("Überschrift2DerSpalte", Tabelle1.Rows(1), 0)
If Tabelle1.Cells(u, lngspalte).Value = ...
End Sub
Gruß Uwe
[-] Folgende(r) 1 Benutzer sagt Danke an Kuwer für diesen Beitrag:
  • BMSOBoo
Antwortento top
#7
Hey,

danke, dass sieht schon einmal gut aus. Problem ist dadurch leider noch nicht ganz verschwunden.
Wenn ich jetzt eine neue Spalte einfüge, muss ich dies trotzdem ändern - zwar nur an einem Punkt aber trotzdem noch nicht ideal.

Hätte da noch jemand eine Idee?
Antwortento top
#8
Hi,

Zitat:Wenn ich die Spalte alle mit dem Befehl "Range" benannt habe, kann ich dann meinen Befehl ändern in "Tabelle1.Cells(u, "MeineDaten").Value" bzw. wie ist der Verweis auf die jeweilige Tabelle?

Die Spaltennummer des benannten Bereichs "MeineDaten" erhälst du mit
Code:
Range("MeineDaten").Column
Herzliche Grüße aus dem Rheinland
Jörg

[Windows 10, Microsoft 365]
Antwortento top
#9
Das ich den namen beibehalte ist soweit verständlich aber ich definiere ja, in welche Spalte der Name ist



Zitat:Sub aaa()
  Dim lngSpalte
  lngSpalte = Application.Match("Überschrift2DerSpalte", Tabelle1.Rows(1), 0)
  If Tabelle1.Cells(u, lngspalte).Value = ...
End Sub
Antwortento top
#10
Hi,

also so ganz genau habe ich dnn noch nicht verstanden, was du suchst:
- Den Namen der aktuellen Tabelle findest du mit "ActiveSheet.Name".
- Die Spalte der aktuellen Zelle findest du mit "ActiveCell.Column".

Suchst du nach der Spaltenbezeichnung z.B. nach Copy/Paste einer Spalte, dann hilft vielleicht das Event "Worksheet_Change(ByVal Target As Range)": mit Target.Column wird die neue Spalte ausgegeben (wohin du kopiert hast).
 ... oder bin ich ganz woanders?  Confused
Herzliche Grüße aus dem Rheinland
Jörg

[Windows 10, Microsoft 365]
Antwortento top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste