我有一个愚蠢的问题而且不知道为什么......
我想从其他工作簿中导入一些值。
步骤:
- 打开其他工作簿(来源)
- 获取所需的数据范围。
复制数据
- 获取节点*的出现次数,使目标表准备就绪。
- 切换到目标表并获取节点外观。
- 扩展目标表。
- 粘贴数据。
我的问题: 它只从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
如果您需要了解任何信息,请告知我们。
我希望你能帮助我。
答案 0 :(得分:0)
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
范围变量。
你想在激活它之后从另一个wb / ws的同一范围获得ival2
,试试
ival2 = Application.CountIf(Range(rng.Address), "node*")
' ^^^^^^^^^^^^^^^^^^
现在将引用相同的范围,但在活动工作表中。
但是,强烈建议完全放弃使用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