VBAtypes不匹配DO WHILE NOT

我的macros有问题:

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 

它应该像这样工作:它需要从“丹麦”表中的星期编号,并将其粘贴到第一行的第一个空闲单元格中的“dystr hist”表。 然后我们有查找项目,直到列表完成。 它适用于以前的工作表,但在这个特定的地方崩溃types不匹配。 谁能解释我为什么?

这是你为什么要求的解释:

问题是你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是工作表中最左上angular的单元格,而您不能向左移动。


解:

  • 避免使用ActiveCell
  • 避免使用Select
  • 使用工作表完全限定您的单元格/范围
  • 使用Long而不是Integer

什么是-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 

不同之处在于使用以下代码改变ActiveCellActiveCell.End(xlToRight).select