我不确定,但你调用范围的方式对我来说似乎很奇怪。尝试一种不同的方式来定义您的计数范围。
改变这个:
nextrow = WorksheetFunction.CountA(Sheets("DB Cust").Range("C:C")) + 2
到这里:
Dim myWB as Workbook, DBcust as Worksheet
Set myWB = Excel.ActiveWorkbook
Set DBcust = myWB.Worksheets("DB Cust")
nextrow = Excel.WorksheetFunction.CountA(DBcust.Range(DBcust.Cells(1,3),DBcust.Cells(DBcust.UsedRange.Rows.Count,3)) + 2
为了提高可靠性,我将书籍和工作表分配给了一个变量,但如果您愿意,您可以再次明确说明它们。此代码假定工作簿是当前活动的工作簿,否则您必须使用工作簿名称设置变量。
此外,您似乎不需要“With”块中偏移函数的“rfound”部分。 . .这就是“With”的用途。这只是一件小事,但像这样毫无意义的代码只会让你更加头疼,所以我的建议是把它拿出来。
我还没有将它加载到 VBA IDE 中,所以请仔细检查拼写错误。谢谢!
更新:
阅读您的评论后,我仔细查看了您的代码以及您要执行的操作。看起来您正在尝试将 textbox1 的值(无论可能是什么......如果您稍微解释一下这部分会有所帮助)到一个单元格中,该单元格与用户在 combobox1 中定义的搜索结果的位置相距。 nextrow 变量位于行偏移参数内,但该位置已经是您想要的位置。尝试改变这个:
With rfound
rfound.Offset(nextrow, 1).Value = TextBox1.Value
rfound.Offset(nextrow, 2).Value = TextBox1.Value
rfound.Offset(nextrow, 3).Value = TextBox1.Value
rfound.Offset(nextrow, 4).Value = TextBox1.Value
rfound.Offset(nextrow, 5).Value = TextBox1.Value
rfound.Offset(nextrow, 6).Value = TextBox1.Value
rfound.Offset(nextrow, 7).Value = TextBox1.Value
rfound.Offset(nextrow, 8).Value = TextBox1.Value
MsgBox ("Data entry success")
End With
到这里:
With rfound
.Offset(0, 1).Value = TextBox1.Value
.Offset(0, 2).Value = TextBox1.Value
.Offset(0, 3).Value = TextBox1.Value
.Offset(0, 4).Value = TextBox1.Value
.Offset(0, 5).Value = TextBox1.Value
.Offset(0, 6).Value = TextBox1.Value
.Offset(0, 7).Value = TextBox1.Value
.Offset(0, 8).Value = TextBox1.Value
MsgBox ("Data entry success")
End With
您可能会注意到,根据我之前的建议,我还删除了多余的“rfound”。看看这是否有效,如果有效,您可能需要一起删除 newrow 变量。
祝你好运,让我们知道进展如何。