2016-08-29 38 views
0

我尝试编写生成三种类型连续代码的代码。生成Uniqe值

如果var1是comp1,串行必须以“AG”开始,它必须看起来像AG160001。 如果var1是comp2,串行必须以“IG”开始,它必须看起来像IG160001。 如果var1是comp3,串行必须以“GC”开头,并且它必须看起来像GC160001。 每次我按下“生成串行”按钮时,它将搜索var1的值,如果它的comp1则生成串行AG160002。

该代码很好用。但是当我运行另一个代码时,运行此代码时出现错误。 错误是上一行: 对象变量未设置(错误91)的Varn =范围。( “A:A”)查找( “GC”,SearchOrder:= xlByRows,SearchDirection:= xlPrevious).Row

Sub IDgen() 

Dim LastId As String 
Dim NewId As String 
Dim var1 As String 
Dim varN As Long 
Dim wsLVZKpk As Excel.Worksheet 
Dim wbLVZKpk As Excel.Workbook 
Dim wkb As Excel.Workbook 
Dim wks As Excel.Worksheet 
Dim objListRows As ListRows 

Set awkb = ActiveWorkbook 
Set awks = awkb.Sheets(1) 


awks.Activate 
var1 = Range("perceel").Value 
If var1 = "" Then 
awks.Activate 
MsgBox "select comp" 
Exit Sub 
End If 

LVZKpk = "c:\test.xlsm" 
Set wbLVZKpk = Workbooks.Open(LVZKpk) 
Set wsLVZKpk = wbLVZKpk.Sheets(1) 

If var1 = "com1" Then 
wsLVZKpk.Activate 

varN = Range("A:A").Find("AG", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row 
LastId = Cells(varN, "A").Value 
NewId = "AG" & CLng(Mid(LastId, 3)) + 1 
awks.Activate 
Range("bestand").Value = NewId 
wbLVZKpk.Close 

ElseIf var1 = "comp2" Then 
wsLVZKpk.Activate 
varN = Range("A:A").Find("IG", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row 
LastId = Cells(varN, "A").Value 
NewId = "IG" & CLng(Mid(LastId, 3)) + 1 
awks.Activate 
Range("bestand").Value = NewId 
wbLVZKpk.Close 


ElseIf var1 = "com3" Then 
wsLVZKpk.Activate 
varN = Range("A:A").Find("GC", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row 
LastId = Cells(varN, "A").Value 
NewId = "GC" & CLng(Mid(LastId, 3)) + 1 
awks.Activate 
Range("bestand").Value = NewId 
wbLVZKpk.Close 

End If 


Exit Sub 

End Sub 
+0

该错误表示'.Find'没有返回任何东西。 “其他代码”是否更改活动工作表?我怀疑你只需要完全限定你的'Range'和'Cell'参考。 – Comintern

+0

我改变 VARN =范围( “A:A”)查找。( “股份公司”,SearchOrder:= xlByRows,SearchDirection:= xlPrevious).Row 要 VARN = wsLVZKpk.Range( “A:A”) .Find(“AG”,SearchOrder:= xlByRows,SearchDirection:= xlPrevious).Row – Rafael

回答

2

我相信你收到错误91,因为在指定的范围内找不到值“AG”。

尝试更换此:

varN = Range("A:A").Find("AG", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row 
LastId = Cells(varN, "A").Value 
NewId = "AG" & CLng(Mid(LastId, 3)) + 1 
awks.Activate 
Range("bestand").Value = NewId 
wbLVZKpk.Close 

像这样的东西:

Dim rngFind As Excel.Range 
Set rngFind = Range("A:A").Find("AG", SearchOrder:=xlByRows, SearchDirection:=xlPrevious) 
If Not rngFind Is Nothing Then 
    varN = rngFind.Row 
    LastId = Cells(varN, "A").Value 
    NewId = "AG" & CLng(Mid(LastId, 3)) + 1 
    awks.Activate 
    Range("bestand").Value = NewId 
    wbLVZKpk.Close 
End If 


此外,似乎:

  1. wkbwks个变量实际上应该尺寸被 awkbawks,分别为
  2. 一个Dim LVZKpk As String行 缺少

如果指定“选项显式”的模块的顶部,你会被警告这样的问题就像编译或运行代码时一样。