我一直在为VBA中的Solidworks编写一个宏,有一点我想按照以下方式重新排列图纸中的纸张 - 如果任何纸张被命名为&#34 ; CUT",把那张纸放在前面。 Solidworks API为rearrange the sheets提供了一种方法,但它需要按照正确的顺序排列一系列工作表名称 - 足够公平。获取工作表名称的方式看起来是method。
所以,我试着写一个小函数来按照我想要的方式重新排列纸张。我尝试使用的函数调用和函数显示在这里
函数调用
Dim swApp As SldWorks.SldWorks
Dim swDrawing As SldWorks.DrawingDoc
Dim bool As Boolean
Set swApp = Application.SldWorks
Set swDrawing = swApp.ActiveDoc
.
.
.
bool = swDrawing.ReorderSheets(bringToFront(swDrawing.GetSheetNames, "CUT"))
功能定义
Private Function bringToFront(inputArray() As String, _
stringToFind As String) As String()
Dim i As Integer
Dim j As Integer
Dim first As Integer
Dim last As Integer
Dim outputArray() As String
first = LBound(inputArray)
last = UBound(inputArray)
ReDim outputArray(first to last)
For i = first To last
If inputArray(i) = stringToFind Then
For j = first To (i - 1)
outputArray(j + 1) = inputArray(j)
Next j
For j = (i + 1) To last
outputArray(j) = inputArray(j)
Next j
outputArray(first) = stringToFind
End If
Next i
bringToFront = outputArray
End Function
我得到的错误是"类型不匹配:数组或用户定义的类型预期"在函数调用行上。我已经做了很多搜索,我认为我搞砸了与静态和动态数组有关,但我还没有能够自己找到解决方案。
答案 0 :(得分:0)
除了评论中建议的更正之外,正在发生的是
行bringToFront(j + 1) = inputArray(j)
和
bringToFront(first) = stringToFind
编译器认为你试图递归调用函数bringToFront。这就是它抱怨错误消息中的参数数量的原因。要解决这个问题,只需创建另一个数组作为本地数组变量,使用不同的名称,让我们将其命名为“ret”,适当填充,并在返回之前将其分配。
编辑:此外,最好将数组声明为Variant类型,以避免VB6和.Net之间的互操作性问题。这是最后一期
Private Function bringToFront(inputArray As Variant, _
stringToFind As String) As Variant
Dim i As Integer
Dim j As Integer
Dim first As Integer
Dim last As Integer
first = LBound(inputArray)
last = UBound(inputArray)
Dim ret() As String
ReDim ret(first To last)
For i = first To last
If inputArray(i) = stringToFind Then
For j = first To (i - 1)
ret(j + 1) = inputArray(j)
Next j
ret(first) = stringToFind
End If
Next i
bringToFront = ret
End Function