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
ival
和ival2
都是从相同的范围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