VBA:与Application.CountIf的问题

我有一个愚蠢的问题,不知道为什么..

我想从其他工作簿导入一些值。

程序:

– 打开其他工作簿(来源)

获取所需的数据范围。

– 复制数据

– 获取节点*的出现次数,使目标表准备就绪。

– 切换到目标表,并获得节点的外观。

展开目标表。

– 粘贴数据。

我的问题:它只从Sorce表获得CountIf值。

以下一些信息:

Sub import_kundenform() Dim LR As Long Dim rng As Range Dim rng2 As Range Dim ActRow As Integer actwb = ActiveWorkbook.Name actsh = ActiveSheet.Name fName = Application _ .GetOpenFilename("Excel Files (*.xls), *.xls") If fName = False Then Exit Sub End If Set wb = Workbooks.Open(fName) startCell = 19 wb.Activate LR = Cells(Rows.Count, "A").End(xlUp).Row Set rng = Range("B1:B" & LR) wb.Sheets(1).Range("A7:L" & LR).Copy ival = Application.CountIf(rng, "node*") Workbooks(actwb).Worksheets(actsh).Activate ival2 = Application.CountIf(rng, "node*") If ival > ival2 Then ActRow = ival - ival2 + startCell Range("A20:A" & ActRow).EntireRow.Insert ElseIf ival < ival2 Then ActRow = ival2 - ival + startCell Range("A20:A" & ActRow).EntireRow.Insert End If Workbooks(actwb).Sheets(actsh).Range("A1").PasteSpecial Paste:=xlPasteValues End Sub 

如果您有任何需要了解的信息,请告诉我。

我希望你能帮助我。

 wb.Activate LR = Cells(Rows.Count, "A").End(xlUp).Row Set rng = Range("B1:B" & LR) wb.Sheets(1).Range("A7:L" & LR).Copy ival = Application.CountIf(rng, "node*") Workbooks(actwb).Worksheets(actsh).Activate ival2 = Application.CountIf(rng, "node*") If ival > ival2 Then 

ivalival2都是从相同的范围rng计算出来的。 激活另一个工作簿或工作表不会更改rng范围variables。

你想从另一个wb / ws上的同一个范围获得ival2 ,尝试

  ival2 = Application.CountIf(Range(rng.Address), "node*") ' ^^^^^^^^^^^^^^^^^^ 

现在将引用相同的范围,但在活动工作表中。

但是, 强烈build议您完全放弃使用Activate东西,并始终使用完全合格的范围

  Set wb = Workbooks.Open(fName) startCell = 19 'wb.Activate ' <----------drop this With wb.Sheets(1) LR = .Cells(.Rows.count, "A").End(xlUp).row Set rng = .Range("B1:B" & LR) .Range("A7:L" & LR).Copy ival = Application.CountIf(rng, "node*") End With 'Workbooks(actwb).Worksheets(actsh).Activate ' <----------drop this With Workbooks(actwb).Worksheets(actsh) ival2 = Application.CountIf(.Range(rng.Address), "node*") If ival > ival2 Then ActRow = ival - ival2 + startCell .Range("A20:A" & ActRow).EntireRow.Insert ElseIf ival < ival2 Then ActRow = ival2 - ival + startCell .Range("A20:A" & ActRow).EntireRow.Insert End If .Range("A1").PasteSpecial Paste:=xlPasteValues End With