2016-12-30 57 views
0

我有2个工作表,产品组和数据库:vba更新单元格与数据验证?

我的表,产品类别有一个布局如下图所示:

A4 
A5  {Button} 
A6 
A7 
A8 

用户值可以开始添加列A4。这个列表的含义可以扩展到A4-A8或A4到A100。

我创建了一个按钮,允许用户运行宏,他们在A列更新的值后

该宏应该从A4插入值,以最后一次使用一行到细胞T7我的数据验证在我的数据库表上。

这里是我的代码:

Sub button() 
Dim lastRow As Long 
lastRow = ThisWorkbook.Worksheets("Product Groups").Range("A4" & Rows.Count).End(xlUp).Row 


Dim ws As Worksheet 
Dim ws2 As Worksheet 
Dim range1 As Range, rng As Range 
'change Sheet1 to suit 
Set ws = ThisWorkbook.Worksheets("Database") 
Set ws2 = ThisWorkbook.Worksheets("Product Groups") 


Set rng = ws.Range("T7") 
Set range1 = ws2.Range("A1:A" & lastRow) 

With rng.Validation 
    .Delete 'delete previous validation 
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _ 
     Formula1:="='" & ws2.Name & "'!" & range1.Address 
End With 


End Sub 

出于某种原因,我得到这一行的错误:

lastRow = ThisWorkbook.Worksheets("Product Groups").Range("A4" & Rows.Count).End(xlUp).Row 

应用程序定义或对象未定义的错误。

请有人可以告诉我哪里出了问题?感谢

+0

尝试'LASTROW = ThisWorkbook.Worksheets(“产品组”的一个可能的重构一起使用,显示它的答案被赋予).Range(“A4”&ThisWorkbook.Worksheets(“Product Groups”).Rows.Count).End(xlUp).Row' ...(您可能不需要第二个“ThisWorkbook.”,但您需要工作表。) – BruceWayne

+2

差不多;它是'LastRow = ThisWorkbook.Worksheets(“产品组”)。范围(“A”和ThisWorkbook.Worksheets(“产品组”).Rows.count).End(xlUp).row' – user3598756

+0

@ user3598756击败我。您不能使用Range(“A4”)定义第4行,然后尝试重新定义该行。您只需使用Range的Column A部分并使用'.Rows.Count'定义行部分。 – SalvadorVayshun

回答

0

该解决方案已在评论

我再次与你的代码

Option Explicit 

Sub button() 
    Dim range1 As Range 

    With ThisWorkbook.Worksheets("Product Groups") 
     Set range1 = .Range("A1", .Cells(.Rows.count, 1).End(xlUp)) 
    End With 

    With ThisWorkbook.Worksheets("Database").Range("T7").Validation 
     .Delete 'delete previous validation 
     .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Formula1:="='Product Groups!" & range1.Address 
    End With 
End Sub 
+0

Princess.Bell,你也可以找到时间给你回答以前的问题! – user3598756