[VBA] Naam van oude sheet vergelijken met nieuwe

Pagina: 1
Acties:

  • DarkShadow
  • Registratie: Juli 2000
  • Laatst online: 20-08 23:09
Hallo, ik heb een nogal rot probleem, als ik een nieuwe sheet toevoeg wil ik eerst kijken of er al een sheet is met ongeveer dezelfde naam, dwz, alleen de datum verschilt. Dit wil ik doen om in de nieuwe sheet de informatie van de oude sheet (in het geval van hetzelfde natuurlijk) over te nemen, zodat ik een lange chart kan maken. Dit laatste is me al wel gelukt, maar zonder de boven beschreven check, het werkt alleen wanneer de laatst toegevoegde sheet hetzelfde is als de nieuwe:

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
If Len(Dir(naarbestandnaam)) > 0 Then

Dim dubbelcheck As String 'hiermee kijk ik nu of de sheets bij elkaar horen, door gewoon naar een cel in de nieuwe sheet te kijken en deze te vergelijken met een warde in de oude sheet.

Dim nrofoldshots As Integer 'lengte van de range in de oude sheet
nrofoldshots = naarbestand.Worksheets(2).Cells(4, 2)

dubbelcheck = naarbestand.Worksheets(1).Cells(6, 2)
For Each BestaandeSheet In naarbestand.Worksheets
    If naarbestand.Worksheets(2).Cells(6, 2) = dubbelcheck Then
        For i = 1 To nrofoldshots
        naarbestand.Worksheets(NieuweNaam).Cells((i + 9), 1).Value = naarbestand.Worksheets(2).Cells((i + 9), 1).Value
        Next i
        
        For i = 1 To nrofshots 'aantal kolommen
        naarbestand.Worksheets(NieuweNaam).Cells((i + 9 + nrofoldshots), 1).Value = Application.WorksheetFunction.Max(uitbestand.Worksheets(1).Range(uitbestand.Worksheets(1).Cells(26, i), uitbestand.Worksheets(1).Cells(nrofpoints, i)))
        Next i
        naarbestand.Worksheets(NieuweNaam).Cells(4, 2).Value = (naarbestand.Worksheets(2).Cells(4, 2).Value + uitbestand.Worksheets(1).Cells(10, 2))
    End If
Next
    Application.DisplayAlerts = False
    naarbestand.Worksheets(2).Delete
    naarbestand.Charts(1).Delete 'testen voor bestanden met meer dan 2 worksheets
    Application.DisplayAlerts = True
Else

For i = 1 To nrofshots 'aantal kolommen
   naarbestand.Worksheets(1).Cells((i + 9), 1).Value = Application.WorksheetFunction.Max(uitbestand.Worksheets(1).Range(uitbestand.Worksheets(1).Cells(26, i), uitbestand.Worksheets(1).Cells(nrofpoints, i)))
Next i

End If


Mijn sheetnames zijn als volgt opgebouwd: informatie dag maand. Het informatie gedeelte moet dus overeenkomen.
Nu dacht ik dat het ongeveer zo wel zou kunnen:

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
dim vergelijkstring as string
dim dubbelcheck as string
dim bestaandesheet as worksheet
dubbelcheck = waarde in nieuwe sheet.cell(ergens)

If Len(Dir(naarbestandnaam)) > 0 Then 'check of er uberhaupt geen nieuw bestand is aangemaakt

  For Each BestaandeSheet In naarbestand.Worksheets
  bestaandesheet.name = vergelijkstring
       if len(eerstegedeeltenaam van vergelijkstring)  = dubbelcheck then
                   kopieer meuk uit oude naar nieuwe sheet
       
                   kopieer meuk uit geopende bestand x aantal celletjes naar beneden
       end if
  next
  delete oude meuk

else

doe normaal en kopieer meuk alleen uit geopende bestand

end if


Het probleem is dat dit alleen niet werkt, aangezien de datum van de sheet erachter ook veranderd in lengte, en de lengte van de informatie in de sheetnaam is ook niet altijd hetzelfde. Zijn er nog andere manieren, of zit ik zo wel op de goede weg.
Iedere suggestie is welkom :), alvast bedankt.

[ Voor 6% gewijzigd door DarkShadow op 23-09-2005 11:40 ]


  • onkl
  • Registratie: Oktober 2002
  • Laatst online: 22:59
Je weet de lengte van je Informatiedeel. dus
Bijvoorbeeld:
Visual Basic:
1
2
'nepcode
Left(bestaandesheet.name,Len(dubbelcheck)) = dubbelcheck

  • DarkShadow
  • Registratie: Juli 2000
  • Laatst online: 20-08 23:09
Ik kom dr net achter idd dat ik die gewoon weet! Bedankt, ga het direct uitproberen...

edit: En het werkt :)

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
For Each BestaandeSheet In naarbestand.Worksheets
    If Left(BestaandeSheet.Name, Len(dubbelcheck)) = dubbelcheck Then
       
        nrofoldshots = naarbestand.Worksheets(BestaandeSheet.Name).Cells(4, 2)
        For i = 1 To nrofoldshots
        naarbestand.Worksheets(1).Cells((i + 9), 1).Value = naarbestand.Worksheets(BestaandeSheet.Name).Cells((i + 9), 1).Value
        Next i

'etc etc

next

[ Voor 73% gewijzigd door DarkShadow op 23-09-2005 14:59 ]