【发布时间】:2017-08-16 03:55:33
【问题描述】:
这是填充列表框的代码,从 TextBoxes 中获取大部分数据。
iListCount 被声明为全局。由于我不知道的原因,列表框仅填充第一行,除非这样做,否则不会占用后续行。
Private Sub cmdAddFraudCharges_Click()
With Me.lstFCHRGS '<- ListBox
.ColumnCount = 6
.ColumnWidths = "60;65;50;26;35;70"
.AddItem
.List(iListCount, 0) = dtpAddDt |<--DateTimePicker|error occurs here
.List(iListCount, 1) = txtAddAmt |<--Continues till last column
iListCount = iListCount + 1
End With
End Sub
这是我用来同时删除列表框项和工作表条目的代码。
Private Sub cmdDelChrgs_Click()
Dim x As Integer
Dim y As Integer
Dim t As Integer
Dim rngTarget As Range
Set rngTarget = wksFraud.Range("A1").End(xlDown)
Set wksFraud = Application.ThisWorkbook.Worksheets("Fraud")
For iListCount = lstFCHRGS.ListCount - 1 To 0 Step -1
x = lstFCHRGS.ListCount
If lstFCHRGS.Selected(iListCount) Then
y = iListCount
t = (x - y) - 1
With rngTarget
Set rngTarget = rngTarget.Offset(-t, 0)
rngTarget.EntireRow.Delete
End With
lstFCHRGS.RemoveItem (iListCount)
End If
Next iListCount
End Sub
【问题讨论】:
-
您能否在添加新项目之前显示您设置
i的代码? (但是,如果您的第一个代码块紧跟在您的第二个代码块之后,则i的值为-1,这样就可以解释错误。) -
您需要发布足够多的内容,以便我们可以看到
i在到达.List(i, 0) = txt1行时被设置为无效值(可能是-1)。我害怕“整个代码”有多少代码——如果只有几百行,把它贴出来,然后我们可以将它编辑到相关部分。如果不止于此,您将需要自己进行一些编辑,以摆脱与i如何获得其价值绝对无关的内容。 -
@MarkVincentManansala
iListCount是全球性的吗?如果是这样,它看起来会在您删除后设置为列表的 (last + 1) 索引。在Next iListCount之后,您应该将其重置为零。 -
很难看出它是如何工作的,但也许它可能是
iListCount = lstFCHRGS.ListCount - 1,而不是我之前建议的零。在任何情况下;这很好地说明了为什么使用这样的全局变量通常是个坏主意。iListCount应该是一个局部变量 -
@Rob,尽力使答案连贯。大声笑希望有效!干杯!
标签: vba excel listbox listboxitem