2016-08-29 3 views
0

私は3つのタイプのシリアルを生成するコードを書こうとしています。Uniqeの値を生成

var1がcomp1の場合、シリアルは「AG」で始まり、AG160001のように見える必要があります。 var1がcomp2の場合、シリアルは「IG」で始まり、IG160001のように見える必要があります。 var1がcomp3の場合、シリアルは「GC」で始まり、GC160001のように見える必要があります。 "generate serial"ボタンを押すたびに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")を変更して下さい。( "AG" SearchOrderを:= xlByRows、SearchDirection:= xlPrevious).Row VARN = wsLVZKpk.Range( "A:A")に、 .Find( "AG"、SearchOrder:= xlByRows、SearchDirection:= xlPrevious).Row – Rafael

答えて

2

"AG"という値が指定された範囲に見つからないため、エラー91が発生していると思います。このようなもので

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個の変数は、実際にDim LVZKpk As Stringラインは、モジュールの上部にある「明示的なオプション」を指定した場合、あなたは、このような問題に注意を喚起することがあります

を逃す でそれぞれ awkbawks

  • として次元されなければなりませんあなたのコードをコンパイルしたり実行したりするときのように。

  • 関連する問題