将变量设置为列表中的下一个实例不起作用
Posted
技术标签:
【中文标题】将变量设置为列表中的下一个实例不起作用【英文标题】:Setting variable to the next instance in the list does not work 【发布时间】:2017-07-10 22:29:17 【问题描述】:上下文:我正在编写 Dijkstra 的最短路径算法,只是为了练习我在有关 excel-vba 的教程中阅读的基本模式。
我遇到了问题。经过长时间调试,我发现了问题。
这是一个显示问题的缩小版本(已评论):
Option Explicit
Private Sub btnSolution_Click()
Dim N As Integer: N = 3
'Creating one list with the first cell as head
Dim list As New model_linked_list
Set list.next_cell = Nothing
'Creates list 1..N
Dim i As Integer: i = N
Do While i > 0
'Creates the next cell adding to the start (after the head-cell)
Dim cell As New model_linked_list
cell.city = i
Set cell.next_cell = list.next_cell
'Update head-cell
Set list.next_cell = cell
i = i - 1
Loop
'All good till here, but when I try to loop over the list:
Dim item As model_linked_list
Set item = list.next_cell
'You will to set a breakpoint in this line to avoid infinite loop
Do While Not item Is Nothing
MsgBox item.city 'Always shows "1"
'This is the problematic line
Set item = item.next_cell 'It seems like it does nothing, literally
Loop
End Sub
我的model_linked_list
只是:
Option Explicit
Public city As Integer
Public next_cell As model_linked_list
说明,上面的代码应该只创建一个这样的列表:
当我尝试转到列表中的下一个单元格时,Set
似乎不起作用。有没有人见过这个?如何解决?
提前致谢。
【问题讨论】:
您应该在每次循环第一个循环时创建Cell
的New
副本,因此Set Cell = New model_linked_list
。目前,您只是在更新一个实例。 (请记住,Dim
语句仅在子例程的开头完成,无论它们位于代码中的什么位置。)
VBA: Difference in two ways of declaring a new object? (Trying to understand why my solution works)的可能重复
【参考方案1】:
你的错误在这里:
Dim cell As New model_linked_list
改成:
Dim cell As model_linked_list
Set cell = New model_linked_list
简而言之,对于Dim cell As New model_linked_list
,"New" 运算符只执行一次,因此您在所有迭代中都在操作同一个对象。
【讨论】:
我的评论比你的回答快了大约 20 秒(但我不必让我的评论看起来很漂亮):D @YowE3K Dóh,你为什么讨厌写答案? :D 事实上,我正在考虑只写一个更正,但后来认为值得添加一些解释。我觉得 OP 来自一些 C++ 背景。 因为我有一种模糊的感觉,即该问题无论如何都会被标记为重复 - 我知道有很多次我看到人们被告知不要使用Dim x As New y
结构。 (如果我能记住其中一个案例,我会自己将其标记为重复!:D P.S. 我刚刚搜索了site:***.com excel-vba dim as new
并找到了合适的副本。)
谢谢你们...我学到了一些新东西,我的代码现在运行良好:)
我实际上赞成这个问题,即使它是一个重复 - 它确实为搜索这个问题的人提供了一个很好的着陆点。以上是关于将变量设置为列表中的下一个实例不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Swift:将 Facebook JSON 中的名称、照片和封面设置为变量不起作用。
$_GET 变量在我的 ec2 实例中使用 cloudfront aws 不起作用