Verweise auf Zellen nur nach Spaltennamen in Excel 2010 VBA

20849
chabzjo

In Excel 2010 muss ich eine Datentabelle zeilenweise durchgehen und die Daten in VBA bearbeiten.

Meine ursprüngliche Funktion liest sich so:

Private Function GetValue(ByVal myRange As Excel.Range, ByVal strCol As String) As String Dim myCell As Object Set myCell = myRange.Cells(, strCol)  GetValue = myCell.Value  End Function 

Ich nenne es so:

GetValue(myRow, "AE") 

myRowist ein Excel.Range, der eine Zeile darstellt.
"AE"ist der Spaltenindex.

Ich möchte konvertieren, um Spaltennamen anstelle von Spaltenindizes zu verwenden, da Benutzer in Zukunft möglicherweise Spalten hinzufügen oder entfernen möchten. Ich habe einen Zellbereich als Tabelle in Excel identifiziert, die Tabelle benannt und eindeutige Spaltennamen ausgewählt.

Das heißt, ich würde jetzt die Funktion aufrufen mit:

GetValue(myRow, "column_name") 

Ich kann jedoch keine Beispiele finden, bei denen ich nur den Spaltennamen angeben kann, ohne auch die Zeile anzugeben.

Ist das überhaupt machbar?

2
Wenn Sie die Zeile nicht angeben möchten, woher weiß Excel / VBA, welche Zeile Sie bearbeiten möchten? misha256 vor 9 Jahren 0
Weil ich die Zeile als Parameter an die Funktion übergeben. chabzjo vor 9 Jahren 0

2 Antworten auf die Frage

3
chabzjo

Der Code aus einer anderen Antwort wurde für mich nicht kompiliert, aber ich konnte weiter recherchieren.

Inspiriert von Wie kann ich eine Excel 2010-Tabelle unter Verwendung des Namens und der Spaltenreferenz als Schleife verwenden? und Wie kann ich eine Tabelle durchlaufen und auf Zeilenelemente über ihren Spaltenkopf zugreifen? Endete ich mit:

Private Function GetValue(ByVal myRange As Excel.Range, ByVal strCol As String) As String GetValue = myRange.Columns(myRange.ListObject.ListColumns(strCol).Range.Column).Value End Function 
1
Gary's Student

Erwägen:

Public Function GetValue2(ByVal myRow As Long, ByVal strColumnName As String) As String Dim myCell As Object  Set myCell = Cells(myRow, Range(strColumnName).Column) GetValue2 = myCell.Value End Function 

In diesem Beispiel habe ich "Spalte B " "Qwerty" genannt.

enter image description here

Bitte beachten Sie, dass bei dieser Funktion potenzielle Volatilitätsprobleme auftreten können.

Können Sie erklären, was Sie unter Volatilitätsproblemen verstehen? chabzjo vor 9 Jahren 0
Ich meine, wenn Sie den Inhalt der Spalte ** B ändern, ** ist die Funktion nicht intelligent genug, um zu wissen, dass es notwendig ist, sich neu zu berechnen. Gary's Student vor 9 Jahren 0
Die Funktion zu wissen, dass eine Neuberechnung erforderlich ist, gehört nicht zu meinen Anforderungen. Aber danke fürs Nachdenken. :) chabzjo vor 9 Jahren 0