我对我的宏有问题:
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的项目,直到列表完成。 它适用于以前的工作表,但在这个特定的地方它崩溃与类型不匹配。谁能解释我为什么?
答案 0 :(得分:1)
这就是您要求:
的原因问题是你用
选择范围A1Worksheets("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
Long
instead of Integer
答案 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