2014-10-17 104 views
0

对于我的工作簿,当用户想要删除项目的选项卡时,他们将PRJNumber放在程序选项卡的单元格T14中。该项目编号有各种其他标签,作为名称的最后6位数字(例如,A_PRJNumber,B_PRJNumber等)。所有PRJNumbers都是6位数字。下面的代码应该工作,两个msgboxes表明它正在读取单元格T14中的6位数字和正确的标签名称,但它不会删除标签或给我任何错误。想法?VBA Excel:删除具有特定名称的工作表

Sub Delete_Project() 

Dim wks As Worksheet 
Dim PRJNumber 
PRJNumber = Sheets("Program").Range("T14").Value 
MsgBox (PRJNumber) 

For Each wks In ActiveWorkbook.Worksheets 
MsgBox (Right(wks.Name, 6)) 
    If Right(wks.Name, 6) = PRJNumber Then 
     wks.Delete 
    End If 


Next wks 

End Sub 
+2

使第二个消息框执行此操作:'MsgBox(Right(wks.Name,6)= PRJNumber)'。它是否说“真”或“假”? – 2014-10-17 18:50:01

+0

我怀疑是T14包含一些额外的空间/等。 'MsgBox“Hello”'看起来与'MsgBox“Hello”'相同,但是值不一样。 – 2014-10-17 18:51:06

+1

你可以做'PRJNumber = Trim(表格(“程序”)。范围(“T14”))'这应该解决它我认为。 – 2014-10-17 18:52:25

回答

1

我怀疑的是,T14包含一些额外的空间/等。

例如:

Dim str1 as String, str2 as String 
str1 = "123456 " 
str2 = "123456" 

'## These two message boxes should look the same, you would not be able to tell the difference: 
MsgBox str1 

MsgBox str2 

'## But by comparing their inputs, you can see they are NOT the same 
MsgBox str1 = str2 

如果是这样的话,那么你可以使用TRIM功能将照顾用户错误的,如果不慎进入空间(通常这些都是从复制/粘贴的结果其他应用程序等):

PRJNumber = Trim(Sheets("Program").Range("T14")) 
相关问题