# Call

call 控制语句可调用必须由先前的 sub 语句定义的子例程。

语法：

Call name ( [ paramlist ])

参数：

参数

| 参数 | 说明 |
| --- | --- |
| name | 子例程的名称。 |
| paramlist | 实际参数逗号分隔符列表，用以发送至子例程。此列表中每个项目都可为字段名，变量或任意表达式。 |

由一条 call 语句调用的子例程必须由在脚本执行期间更先遇到的 sub 语句定义。

参数会复制到子例程中，此外，如果在 call 语句中的参数是一个变量而非表达式，重新将其复制到现有子例程中。

限制：

* 由于该 call 语句是一个控制语句，以分号或换行符结束，因此不能跨越行边界。

* 当在控制语句中用 `Sub..end sub` 定义子例程时，例如 `if..then`，则只能从同一控制语句中调用该子例程。

示例：

该示例列出文件夹及其子文件夹中所有和 Qlik 相关的文件，并将文件信息存储在表格中。假设您已创建了指向文件夹的名为 Apps 的数据连接。

参考文件夹调用了 DoDir 子例程，将 'lib://Apps' 作为参数。在子例程内，存在递归调用 `Call DoDir (Dir)`，让函数在子文件夹中递归式查找文件。

```
sub DoDir (Root)
   For Each Ext in 'qvw', 'qvo', 'qvs', 'qvt', 'qvd', 'qvc', 'qvf'
      For Each File in filelist (Root&'\*.' &Ext)
          LOAD
             '$(File)' as Name, 
             FileSize( '$(File)' ) as Size, 
             FileTime( '$(File)' ) as FileTime
          autogenerate 1;
      Next File
   Next Ext   
   For Each Dir in dirlist (Root&'\*' )
      Call DoDir (Dir)
   Next Dir
End Sub

Call DoDir ('lib://Apps')
```