【发布时间】:2016-07-16 20:20:30
【问题描述】:
我在将数组从用户定义的类型传递给函数时遇到问题:
定义类型(在标准模块中):
Public Type JPrinters
Available() As String
Default As String
End Type
列出所有可用打印机的功能(标准模块):
Function ListPrinters() As JPrinters
Dim GetPrinters As Object: Set GetPrinters = CreateObject("WScript.Network").EnumPrinterConnections
Dim i As Integer
Dim j() As String 'Array of Printer Names
ReDim j(0 To GetPrinters.Count \ 2 - 1)
For i = 0 To UBound(j)
'Load this array element with the Name from the list
j(i) = GetPrinters.Item(i * 2 + 1)
Next i
Dim k As JPrinters
With k
.Available = j
.Default = Application.ActivePrinter
End With
ListPrinters = k
End Function
Sub 通过数组填充 ComboBox(正常工作 - std 模块):
Sub PopulateComboBoxBy2DArray(Ctrl As Control, ByVal Source_1D_2D_Array As String, Optional DefaultValue As String)
Ctrl.List = Source_1D_2D_Array
If DefaultValue Then
Ctrl.Value = DefaultValue
End If
End Sub
然后我尝试调用 Workbook_Open 上的所有内容:
Private Sub Workbook_Open()
Dim Prt As JPrinters
Prt = ListPrinters
PopulateComboBoxBy2DArray List1.PrinterList, Prt.Available, Prt.Default
End Sub
- 所有模块都定义了
Option Explicit。
它只是给出了我的编译错误:类型不匹配。我尝试了很多,但无法弄清楚为什么它不接受 Prt.Available 数组。有什么想法吗?
(我也很乐意提供有关代码的任何其他建议。)
谢谢,
J
【问题讨论】:
-
你试过“ByVal Source_1D_2D_Array As Variant”吗?
-
是的,但它也不起作用 - 整行 PopulateComboBoxBy2DArray List1.PrinterList, Prt.Available, Prt.Default 被选中,Watch 显示
。