У меня там много кода, много циклов, а вставляю в другую процедуру - не работает, т.к. основной цикл у меня в другой процедуре - и его не видит
Что делать? .





For i ...
  'тело цикла
Next i

abracadabra писал(а):у меня тело цикла - конструкция With
With Application.Selection
Worksheets(1).Range(Cells(RowPos, 4), Cells(RowPos, 4)).Value = Laborwert.Parametername
Worksheets(1).Range(Cells(RowPos, 5), Cells(RowPos, 5)).Value = Laborwert.Zeit
Worksheets(1).Range(Cells(RowPos, 6), Cells(RowPos, 6)).Value = Laborwert.Datum
Worksheets(1).Range(Cells(RowPos, 7), Cells(RowPos, 7)).Value = Laborwert.Ergebnistext
Worksheets(1).Range(Cells(RowPos,, Cells(RowPos,
).Value = Laborwert.Normalwert
Worksheets(1).Range(Cells(RowPos, 9), Cells(RowPos, 9)).Value = Laborwert.Minwert
Worksheets(1).Range(Cells(RowPos, 10), Cells(RowPos, 10)).Value = Laborwert.Maxwert
Worksheets(1).Range(Cells(RowPos, 11), Cells(RowPos, 11)).Value = Laborwert.Messwert
Worksheets(1).Range(Cells(RowPos, 12), Cells(RowPos, 12)).Value = Laborwert.Einheit
Worksheets(1).Range(Cells(RowPos, 13), Cells(RowPos, 13)).Value = Laborwert.Gw
Worksheets(1).Range(Cells(RowPos, 14), Cells(RowPos, 14)).Value = Laborwert.Datum
End With
А цикл If - End If
Я пробовал выносить - но из этой процедуры основная данные не считывает


Sub FillFields(RowPos As Long, Laborwert As Тип)
With Laborwert
    Worksheets(1).Cells(RowPos, 4).Value = .Parametername
    Worksheets(1).Cells(RowPos, 5).Value = .Zeit
    Worksheets(1).Cells(RowPos, 6).Value = .Datum
    Worksheets(1).Cells(RowPos, 7).Value = .Ergebnistext
    Worksheets(1).Cells(RowPos, 
.Value = .Normalwert
    Worksheets(1).Cells(RowPos, 9).Value = .Minwert
    Worksheets(1).Cells(RowPos, 10).Value = .Maxwert
    Worksheets(1).Cells(RowPos, 11).Value = .Messwert
    Worksheets(1).Cells(RowPos, 12).Value = .Einheit
    Worksheets(1).Cells(RowPos, 13).Value = .Gw
    Worksheets(1).Cells(RowPos, 14).Value = .Datum
End With
End SubSub FillFields(RowPos As Long, Laborwert As Тип)
Dim i As Long
For i = 0 To 9
    Worksheets(1).Cells(RowPos, i + 4).Value = Laborwert.Item(i)
Next i
End Sub



       If Laborwert.Parametername = b1 Then
            With Laborwert
                Worksheets(1).Cells(RowPos, 4).Value = .Parametername
                ...
                Worksheets(1).Cells(RowPos, 13).Value = .Gw
                Worksheets(1).Cells(RowPos, 14).Value = .Datum
            End With
        End If
    
        RowPos = RowPos + 1
    
        If Laborwert.Parametername = b2 Then
            With Laborwert
                Worksheets(1).Cells(RowPos, 4).Value = .Parametername
                ...
                Worksheets(1).Cells(RowPos, 14).Value = .Datum
            End With
        End If
    
        RowPos = RowPos + 1
    
        If Laborwert.Parametername = b3 Then
            With Laborwert
                Worksheets(1).Cells(RowPos, 4).Value = .Parametername
                ...
                Worksheets(1).Cells(RowPos, 14).Value = .Datum
            End With
        End If
Dim DataAl As Object
Sub Patient()
    On Error Resume Next
    Dim i As Integer
    Dim Patient As Patient
    Dim Laborwert As Laborwert
    Dim Labordaten As Laborwerte
    Dim RowPos As Long
    
    Set DataAl = CreateObject("DataAL.Application")
    Set Patient = DataAl.Patient
    Set Labordaten = DataAl.Laborwerte
    'Если не созданы объекты, то и делать нечего. Можно вывести сообщение об этом
    If DataAl Is Nothing Or Patient Is Nothing Or Labordaten Is Nothing Then
        MsgBox "Не созданы объекты DataAL.Application"
        Exit Sub
    End If
    
    Patient.PatNr = InputPatNr()
    If (Patient.read() = 0) Then
        MsgBox ("Patient nicht gefunden")
    Else
        Worksheets(1).Range("E6").Value = "Patient:"
        Worksheets(1).Range("G6").Value = Patient.Vorname
        Worksheets(1).Range("H6").Value = Patient.Name
        Worksheets(1).Range("I6").Value = "geb. am"
        Worksheets(1).Range("J6").Value = Patient.Geburtsdatum
        PatNummer& = Patient.PatNr
        BesuchDatum = LetzterBesuch(PatNummer&)
        LabSelection = "PatNr=" + Str(PatNummer&)
        
        If BesuchDatum <> "" Then
            LabSelection = LabSelection + ";Datum>=" + BesuchDatum
        End If
        If Labordaten.Open(LabSelection) Then
            MsgBox ("Selektionsfehler")
        Else
            Worksheets(1).Select
            RowPos = 9
            Cells(8, 4).Value = "HAMATOLOGIE" 'a
            For Each Laborwert In Labordaten
                If Laborwert.Geraet = "" Then
                    ' Не понятно назначение этого цикла. По идее он должен перебирать каждый параметр
                    ' а он просто записывает одни и те-же данные столько раз, столько есть Parameter у объекта Laborwert
                    'For i = 1 To Laborwert.Parameter.count
                        ' следующая строка пишеться одно и то-же значениепри каждой итерации цикла
                        'Worksheets(1).Range(Cells(8, 4), Cells(8, 4)).Value = "HAMATOLOGIE" 'a
                        'RowPos = 9 ' а то здесь будет происходить перетирание данных из предыдущего Laborwert
                    With Laborwert
                        Cells(RowPos, 4).Value = .Parametername
                        Cells(RowPos, 5).Value = .Zeit
                        Cells(RowPos, 6).Value = .Datum
                        Cells(RowPos, 7).Value = .Ergebnistext
                        Cells(RowPos, 
.Value = .Normalwert
                        Cells(RowPos, 9).Value = .Minwert
                        Cells(RowPos, 10).Value = .Maxwert
                        Cells(RowPos, 11).Value = .Messwert
                        Cells(RowPos, 12).Value = .Einheit
                        Cells(RowPos, 13).Value = .Gw
                        Cells(RowPos, 14).Value = .Datum
                    End With
                    RowPos = RowPos + 1
                    'Next i
                End If
            Next Laborwert
            Labordaten.Close
        End If
    End If
    Set Labordaten = Nothing
    Set Patient = Nothing
    Set DataAl = Nothing
End Sub




Сейчас этот форум просматривают: Yandex-бот и гости: 9