0

我想知道是否有人可以帮助我。

我正在使用下面的代码在命名范围(“ProjectName”)中搜索包含值“OVH”的任何单元格。找到此值后,脚本会从此范围创建唯一值列表并将它们粘贴到命名范围“EnhancementsList”中

Sub UniqueEnhancements()

Dim MyCell

 With CreateObject("scripting.dictionary")
        For Each MyCell In Range("ProjectName").Value
           If InStr(1, MyCell, "OVH") > 0 Then
               .Item(MyCell) = 1
            End If
        Next
        Range("EnhancementsList").Resize(.Count) = Application.Transpose(.keys)
    End With

    Worksheets("Enhancements").Columns("B:B").AutoFit

    Range("EnhancementsList").Sort Key1:=Range("EnhancementsList").Cells(2, 1), _
    Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, _
    Orientation:=xlTopToBottom, DataOption1:=xlSortNormal

End Sub

该代码工作正常,但是,如果可能的话,我希望对其进行调整,以便尽管它检查“OVH”文本字符串的“ProjectName”范围,但它会复制并创建列中的唯一值列表一步到左边的命名范围为“任务”,但我不知道该怎么做,尽管花了几天时间试图想出一个解决方案。

我已经尝试,以我有限的知识,改变这条线:

.Item(MyCell) = 1

.Item(MyCell.offset -1) = 1

.Item.offset-1 (MyCell) = 1

但我收到不匹配错误。

我只是想知道是否有人可以看看这个,让我知道我哪里出错了。

非常感谢和亲切的问候

4

2 回答 2

0

的格式Offset

Offset([RowOffset],[ColumnOffset])

因此,如果您希望获取单元格左侧一列的值,则需要执行以下操作

MyCell.Offset(0,-1)
于 2013-08-02T16:21:44.037 回答
0

问题是您在 For Each 循环中使用 .value 而不是 .cells 。所以 MyCell 最终是一个字符串,你不能从一个字符串偏移

试试这个:

For Each MyCell In Range("ProjectName").Cells
   If InStr(1, MyCell.Value, "OVH") > 0 Then
      .Item(MyCell.Offset(0,-1)) = 1
   End If
Next

(未测试)

于 2013-08-02T16:21:16.003 回答