Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.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
Arrays VBA通过一些计算值创建一个数字为1的数组_Arrays_String_Excel_Vba - Fatal编程技术网

Arrays VBA通过一些计算值创建一个数字为1的数组

Arrays VBA通过一些计算值创建一个数字为1的数组,arrays,string,excel,vba,Arrays,String,Excel,Vba,问题: 如何在不知道结束编号的情况下创建以下数组: myArray = Array(0, 1, 2, 3, 4) 例如,我可以在Python中执行类似的操作: myList = range(ending_number) 以及在Matlab中: myVector = 0:ending_number 更多详细信息: 我在Excel工作表中指定了一个路径,该工作表引用Linux服务器上的一个位置。我希望用户只需要指定Linux服务器理解的路径,还需要引用本地Windows机器和Linux服务器都

问题:

如何在不知道结束编号的情况下创建以下数组:

myArray = Array(0, 1, 2, 3, 4)
例如,我可以在Python中执行类似的操作:

myList = range(ending_number)
以及在Matlab中:

myVector = 0:ending_number
更多详细信息:

我在Excel工作表中指定了一个路径,该工作表引用Linux服务器上的一个位置。我希望用户只需要指定Linux服务器理解的路径,还需要引用本地Windows机器和Linux服务器都理解的位置。Linux服务器路径指定为

/home/shelf6/some/path/to/a/location/on/the/server
\\SB1\home_shelf6\some\path\to\a\location\on\the\server
Windows中相应的路径指定为

/home/shelf6/some/path/to/a/location/on/the/server
\\SB1\home_shelf6\some\path\to\a\location\on\the\server
我目前正在使用以下命令从一个转换到另一个:

WinJobLoc = Split(LinJobLoc, "/", -1, vbTextCompare)
WinJobLoc = "\\sb1\" & WinJobLoc(1) & "_" & WinJobLoc(2) & "\" & _
             Join(Application.WorksheetFunction.Index(WinJobLoc, 0, _
             Array(4, 5, 6, 7, 8, 9, 10, 11)), "\", vbTextCompare)
但是,由于我只能从
UBound(WinJobLoc)
中知道路径的长度,因此我不知道一种简单的方法来获取“
shelf6
后面的路径部分

有没有什么方法可以完成我想做的事情(即没有硬编码数组),或者有没有更简单的方法来完成整个事情?

考虑一下:

Sub ArrayCreator()
    Dim N As Long, i As Long
    N = Application.InputBox(Prompt:="Enter a number", Type:=1)
    ReDim myarray(0 To N) As Long
    For i = 0 To N
        myarray(i) = i
    Next i
End Sub

只需从linux路径重新读取,从一个等于已使用元素长度之和的偏移量开始,加上斜杠,交换路径字符

Dim ArrWinJobLoc() As String, WinJobLoc As String

ArrWinJobLoc = Split(LinJobLoc, "/")

WinJobLoc = "\\sb1\" & ArrWinJobLoc(1) & "_" & ArrWinJobLoc(2) & _
    Replace$(Mid$(LinJobLoc, 3 + Len(ArrWinJobLoc(1)) + Len(ArrWinJobLoc(2))), "/", "\")

我可能看错了问题,但这是否足够:

Sub stringModify()
Dim LinJobLoc As String
Dim WinJobLoc As String

LinJobLoc = "/home/shelf6/some/path/to/a/location/on/the/server"

LinJobLoc = Replace(Right(LinJobLoc , Len(LinJobLoc ) - 1), "/", "\")

WinJobLoc = "\\SB1\" + Replace(LinJobLoc, "\", "_", , 1)
End Sub
但这并不能回答您的问题,因为您有两个选择:

一种是在阵列上使用ReDim


第二个选项是不使用数组,而是使用集合

这很好,但是您是否打算将第一个
LinJobLoc
改为
s1
?如果没有,请指定什么是
s1
,以便我可以将您的解决方案标记为答案。哦,是的,这是测试,然后我添加了您的值。它现在更新了,我在测试中使用了s1作为字符串1。如果
WinJobLoc
命令是
WinJobLoc=“\\SB1\”+Replace(Replace(LinJobLoc,“/”,“\”,“\”,“\”,”,2,1)
,则更简单。这也将允许以后引用
LinJobLoc
(假设第二个
LinJobLoc
命令已被删除,因为它与该更改无关)。这确实完成了我试图做的事情,但我希望能够找到实现最终目的的最简洁的方法。