Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 另存为集合列表中的随机文件名_Vba_Random_Filenames - Fatal编程技术网

Vba 另存为集合列表中的随机文件名

Vba 另存为集合列表中的随机文件名,vba,random,filenames,Vba,Random,Filenames,我正试图保存一个文件,但它是一个小列表中的随机名称。这就是我到目前为止所做的: Option Explicit Option Base 1 Public Sub SaveToDrive() Dim categorys(5) As String categorys(1) = "Adam" categorys(2) = "James" categorys(3) = "Henry" categorys(4) = "William" categorys(5) = "Keith" ThisWorkb

我正试图保存一个文件,但它是一个小列表中的随机名称。这就是我到目前为止所做的:

Option Explicit
Option Base 1

Public Sub SaveToDrive()

Dim categorys(5) As String
categorys(1) = "Adam"
categorys(2) = "James"
categorys(3) = "Henry"
categorys(4) = "William"
categorys(5) = "Keith"

ThisWorkbook.SaveAs Filename:="e:\" & categorys(Int((5 - 1 + 1) * Rnd + 1)).Name

End Sub
目前,这会在倒数第二行的“categorys”上返回一个无效的限定符错误

我对VBA完全陌生,但我想知道这是否可能,或者是否有其他/更好的方法来实现它


谢谢。

请参见下面的工作示例。几点注意:

  • 默认情况下,VBA中的数组基于0。这可以通过模块标题中的
    选项库1
    选项库0
    进行更改,但最安全的方法是在声明数组时简单地指定下限和上限(
    小类别(5)
    -->
    小类别(1到5)

  • 我不确定你的
    -1+1
    有什么作用,所以我把它去掉了:
    Int((5-1+1
    -->
    Int((5

  • 我拆分了表达式并添加了一些中间变量,以便以后更易于阅读和维护(
    &categories(Int((5-1+1)*Rnd+1))。Name
    -->
    Dim RandomIndex…

  • 字符串不是VBA中的对象,因此它们不能具有类似
    .Name



字符串没有Name属性。为什么在行的末尾有一个
.Name
?可能是因为他“对VBA完全陌生”
Public Sub SaveToDrive()
    Dim categorys(1 To 5) As String
    categorys(1) = "Adam"
    categorys(2) = "James"
    categorys(3) = "Henry"
    categorys(4) = "William"
    categorys(5) = "Keith"

    Dim RandomIndex As Integer
    RandomIndex = Int((5 * Rnd) + 1)

    Dim FName As String
    FName = categorys(RandomIndex)

    ThisWorkbook.SaveAs FileName:="e:\" & FName

End Sub