Excel VBA查找地址并赋值给variables,然后重用值

我试图find一个单元格是否有给定的标题,将该单元格的地址传递给一个variables,并使用这个位置来调整列的大小。 我这样做的原因是因为我正在写几个函数来改变列的位置。 我很感激,如果有人可以看看,并告诉我我做错了什么。

Option Explicit Sub adjustColumns() Dim PONumberCell As String Dim PONumberAddress As Range Dim TopLabelinColumn As Range For Each TopLabelinColumn In Range("A1:Z1").Cells If TopLabelinColumn Like "PO_NUMBER" Then TopLabelinColumn.Value = "PO" PONumberCell = TopLabelinColumn.Address Set PONumberAddress = PONumberCell PONumberAddress.ColumnWidth = 70 Next TopLabelinColumn End Sub 

在OP的进一步要求之后编辑:

你很容易把一个Range对象(比如PONumberCell )和一个Stringvariables(比如PONumberAddressPONumberAddress

 Set PONumberAddress = PONumberCell 

不起作用,因为你正试图将一个objectvariables赋值给一个String

但是您可以更有效地避免循环并使用Find()方法

 Option Explicit Sub adjustColumns() Dim PONumberAddress As String Dim PONumberCell As Range Set PONumberCell = Range("A1:Z1").Find(what:="PO_NUMBER", LookIn:=xlValues, lookat:=xlPart, MatchCase:=False) If Not PONumberCell Is Nothing Then With PONumberCell .value = "PO" PONumberAddress = .Address .EntireColumn.ColumnWidth = 70 End With Else Set PONumberCell = Range("A1:Z1").Find(what:="PO", LookIn:=xlValues, lookat:=xlWhole, MatchCase:=False) '<--| if it didn't find "PO_NUMBER" then it seaches for a complete match of "PO" If Not PONumberCell Is Nothing Then PONumberCell.EntireColumn.ColumnWidth = 70 End If End Sub 

遵循上面的注释,你的代码中有几个错误:

  1. 设置PONumberAddress范围,需要使用以下语法:使用括号中的地址stringSet PONumberAddress = Range(PONumberCell)

  2. 要设置列宽,请使用: PONumberAddress.Columns.ColumnWidth = 70

  3. 根据你的post,我认为你只想为列标题文本是“PO_NUMBER”,因此你需要下面的所有代码inisde你IfIf TopLabelinColumn.Value Like "PO_NUMBER" Then

 Option Explicit Sub adjustColumns() Dim PONumberCell As String Dim PONumberAddress As Range Dim TopLabelinColumn As Range For Each TopLabelinColumn In Range("A1:Z1").Cells If TopLabelinColumn.Value Like "PO_NUMBER" Then TopLabelinColumn.Value = "PO" PONumberCell = TopLabelinColumn.Address Set PONumberAddress = Range(PONumberCell) PONumberAddress.Columns.ColumnWidth = 70 End If Next TopLabelinColumn End Sub