2016-03-02 85 views
0

使用Excel VBA失败了,我已经构建了字典并填充它。我做了我的测试,它做得很好。 之后,在一个循环中,我不得不测试是否存在的关键做一些操作:在Excel如果测试通过时值手动键入但是从细胞

For i3 = 2 To n 'n is the the number of rows 
    If dicos.Exists(ActiveSheet.Range("T" & i3)) Then 
     ActiveSheet.Range("N" & i3) = dicos(ActiveSheet.Range("T" & i3)) + 1 
    Else 
     ActiveSheet.Range("N" & i3) = 1 
    End If 
Next 

它不工作,我有1在所有的N列。我试图从一些值来测试T列手动找到它! 任何人都可以向我解释什么,我做错了,为什么测试是正面的,当我手动输入值,为负时,程序必须把它从一个单元格(列T)? 非常感谢。

+0

尝试'ActiveSheet.Range(“T”&i3)).Value2'。另外,你确定你认为的表格是* Active *,真的吗?最好是将工作表变成变量并直接与变量一起工作,以确保**您具有所需的精确工作表。像这样:'昏暗的ws作为工作表|设置ws =工作表(“Sheet1”)| ws.Range(“AT”&i3)' –

+0

它不适用于.Value2。是的,活动板是什么,我认为是这样,因为'ActiveSheet.Range(“N”和I3)= 1'在表时改变+1到+4是真正写入值1 – zakariag

回答

1
Dim ws As Worksheet 
Set ws = ThisWorkbook.Worksheets("Sheet1") 

Dim dicos As Dictionary 
Set dicos = new Dictionary 

'Populate dicos.... 

For i = 2 To n 'n is the the number of rows 
    If dicos.Exists(ws.Cells(i, 20).Value) Then 
     ws.Cells(i, 14) = dicos.Item(ws.Cells(i, 20).Value) + 1 
    Else 
     ws.Cells(i, 14) = 1 
    End If 
Next 

我认为,问题是,你没有在添加剂线路上使用.Value,因此正把1在那里。当我测试你的代码为张贴时,我将+1改为+4,并且在​​而不是1中得到4。

+0

你观察有关获取4解决方案的关键。谢谢, – zakariag