Referenciando a célula somente pelo nome da coluna no Excel 2010 VBA

1

No Excel 2010, preciso passar por uma tabela de dados linha por linha e manipular os dados no VBA.

Minha função original é assim:

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

Eu chamo assim:

GetValue(myRow, "AE")  

myRow é um Excel.Range representando uma linha.
"AE" é o índice da coluna.

Eu quero converter para usar nomes de coluna em vez de índices de coluna, pois os usuários podem optar por adicionar ou remover colunas no futuro. Identifiquei um intervalo de células como uma tabela no Excel, nomeei a tabela e escolhi nomes de coluna exclusivos.

Isso significa que eu chamaria a função usando:

GetValue(myRow, "column_name")

mas não consigo encontrar exemplos onde posso especificar apenas o nome da coluna sem especificar a linha.

Isso é mesmo viável?

    
por chabzjo 09.02.2015 / 23:33

2 respostas

2

O código da outra resposta não compilou para mim, mas permitiu que eu fizesse mais pesquisas.

Inspirado por Como eu faço o loop de uma tabela do Excel 2010 usando o nome dele & referência de coluna? e Como fazer o loop de uma tabela e acessar itens de linha pelo cabeçalho da coluna? , acabei usando:

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
    
por 10.02.2015 / 20:47
1

Considere:

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

Neste exemplo, eu "nomeio" a coluna B "qwerty"

Por favor, note que haverá problemas potenciais de volatilidade com esta função.

    
por 10.02.2015 / 01:42