• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

(VBA) Probleem met .Resize

Status
Niet open voor verdere reacties.

timvdp314

Gebruiker
Lid geworden
16 apr 2019
Berichten
10
Beste allemaal,

In het proces om het verzamelen van data van verschillende werkbladen te automatiseren, stuitte ik op een probleem waar ik zelf niet verder mee kan komen. De sub ziet er als volgt uit:

Code:
Sub Gather()

Dim StallIndex As Integer

For StallIndex = 2 To 4

SSR = "A1:AT40"
EmptyCell(1) = ""
EmptyCell(2) = " "
EmptyCell(3) = "  "

'Bepaal actief werkblad nummer
Dim n As Integer
n = ActiveSheet.Index

'Vind het juiste stalnummer
Dim CorrectRange As Range
Set CorrectRange = Sheets(n).Range(SSR).Find("Stal " & StallIndex & ": Leeftijd (weken)", lookat:=xlPart)

'Bepaal de rij waarin het correcte stalnummer zich bevindt
Dim CorrectRow As Range
Set CorrectRow = Range(CorrectRange.Row & ":" & CorrectRange.Row)

'Aantal kolommen waarin data aanwezig is
Dim CorrectWidth As Integer
CorrectWidth = Application.WorksheetFunction.CountIfs(CorrectRow, ">0", CorrectRow, "<101")

'Aantal rijen waarin data aanwezig is
Dim CorrectHeight As Integer
CorrectHeight = 0

For h = 1 To 100
 If IsInArray(Sheets(n).Range(CorrectRange.Address).Offset(h, 0).Value, EmptyCell) = False Then
    CorrectHeight = CorrectHeight + 1
 Else
    Exit For
 End If
Next h
  
 
Dim LocalSSR As Range
Set LocalSSR = Range(CorrectRange.Address).Resize(CorrectHeight, CorrectWidth)
  
Dim SearchItem() As String
ReDim SearchItem(1 To CorrectHeight)

For g = 1 To CorrectHeight
 SearchItem(g) = Sheets(n).Range(CorrectRange.Address).Offset(g, 0).Value
Next g

For j = 1 To CorrectHeight
 On Error Resume Next
 
 Dim StartCell1 As Range
 Set StartCell1 = Sheets(n).Range(LocalSSR).Find(SearchItem(j), lookat:=xlPart)

 Dim SourceCell1 As Range

 If StartCell1 Is Nothing Then
    MsgBox ("Een item van " & SearchItem(j) & " kon niet gevonden worden. Proces wordt afgebroken.")
 End If

 For i = 1 To CorrectWidth
    Set SourceCell1 = Sheets(CStr(StartCell1.Offset(-j, i))).Range(LocalSSR).Find(SearchItem(j), lookat:=xlPart)
    If SourceCell1 Is Nothing Then
        MsgBox ("Kon " & SearchItem(j) & " niet vinden op werkblad " & Sheets(CStr(StartCell1.Offset(-j, i))).Name & ". Proces wordt afgebroken.")
        Exit For
    End If
    
    Sheets(n).Range(StartCell1.Address).Offset(0, i).Value = Sheets(CStr(StartCell1.Offset(-j, i))).Range(SourceCell1.Address).Offset(0, StallIndex - 1).Value
 Next i
Next j

Next StallIndex

End Sub

excelvraagje.png

De essentie van de macro is het verzamelen van alle benodigde gegevens, zoals aangegeven in de tabellen hierboven. Eerst gebruikte ik de 'SSR', een globaal zoekveld voor alle .find functies die ik gebruik, maar aangezien alle namen drie keer voorkomen is dat geen optie. Daarom gebruik ik de variabele 'CorrectRange' om het adres van de rij waarin het stalnummer staat te vinden en vervolgens het zoekgebied te vergroten tot CorrectHeight en CorrectWidth. Het probleem is echter dat dit niet werkt; LocalSSR geeft namelijk als waarde 'leeg' aan.

Heeft iemand hier misschien een oplossing voor?
 
Ik denk niet dat iemand de moeite gaat nemen om zo uit te zoeken wat je allemaal doet.
Beter plaats je je document.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan