2016-08-29 39 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行 缺少

如果指定「選項顯式」的模塊的頂部,你會被警告這樣的問題就像編譯或運行代碼時一樣。