如何在路径中使用变量编写VBA

3

这是我在这个网站上的第二篇文章,我对VBA相对较新。

我的问题是,

我如何将单元格的值添加到路径字符串中,以指定我想保存工作簿的文件夹。

Dim Path As String
Dim FileName1 As String
Dim FileName2 As String

Path = "D:\folder1\folder2\Projects\The FILES\theFILES\"FileName1"\

FileName1 = Range("B6")
FileName2 = Range("A1")

ActiveWorkbook.SaveAs Filename:=Path & FileName2 & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled

提前感谢您!


你想将路径值添加到单元格中,然后文件应该保存在该路径下,还是有其他要求? - Bhanu Pratap
如果您发现文件名无法正常工作,可能只是缺少了 .valueFileName1 = Range("B6").value___您还需要在路径名称周围加上引号。 - Davesexcel
1
FileName1= ...行移到开头,然后更改为Path = "D:\folder1\folder2\Projects\The FILES\theFILES\" & FileName1 & "\",再执行ActiveWorkbook.SaveAs Filename:= Path & FileName2 & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled即可。 - Vincent G
4个回答

6

回答所述问题

Path = "D:\folder1\folder2\Projects\The FILES\theFILES\" & FileName1 & "\" 

还可以查看其他反馈的额外反馈更正代码


详细解释

当您给字符串变量赋值时,最常见的方法是这样的:

string = "This is my string value."

然而,在代码中您经常会看到相当长的字符串,其语法如下所示,以便所有文本都适合开发屏幕而无需滚动:

string = "This is my really, really, really long string value. I am making this " _
    & "as long as I can, while also having something to write."

如果你删除了_,并将所有内容移到一行中,它会像这样读取:
string = "This is my really, really, really long string value. I am making this " & "as long as I can, while also having something to write."

请注意,任何分配给变量的字符串都可以以这种方式拆分:
string = "This is" & " my " & "string value."

' Returns the same result as:
string = "This is my string value."

此外,如果我有一个字符串变量,str_val = " my ",那么我可以使用替换方法来将上面的示例写成:
string = "This is" & str_val & "string value."

附加反馈

目前,您的代码顺序(见下面的原始代码)如下:

  1. 定义变量
  2. 为路径分配值
  3. 为FileName1分配值
  4. 为FileName2分配值
  5. 保存文件

不幸的是,按照这个顺序进行操作意味着在第2步中,FileName1 的值是一个空字符串 "",因为它还没有被赋值。

因此,您应该遵循的顺序是:

  1. 定义变量
  2. 为FileName1分配值
  3. 为FileName2分配值
  4. 为路径分配值
  5. 保存文件

字符串中的其他变量

@Davesexcel(后来更改)曾经假设您字符串中的folder1folder2也是变量。如果真是这种情况,我提供了备用代码


原始代码

Dim Path As String
Dim FileName1 As String
Dim FileName2 As String

Path = "D:\folder1\folder2\Projects\The FILES\theFILES\"FileName1"\

FileName1 = Range("B6")
FileName2 = Range("A1")

ActiveWorkbook.SaveAs Filename:=Path & FileName2 & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled

修正的代码

Dim Path As String
Dim FileName1 As String
Dim FileName2 As String

FileName1 = Range("B6")
FileName2 = Range("A1")

Path = "D:\folder1\folder2\Projects\The FILES\theFILES\" & FileName1 & "\"    

ActiveWorkbook.SaveAs Filename:=Path & FileName2 & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled

备选代码

Dim Path As String
Dim FileName1 As String
Dim FileName2 As String

FileName1 = Range("B6")
FileName2 = Range("A1")

Path = "D:\" & folder1 & "\" & folder2 & "\Projects\The FILES\theFILES\" & FileName1 & "\"    

ActiveWorkbook.SaveAs Filename:=Path & FileName2 & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled

3
你少了一些&符号,另外在使用变量之前必须先给它们赋值:
Dim Path As String
Dim FileName1 As String
Dim FileName2 As String

FileName1 = Range("B6").Value
FileName2 = Range("A1").Value

Path = "D:\folder1\folder2\Projects\The FILES\theFILES\" & FileName1 & "\"

ActiveWorkbook.SaveAs Filename:=Path & FileName2 & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled

1

这行代码有误: Path = "D:\folder1\folder2\Projects\The FILES\theFILES\"FileName1"\

...因为它包含了3个引号。我不确定您实际的路径应该是什么,因为操作系统中的路径名不会包含"字符。但是在VBA字符串赋值中,字符串必须仅在两个"字符之间:

"像这样"

如果您需要在字符串中直接包含"字符,则必须将引号加倍。例如,要将一个字符串分配给一个变量,使其读取'This string contains a " character',您需要编写:

Str = "This string contains a "" character"

请注意重复。
检查您的字符串,然后再试一次。

1
代码逐行运行,您需要首先拥有正确的行。
Dim Path As String
Dim FileName1 As String
Dim FileName2 As String

FileName1 = Range("B6").Value
FileName2 = Range("A1")
 Path = "D:\folder1\folder2\Projects\The FILES\theFILES\" & FileName1 & "\"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接