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
不同之处在于使用以下代码改变ActiveCell
: ActiveCell.End(xlToRight).select