Registriert seit: 23.07.2019
Version(en): 2010
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ß
Registriert seit: 12.04.2014
Version(en): Office 365
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!
... Detlef
Meine Beiträge können Ironie oder Sarkasmus enthalten.
Registriert seit: 23.07.2019
Version(en): 2010
Hey,
der betrieb stellt leider keine neueren Versionen zur Auswahl. Deshalb bin ich an Query gebunden.
Registriert seit: 26.07.2017
Version(en): 365
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 Nutzer sagt Danke an LuckyJoe für diesen Beitrag:1 Nutzer sagt Danke an LuckyJoe für diesen Beitrag 28
• BMSOBoo
Registriert seit: 23.07.2019
Version(en): 2010
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
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
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 Nutzer sagt Danke an Kuwer für diesen Beitrag:1 Nutzer sagt Danke an Kuwer für diesen Beitrag 28
• BMSOBoo
Registriert seit: 23.07.2019
Version(en): 2010
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?
Registriert seit: 26.07.2017
Version(en): 365
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]
Registriert seit: 23.07.2019
Version(en): 2010
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
Registriert seit: 26.07.2017
Version(en): 365
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?
Herzliche Grüße aus dem Rheinland
Jörg
[Windows 10, Microsoft 365]
|