Vba 对象未定义
“频道”、“facebook”、“instagram”和“twitter”是“对象”数据类型 “i”、“j”和“k”是“整数”数据类型 “ws”是“工作表”数据类型Vba 对象未定义,vba,Vba,“频道”、“facebook”、“instagram”和“twitter”是“对象”数据类型 “i”、“j”和“k”是“整数”数据类型 “ws”是“工作表”数据类型 Set channel = CreateObject("Scripting.Dictionary") With channel .Add "facebook", facebook .Add "instagram", instagram .Add "twitter", twitter End With
Set channel = CreateObject("Scripting.Dictionary")
With channel
.Add "facebook", facebook
.Add "instagram", instagram
.Add "twitter", twitter
End With
Set facebook = CreateObject("Scripting.Dictionary")
With facebook
.Add "brand", 0
.Add "post", 0
.Add "likes", 0
.Add "comments", 0
.Add "boosted", 0
.Add "shares", 0
End With
Set instagram = CreateObject("Scripting.Dictionary")
With instagram
.Add "brand", 0
.Add "post", 0
.Add "likes", 0
.Add "comments", 0
End With
Set twitter = CreateObject("Scripting.Dictionary")
With twitter
.Add "brand", 0
.Add "post", 0
.Add "likes", 0
.Add "retweets", 0
.Add "is retweet", 0
End With
For Each ws In Sheets
For i = 0 To channel.count - 1
If channel.Keys()(i) = ws.name Then
Sheets(ws.name).Activate
emptyCol = WorksheetFunction.CountA(Range("1:1"))
emptyRow = WorksheetFunction.CountA(Range("A:A"))
For j = 1 To emptyCol
For k = 0 To channel(channel.Keys()(i)).count - 1
If InStr(Cells(1, j), channel(channel.Keys()(i)).Keys()(k)) <> 0 Then
channel(channel.Keys()(i))(channel(channel.Keys()(i))) = j
MsgBox channel(channel.Keys()(i)) & "." & channel(channel.Keys()(i)) & "=" & j
End If
Next k
Next j
End If
Next i
Next ws
Set channel=CreateObject(“Scripting.Dictionary”)
带通道
.添加“脸谱网”,脸谱网
.添加“instagram”,instagram
.添加“推特”,推特
以
设置facebook=CreateObject(“Scripting.Dictionary”)
使用facebook
.添加“品牌”,0
。添加“post”,0
。添加“喜欢”,0
。添加“评论”,0
.添加“增强”,0
.添加“股份”,0
以
设置instagram=CreateObject(“Scripting.Dictionary”)
使用instagram
.添加“品牌”,0
。添加“post”,0
。添加“喜欢”,0
。添加“评论”,0
以
设置twitter=CreateObject(“Scripting.Dictionary”)
用推特
.添加“品牌”,0
。添加“post”,0
。添加“喜欢”,0
.添加“转发”,0
.添加“正在转发”,0
以
对于每个ws-In表单
对于i=0到channel.count-1
如果channel.Keys()(i)=ws.name,则
工作表(ws.name)。激活
emptyCol=WorksheetFunction.CountA(范围(“1:1”))
emptyRow=WorksheetFunction.CountA(范围(“A:A”))
对于j=1,清空ycol
对于k=0到通道(channel.Keys()(i))。计数-1
如果InStr(单元格(1,j),channel(channel.Keys()(i)).Keys()(k))为0,则
通道(channel.Keys()(i))(通道(channel.Keys()(i)))=j
MsgBox频道(channel.Keys()(i))&“&”频道(channel.Keys()(i))&“=”&j
如果结束
下一个k
下一个j
如果结束
接下来我
下一个ws
即将出现的错误是:
它突出显示了以下代码:
对于k=0到通道(channel.Keys()(i)).count-1
您正在以错误的顺序组装字典
对象。当此代码运行时
With channel
.Add "facebook", facebook
.Add "instagram", instagram
.Add "twitter", twitter
End With
…facebook
、instagram
和twitter
都没有设置任何内容。我猜它们也没有声明,所以存储的是空的Variant
,而不是对象。当您最终创建实际对象时,为时已晚,因为它们是按值存储在字典中的,所以基础变量只是更改为指向新对象。看
最直接的解决办法是像这样重新排列代码的顶部部分
Set facebook = CreateObject("Scripting.Dictionary")
With facebook
.Add "brand", 0
.Add "post", 0
.Add "likes", 0
.Add "comments", 0
.Add "boosted", 0
.Add "shares", 0
End With
Set instagram = CreateObject("Scripting.Dictionary")
With instagram
.Add "brand", 0
.Add "post", 0
.Add "likes", 0
.Add "comments", 0
End With
Set twitter = CreateObject("Scripting.Dictionary")
With twitter
.Add "brand", 0
.Add "post", 0
.Add "likes", 0
.Add "retweets", 0
.Add "is retweet", 0
End With
Set channel = CreateObject("Scripting.Dictionary")
With channel
.Add "facebook", facebook
.Add "instagram", instagram
.Add "twitter", twitter
End With
解决方案是添加Option Explicit,以确保正确声明变量。Hi,您是否尝试迭代字典的键?Hi,是的。迭代,用列标题检查它们,并将列号存储为它们的项。因为字典中只有3项,所以只使用数组可能更容易。有关迭代字典键的示例,请参见此答案。你是说使用数组而不是“通道”字典?是的,我的意思是当你有很多项时,字典通常用于快速查找。你有3个项目。您可以这样做,但是数组甚至集合可能更适合。