我想在电子表格中复制工作表中的第5行(“ Logg ”)" 工作订单测试.xlsm "到另一个电子表格“ Logg_test.xlsx ”。
我想在A列上过去,行号取决于它是新记录还是现有记录。
所以基本上我会根据电子表格中的单元格“B12”上的值找到行号" 工作订单测试.xlsm "并填写“工作单”。 我做错了什么?
Meteor.methods({
isAdmin: function (username, password){
return Admins.find({username: username, password: password}).count() > 0;
}
});
答案 0 :(得分:0)
似乎有两个问题:第一个是你的代码中有行(“5:5”)而不是Range(“5:5”);第二个是你的搜索值。它是工作簿“Logg_test.xlsx”的活动工作表中单元格“B12”中的一个,而不是工作簿“工作订单Test.xlsm”上工作表最初活动工作表上的单元格“B12”。
如果您自己使用Range,则会转换为
Application.ActiveWorkbook.ActiveSheet.Range
由于您激活了工作簿“Logg_test.xlsx”,因此Range(“B12”)不再引用同一个单元格。
实际上,你打算做什么都不需要选择任何东西,不这样做是好习惯。这有助于避免错误的查找值等错误。
您可以使用以下内容转换代码。
Sub copypaste()
Dim logg_wkb As Workbook
Dim order_test_wkb As Workbook
Dim test_sheet As Worksheet
Dim logg_sheet As Worksheet
Dim target_sheet As Worksheet
Dim lookup_value As String
Dim copy_rng As Range
Dim paste_rng As Range
Dim rngSearch As Range
Dim rngFound As Range
Dim pasteRow As Integer
Set logg_wkb = Workbooks.Open(Filename:="C:\Users\toreh\Documents\Logg_test.xlsx", UpdateLinks:=0)
Set order_test_wkb = Workbooks("Work Order Test.xlsm")
Set test_sheet = order_test_wkb.ActiveSheet
Set logg_sheet = order_test_wkb.Worksheets("Logg")
Set target_sheet = logg_wkb.ActiveSheet
Set copy_rng = logg_sheet.Range("5:5")
lookup_value = test_sheet.Range("B12")
Set rngSearch = target_sheet.Range("B:B")
Set rngFound = rngSearch.Find(lookup_value, LookIn:=xlValues, LookAt:=xlPart)
If IsMatch(rngFound) Then
pasteRow = rngFound.Row
Else
pasteRow = Application.Intersect(rngSearch, target_sheet.UsedRange).Rows.Count + 1
End If
Set paste_rng = target_sheet.Range("A" & pasteRow)
copy_rng.Copy
paste_rng.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
logg_wkb.Save
order_test_wkb.Activate
order_test_wkb.Sheets("Work Order").Select
Range("A1:B1").Select
End Sub
Private Function IsMatch(MatchRng As Range) As Boolean
IsMatch = Not (MatchRng Is Nothing)
End Function
这与您的代码的操作顺序相同,但仅在最后清理选择时使用select,这仍然是必需的,因为Copy会移动选择。
此版本仍然不是最佳版本,Sub的几个部分应重新排列并提取到单独的Subs和Functions中,以便于理解。特别是,提取逻辑以确定粘贴范围为单独的函数是一个好主意。