Во-первых, вот ПИК на моем докладе в режиме конструктора:Report от ControlSource не стреляя
Основной запрос для отчета возвращает значения следующим образом:
Allen Nelli 3:A,5:B,7:A,8:A, etc.
Breton Micheline 1:A,3:A,5:B,7:A, etc
Caporale Jody 1:A,3:A,5:B,7:A, etc
Мне пришлось использовать подзапрос, чтобы получить третье поле, которое объединяет номер : письмо комбинаций. Эти значения фактически представляют день месяца и обозначение для конкретного изменения графика. Таким образом, в основном, за определенный месяц каждый человек работает назначенный сдвиг, обозначенный значением дня.
Целью является вызов пользовательской публичной функции с именем PopulateTextboxes (Value as String), которая будет вызываться из первого текстового поля в отчете из свойства ControlSource текстового поля. Третье поле в запросе на самом деле называется Expr1, и оно передается в качестве параметра функции. Эта функция предназначена для заполнения всех текстовых полей с соответствующим обозначением буквы: A или B или C или D и т. Д. Сама функция не запускается, когда я запускаю отчет.
Функция выглядит следующим образом:
Public Function PopulateTextboxes(Expr As String) As String
'Each element of Expr should be a number followed by a colon followed by a letter: 10:A,12:B,15:C, etc.
Dim shiftData() As String
Dim Data As Variant
Dim i As Integer
Dim j As Integer
Dim temp() As String
Dim txt As TextBox
Dim rpt As Report
Dim strCtrl As String
If Expr = "" Then Exit Function
If IsNull(Expr) Then Exit Function
shiftData = Split(Expr, ",")
If UBound(shiftData) > 0 Then
'Make a 2D array
ReDim Data(UBound(shiftData), 2)
'Load up 2D array
For i = 0 To UBound(shiftData) - 1
If shiftData(i) <> "" Then
temp = SplitElement(shiftData(i), ":")
Data(i, 0) = temp(0)
Data(i, 1) = temp(1)
End If
Next i
Set rpt = Reports.item("Multi_Locations_Part_1")
If UBound(days) = 0 Then
MsgBox "days array not populated"
Exit Function
End If
'Populate each Textbox in the Multi_Locations_Part_1 Report
For i = 1 To UBound(days)
strCtrl = "txtDesig_" & CStr(i)
Set txt = rpt.Controls.item(strCtrl)
For j = 0 To UBound(Data) - 1
If Data(j, 0) = days(i) Then
txt.Value = Data(j, 1) 'A,B,C,etc.
Exit For
End If
Next j
Next i
End If
PopulateTextboxes = Expr
End Function
Private Function SplitElement(Value As String, Delim As String) As String()
Dim result() As String
result = Split(Value, Delim)
SplitElement = result
End Function
Пожалуйста посоветуйте.
Привет, то, что у вас там, установит значение этого поля для возврата функции PopulationTextboxes, если это ничего не возвращает, тогда ничего не будет. Вам нужно вызвать его, когда откроется отчет, но я не уверен, что он будет работать так, я думаю, вам нужно будет иметь отдельные поля для каждого текстового поля, а затем просто привязать их к этому, так что имя, op1, op2, op3, op4 и т. д. –
FYI, функция ничего не возвращает, но даже при этом, когда я изменил функцию так, чтобы она что-то возвращала, функция все еще не срабатывала. Интересно, что даже когда я не вызываю функцию и просто устанавливаю ControlSource первого текстового поля только на Expr1, запустите отчет, чтобы текстовое поле не заполнялось данными. Я в тупике. – Alan
Можете ли вы показать код функции? –