VBA DO WHILE NOT 类型不匹配
VBA type mismatch on DO WHILE NOT
我的宏有问题:
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" sheet 中获取周数并将其粘贴到第一行第一个空闲单元格的 "dystr hist" sheet 中。然后我们对项目进行 vlookup,直到列表完成。
它适用于以前的 sheet,但在这个特定的地方它因类型不匹配而崩溃。谁能解释一下为什么?
-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
这就是您要求的解释:
问题是你 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 是 sheet 中最左上角的单元格,您不能向左移动。
解决方案:
- 避免使用
ActiveCell
- 避免使用
Select
- 通过工作sheets
完全符合您的Cells/Ranges
- Use
Long
instead of Integer
我的宏有问题:
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" sheet 中获取周数并将其粘贴到第一行第一个空闲单元格的 "dystr hist" sheet 中。然后我们对项目进行 vlookup,直到列表完成。 它适用于以前的 sheet,但在这个特定的地方它因类型不匹配而崩溃。谁能解释一下为什么?
-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
这就是您要求的解释:
问题是你 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 是 sheet 中最左上角的单元格,您不能向左移动。
解决方案:
- 避免使用
ActiveCell
- 避免使用
Select
- 通过工作sheets 完全符合您的Cells/Ranges
- Use
Long
instead ofInteger