Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不执行时DO上的VBA类型不匹配_Vba_Excel_Do While_Type Mismatch - Fatal编程技术网

不执行时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仍然被选中。然而,代码需要一些改进。