现在有一个表是这样的,这个是例子,实际可能有更多行,每次拿到都是不一样的,叫他表1
- ID\ COID\ Equation \ equation_comment
- 8649651 pol D0798_wedfg *68768564 a
- 8219418 pol D0798_wfhgv *545489 b
- 8292384 pol D0798_okng * P0650 * 786212 c
- 9458128 pol D0997_hbvyutyr * 10057 d
- 8911892 pol D0798_u6yrrd *5678 e
所以每次遇到不同的表1,我想取equation这列*号前面的string然后vlookup另一个表,另一个表有300多行大概就是下面这样,这是个数据库,这表名字
ADbac.xls
- Longname
- D0798_wedfg
- D0798_wfhgv
- D0798_okng
- D0997_hbvyutyr
- D0798_wfhgvcvbn
- D0798_oknghjgg
- D0997_hbvyutyryjn
。。
303.D0798_u6yrrd
我想让MACRO给我再第一个表第五列也就是F列返回值,如果vlookup有对应数据回“TRUE”如果没有回“FALSE"
下面是code
- Sub ADDValidation()
- Dim N As Integer
- Dim M As String
- Dim InputRng As Range
- Dim validatedriverequation_Row As Long
- Dim validatedriverequation_Clm As Long
- Dim wkbk As Workbook
- Dim AD As Range
- Dim cl As Variant
- Dim TMP As Worksheet
-
- xTitleId = "validatedriverequation"
- Set InputRng = Application.Selection
- Set TMP = InputRng.Worksheet
- Set InputRng = Application.InputBox("Equation Range ", xTitleId, InputRng.Address, Type:=8)
- validatedriverequation_Row = TMP.Application.Range("F2").Row
- validatedriverequation_Clm = TMP.Application.Range("F2").Column
-
- Set wkbk = Workbooks.Open("P:\ADbac.xls")
- Set AD = wkbk.Worksheets("ADbac_active").Range("C4:C303")
-
- 'On Error Resume Next
- 'On Error GoTo Errhandler:
-
- For Each cl In InputRng
- N = InStr(1, cl, "*") - 2
- M = Left(cl, N)
- TMP.Cells(validatedriverequation_Row, validatedriverequation_Clm) = Application.WorksheetFunction.VLookup(M, AD, 1, False)
- If TMP.Cells(validatedriverequation_Row, validatedriverequation_Clm) = Application.WorksheetFunction.VLookup(M, AD, 1, False) Then
- TMP.Cells(validatedriverequation_Row, validatedriverequation_Clm).Value = " True"
- Else: TMP.Cells(validatedriverequation_Row, validatedriverequation_Clm).Value = "False"
- End If
- validatedriverequation_Row = validatedriverequation_Row + 1
- Next cl
-
- wkbk.Close
- 'Errhandler:
- 'TMP.Cells(validatedriverequation_Row, validatedriverequation_Clm).Value = "False"
-
-
- 'Resume Next
- MsgBox "Done"
-
- End Sub
但现在有几个问题
1.当equation这列没有数据或者数据错误的时候,也就是N找不到*时,系统总是告诉我bug在27行。当vlookup找不到对应选项,bug在28行。我试过加入on error这种语句,但不是只停在第一个false就是全部返回true。有没有大神能帮我写一下if error或者on error这样的code在里面
2.数据库表有300多个,我本来想放到code里,这样每次就不用打开这个表,但没办法,太长了,大神能不能帮我想想办法。谢啦