2014-01-30 60 views
2

我是新來的Excel/VBA和StackOverflow。獲取應用程序定義或對象定義的錯誤

我運行Excel版本2007

我花了一整天在這個問題上,我已經用盡了我的耐心。嘗試執行簡單的VLOOKUP時,我總是收到「應用程序定義或對象定義的錯誤」。我正在測試此示例代碼以解決我的更大問題:

我需要位於Sheet1中的命令按鈕,該按鈕將具有基於Sheet1中的單元格值執行表查找的VBA代碼。該表在Sheet2中定義。查找(我假設的VLOOKUP)將需要查找名稱併發回包含例如「薪水」的數據。然後將此工資信息插入到Sheet1上的另一個單元格中。用戶然後可以更新這個薪水數字。另一個命令按鈕會將其導出回表格(更新表格條目)。

這可能嗎?但是,我無法通過簡單代碼通過VLOOKUP顯示消息框(參見下文)。

這是我的工作表Sheet:A1:4

Dave 
John 
Sara 
Steve 

這是我的Sheet 2中其被定義爲表1(A2:B6)

Name Salary 
Dave 2500 
John 3500 
Sara 4000 
Steve 4500 

這是我的VBA代碼:(注意評論在嘗試「嘗試」)

Sub FINDSAL() 

Dim E_name As String 
Dim Res As Variant 

'On Error Resume Next 
'Err.Clear 

'ThisWorkbook.Sheets("Sheet2").Activate 
'ActiveSheet.Range("A1:B5").Select 

E_name = "John" 

'Res = Application.WorksheetFunction.VLookup(E_name, Sheet1.Range("A2:B5"), 3, False) 
Res = Application.WorksheetFunction.VLookup(E_name, Table1, 2, False) 


MsgBox "Salary is: $" & Res 

End Sub 
+0

將'Option Explicit'添加到代碼的頂部。你會立即發現你的錯誤。 – enderland

回答

0

試試這個代碼。

FINDSAL獲取名稱從工作表Sheet1 A1(你可以很容易地改變它),發現在Sheet2的範圍Table1的工資和薪水,如果發現 - 在Sheet1 A2寫入。

Sub FINDSAL() 

    Dim E_name As String 
    Dim Res As Variant 
    Dim sh1 As Worksheet, sh2 As Worksheet 

    Set sh1 = ThisWorkbook.Worksheets("Sheet1") 
    Set sh2 = ThisWorkbook.Worksheets("Sheet2") 

    E_name = sh1.Range("A1") 

    Res = Application.VLookup(E_name, sh2.Range("Table1"), 2, False) 

    If Not IsError(Res) Then 
     MsgBox "Salary is: $" & Res 
     sh1.Range("A2") = Res 
    Else 
     MsgBox "Nothing found" 
    End If 

End Sub 

下一步,updateSalary從工作表Sheet1 A1和工資從工作表Sheet1 A2讀取名稱,並試圖在Table1 Sheet 2上

Sub updateSalary() 
    Dim E_name As String 
    Dim newSalary As Variant 
    Dim rnd As Range 
    Dim sh1 As Worksheet, sh2 As Worksheet 

    Set sh1 = ThisWorkbook.Worksheets("Sheet1") 
    Set sh2 = ThisWorkbook.Worksheets("Sheet2") 

    With sh1 
     E_name = .Range("A1") 
     newSalary = .Range("A2") 
    End With 


    Set Rng = sh2.Range("Table1").Find(What:=E_name, LookAt:=xlWhole) 

    If Not Rng Is Nothing Then 
     Rng.Offset(, 1) = newSalary 
     MsgBox "Salaty updated" 
    Else 
     MsgBox "Can't find " & E_name & " in table" 
    End If 
End Sub 

該代碼更新的薪水值假定所有名稱是唯一的。

+1

非常感謝你。這段代碼正是我所需要的!我不知道該怎麼感謝你才足夠!我無法在帖子中找到你的名字。我希望自己能夠想出這些代碼。我主要通過剪貼和谷歌解決方案。我喜歡VBA,需要接受一些培訓。 – user3255090

+0

歡迎您:)作爲推薦,請閱讀[真棒書](http://eu.wiley.com/WileyCDA/WileyTitle/productCd-0470475358.html):) –

相關問題