2013-02-26 30 views
0

我有以下代碼:Excel中無法讀出可變

Dim FinalAddr As Range 
Dim Final As String 

Private Sub Worksheet_Change(ByVal Target As Range) 
If Target.Cells.Count > 1 Then Exit Sub 
On Error Resume Next 


Select Case UCase(Target.Value) 


    Case "NEW-BOX" 
     Selection.Offset(-1, 2).Select 
     FinalAddr = Range(Selection.Address) 
     MsgBox FinalAddr ' Debug, nothing comes up however 
     Selection.ClearContents 
     Selection.Offset(1, -2).Select 

    Case "END-BOX" 
     Final = FinalAddr.Value 
     Application.Speech.Speak (Final) 

    End Select 
End Sub 

然而,當我掃描新箱子沒有任何反應,是所有的語法是否正確?我沒有錯誤,任何輸入將不勝感激。

+1

你是否試過在'Case「NEW-BOX」'上放置一個斷點? – 2013-02-26 10:22:01

+1

插入'Case Else:MsgBox「您在'End Select'語句之前提供了&UDase(Target.Value)'來查看正在檢查的內容。 – 2013-02-26 10:25:16

+1

你想在MsgBox中打印什麼? – mattboy 2013-02-26 10:26:40

回答

3

這是你在追求什麼?

Case "NEW-BOX" 
     Selection.Offset(-1, 2).Select 
     MsgBox Selection.Address ' Debug, nothing comes up however 
     Selection.ClearContents 
     Selection.Offset(1, -2).Select 

編輯:如果您想將FinalAddr設置爲選擇,然後進行測試,它的工作原理:

Case "NEW-BOX" 
     Selection.Offset(-1, 2).Select 
     Set FinalAddr = Selection 
     MsgBox FinalAddr ' Debug, nothing comes up however 
     Selection.ClearContents 
     Selection.Offset(1, -2).Select 
+0

對不起,我試圖設置FinalAddr變量的範圍,然後得到該範圍的值,並將其傳遞到下一個案例中的語音合成 – SCGB 2013-02-26 10:43:22

+0

然後只需刪除'.address' – glh 2013-02-26 10:45:11

+1

右,只需在第二個示例中刪除'.Address'以獲取該值,請參閱更新後的帖子。 – mattboy 2013-02-26 10:46:20

1

如果你想在你應該使用Finaladdr = Selection.Value單元格中的數值,但如果你想要的地址選擇你應該使用= Selection.AddressLocal()

但是,如果你想參考的範圍,你需要使用Set然後.AddressLocal()引用單元格地址時。