不执行时DO上的VBA类型不匹配
我的宏没有问题:不执行时DO上的VBA类型不匹配,vba,excel,do-while,type-mismatch,Vba,Excel,Do While,Type Mismatch,我的宏没有问题: Dim nr_kol As Integer nr_kol = ActiveCell.Column Worksheets("dane").Range("I1").Copy Worksheets("dystr hist").Range("a1").Select ActiveCell.End(xlToRight).Offset(0, 1).PasteSpecial xlPasteValues Do While Not ActiveCell.Offset(0, -nr_kol
Dim nr_kol As Integer
nr_kol = ActiveCell.Column
Worksheets("dane").Range("I1").Copy
Worksheets("dystr hist").Range("a1").Select
ActiveCell.End(xlToRight).Offset(0, 1).PasteSpecial xlPasteValues
Do While Not ActiveCell.Offset(0, -nr_kol + 1) = ""
Selection.Offset(1, 0).Select
ActiveCell.Value = Application.VLookup(ActiveCell.Offset(0, -nr_kol + 1).Text, Worksheets("temp2").Range("B:I"), 8, False)
Loop
它应该是这样工作的:它从dane表中获取周数,并将其粘贴到dystr hist表中第一行的第一个空闲单元格中。然后,我们对项目进行vlookup,直到列表完成。
它适用于上一个工作表,但在这个特殊的地方,它会因类型不匹配而崩溃。有人能解释一下为什么吗?什么是-nr_kol
不激活时执行。偏移量0,-nr_kol+1=
也许你想写
不激活时执行。偏移量0,nr_kol+1*-1=
一般来说,您可能会尝试以下方法:
Dim nr_kol As long
nr_kol = ActiveCell.Column
Worksheets("dane").Range("I1").Copy
Worksheets("dystr hist").Range("a1").Select
ActiveCell.End(xlToRight).Offset(0, 1).PasteSpecial xlPasteValues
ActiveCell.End(xlToRight).select
Do While Not ActiveCell.Offset(0, -nr_kol + 1) = ""
Selection.Offset(1, 0).Select
ActiveCell.Value = Application.VLookup(ActiveCell.Offset(0, -nr_kol + 1).Text, Worksheets("temp2").Range("B:I"), 8, False)
Loop
不同之处在于ActiveCell的更改代码如下:
ActiveCell.EndxlToRight.select这是您要求的原因说明: 问题是您选择A1范围时
Worksheets("dystr hist").Range("a1").Select
'here you do some copy which doesn't change cell selection of A1
接下来,您尝试在中移动一个可能为负值的列值
ActiveCell.Offset(0, -nr_kol + 1)
其中-nr_kol+1对于nr_kol>1为负值。这不起作用,因为A1是工作表中最左上方的单元格,不能向左移动
解决方案:
避免使用ActiveCell
避免使用Select
使用工作表完全限定您的单元格/区域
可能您在其中一个单元格中有一个错误值。您是否尝试过在不IsEmptyActiveCell.Offset0,-nr_kol+1的情况下执行此操作?侧注:1您应该这样做。2始终使用Long而不是整数读取为什么.nr_kol+1*-1与nr_kol-1相同,不是吗?@Peh-我仍然很困。仍然无法工作。在他的代码中,所选单元格是上面两行中的A1,您尝试向负方向移动。无法工作,请看我的答案。@Peh-他的意思可能是活动单元格是选择中的最后一个单元格。。。我猜…是的,没有任何OP的信息很难说。或者他认为在任何宏运行之前的开始的ActiveCell仍然被选中。然而,代码需要一些改进。