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