VBA类型不匹配DO WHILE NOT

时间:2017-05-24 09:50:48

标签: excel vba excel-vba 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 + 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的项目,直到列表完成。 它适用于以前的工作表,但在这个特定的地方它崩溃与类型不匹配。谁能解释我为什么?

2 个答案:

答案 0 :(得分:1)

这就是您要求:

的原因

问题是你用

选择范围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 + 1nr_kol > 1为负。这不起作用,因为A1是工作表中最顶部最左边的单元格,你只能向左移动。

解决方案:

答案 1 :(得分:0)

-nr_kol是什么? Do While Not ActiveCell.Offset(0, -nr_kol + 1) = ""

可能你想写 Do While Not ActiveCell.Offset(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.End(xlToRight).select