2016-10-04 65 views
0

我有一个宏来查看一个单元格是否包含此字符串,如果是这样执行“另存为”命令与此集名称标准。当我尝试运行宏时,if语句似乎不起作用。当我一步一步地经历它碰到if语句,但保存personal.xlsb而不是我正在处理的文件。在这里,我知道我的代码有什么不对的地方Excel Personal.xlsb保存文档宏

Dim FName   As String 
Dim FPath   As String 
Dim answer   As Integer 
If ActiveWorkbook.Sheets("Sheet1").Range("A1") = "String1" Then 
    FPath = "C:\String1" 
    FName = Sheets("Sheet1").Range("A1").Text 
    If Len(FPath & "\" & FName) = 0 Then 
     answer = MsgBox("Do you want to Save File As: " & FName & "?", vbYesNo + vbQuestion, "Microsoft Excel") 
     If answer = vbYes Then 
      ThisWorkbook.SaveAs Filename:=FPath & "\" & FName 
     End If 
    Else 
     ThisWorkbook.Save 
    End If 
End If 

我愿意接受建议,我是最重要的是,以检查文件是否包含一个字符串,如果这样验证它已经不存在,如果是的话只需保存即可保存为。

+0

'ThisWorkbook.SaveAs' >>'ActiveWorkbook.SaveAs'在Excel VBA'ThisWorkbook'是在代码运行 –

+0

谢谢没想到有工作簿一个不同的但我现在看到 –

+2

也请注意,您的逻辑可能有点关闭 - 如果没有在C:\ String1目录中存在单元格A1(即“String1”)中指定的名称的文件,用户将询问他们是否希望将文件保存在那里,从而创建文件C:\ String1 \ String1.xlsx。但是,如果一个名为C:\ String1 \ String1的文件已经存在(当然,由于通常文件将有扩展名,所以不太可能),该工作簿将被保存回它打开的位置,可能是D:\ NonString2 \ Variable3.xlsx。 – YowE3K

回答

1

ThisWorkbook指的是代码所在的工作簿。据推测,代码位于Personal.xlsb中,这就是为什么它保存XLSB文件而不是活动工作簿。

试试这个:

Dim FName   As String 
Dim FPath   As String 
Dim fullName As String 
Dim rng As Range 
Dim s as String 
s = "String1" 
With ActiveWorkbook 
    Set rng = .Sheets("Sheet1").Range("A1") 
    If rng.Value = s Then 
     FPath = "C:\" & s 
     FName = rng.Text 
     fullName = FPath & "\" & FName 
     If Len(fullName) = 0 Then 
      If MsgBox("Do you want to Save File As: " & FName & "?", vbYesNo + vbQuestion, "Microsoft Excel") = vbYes Then 
       .SaveAs Filename:=fullName 
      End If 
     Else 
      .Save 
     End If 
    End If 
End With