Gostaria de percorrer as linhas de uma planilha e atribuir as caixas de nome de uma coluna (a coluna E) ao valor dessa linha em outra coluna (a coluna B).
Eu gostaria de fazer isso dessa maneira porque o princípio permanecerá o mesmo para um adendo que será feito nesse script para manutenção a longo prazo. Por exemplo, se eu fizesse isso manualmente, ativaria a célula "E2", clique na caixa de nome e digite "Coil_Width", que é o valor da célula "B2". Isso adiciona corretamente o nome ao gerenciador de nomes e posso alterar dinamicamente o valor digitando algo na barra de fórmulas dessa célula. Eu tentei atribuir através da propriedade eCell.Name = (etc), mas parece que não funciona da mesma forma para células e para a propriedade range porque recebo um erro definido pelo aplicativo (1003).
Além disso, usando o padrão
ActiveWorkbook.Names.Add Name:=bCell.Value, RefersTo:= eCell.Address()
apenas adiciona o nome ao gerenciador de nomes e define o RefersTo como "$ E $ 2" ou qualquer outra célula (o que está correto, eu acho), mas o valor também é definido como "E2" (e não pode ser alterado mesmo quando você digita manualmente um na barra de fórmulas dessa célula.Além disso, a caixa de nome para essa célula ainda é exibida como "E2".
Aqui está um exemplo de código:
For Each bCell In thisWkSht.Range("B:B").Cells
'For Each bCell In thisWkSht.Range("B:B:) - this is the changed line
If bCell.Value = "" Then
'Do Nothing
ElseIf bCell.Value = "Variables" Then
'Do Nothing
'This allows me to skip the first row without much hassle
Else
Set eCell = bCell.Offset(0, 3).Cells
'Set eCell = bCell.Offset(0, 3) - this is the other changed line
eCell.Name = bCell.Value ' This line now correctly assigns the value from my
' B row and column to the name of my E row cell
End If
Next
Meus resultados mostram que eu posso acessar corretamente a propriedade bcell.Value, mas ela é interrompida durante o bCell.Name.Name. Parece-me que eu deveria ser capaz de fazer algo como eCell.Name = bCell.Value ou algo semelhante, mas ainda não recebi nada além de um erro definido pelo aplicativo.
Atualmente, estou aderindo ao método de células, porque não tenho certeza de como abordar uma seleção de intervalo variável em uma instrução For Each; ou seja, eu posso entender como abordar meu bCell em todo o intervalo ("B: B"), mas não saberia como definir meu eCell para que o intervalo a que ele se referisse fosse realmente o intervalo do bCell compensado por três colunas.
Estou perdendo algo óbvio sobre essas propriedades?
fonte
Respostas:
Tudo que você precisa é mudar esta linha:
Para isso:
fonte