VBA Workbook en worksheetfunctie *

Pagina: 1
Acties:

  • jordan2k
  • Registratie: Juli 2001
  • Laatst online: 26-11 17:54
LS,

Vandaag liep ik op het werk tegen het volgende probleem aan en ben opzoek naar een goed werkende oplossing. heb al even op MSDN en google gekeken maar daar zag ik niet echt de oplossing.

Probleem en oorzaak:
onder explorer kan je een vinkje zetten show file extention fore known file types.
dit resulteerd er in dat VBA voor Excel waneer je bij een workbook("Omzetdata") hebt staan dat hij een error code 9 geeft.
dit kan ik dan alleen oplossen door "Omzetdata" te vervangen voor "Omzetdata.xls".

Omdat niet iedere gebruiker de zelfde windows instellingen heeft is dit niet echt wenselijk en om bij de installatie handleiding die toch nooit gelezen wordt de instructies te vermelden hoe en wat ze moeten aanpassen voordat het werkt is ook niet echt wenselijk.

Weet iemand een oplossing die ik zou kunnen integreren in het VBA macro ?

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Verwijderd

Kun je specifiek aangeven wanneer het probleem optreedt? Welke methode gebruik je waarbij het fout gaat? Waar staat "Omzetdata(.xls)"? In je code? In een workbook? In Explorer?
Misschien dat het plaatsen van (een deel van) de code ook wel verheldert.

  • Moirraine
  • Registratie: Mei 2008
  • Laatst online: 13-02-2024
Een stukje code van wat je nu gebruikt zou inderdaad makkelijk zijn en/of een stukje context. Misschien dat je wat hebt aan het volgende. ik ga er overigens wel vanuit dat je het bestand dynamisch opzoekt.

Visual Basic:
1
2
3
4
5
6
7
Dim strBestandsnaam as string

strBestandsnaam = 'Hoe je het normaal ook opzoekt

If Right$(strBestandsnaam,4) <> ".xls" Then
    strBestandsnaam = strBestandsnaam & ".xls"
End if


Een andere optie zou kunnen zijn (hiermee doorloop je de hele map op zoek naar het bestand en past het al dan niet aan):

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
32
33
34
35
36
37
38
39
40
Private Sub ZoekBestand()

    Dim objFSO As Object    'object om filesystem objects te herkennen
    Dim objMap As Object    'Object om de map te definieeren
    Dim objFile As Object   'Object om de files te setten
    Dim varFile As Variant  'De files zelf
    Dim strBestandsnaam As String 'De naam die je gaat gebruiken
    
    On Error GoTo Fout
    
    Set objFSO = CreateObject("Scripting.filesystemobject")
    Set objMap = objFSO.GetFolder("C:\jouw map\") 'aanpassen naar de map waar hij hoort te staan, vergeet de laatste backslash niet
    Set objFile = objMap.Files
    
    For Each varFile In objFile
        'Zoek het excelbestand, kijk naar de eerste 9 letters
        If Left$(varFile.Name, 9) = "Omzetdata" Then
            'zijn de laatste 4 letters .xls?
            If right$(varFile.Name, 4) <> ".xls" Then
                'nee, het is "omzetdata", plak er .xls achter
                strBestandsnaam = varFile.Name & ".xls"
            Else
                'ja, gebruik de naam van het bestand
                stbestandsnaam = varFile.Name
            End If
            'Het heeft geen nut meer om de rest van de files te scannen, je hebt hem al gevonden
            Exit For
        End If
    Next varFile

    'doe hier met de bestandnaam wat je wil
    'jouw code
    Exit Sub

Fout:

    MsgBox Err.Number & " - " & Err.Description, vbOKOnly + vbCritical, "Fout: Zoekbestand"
    Err.Clear
    
End Sub

[ Voor 1% gewijzigd door Moirraine op 25-08-2009 09:56 . Reden: foutje ]


  • jordan2k
  • Registratie: Juli 2001
  • Laatst online: 26-11 17:54
Verwijderd schreef op maandag 24 augustus 2009 @ 20:34:
Kun je specifiek aangeven wanneer het probleem optreedt? Welke methode gebruik je waarbij het fout gaat? Waar staat "Omzetdata(.xls)"? In je code? In een workbook? In Explorer?
Misschien dat het plaatsen van (een deel van) de code ook wel verheldert.
In onderstaande code gaat het fout, dit is wel te verhelpen met de methodiek die [Moirraine] opgeeft.
Visual Basic:
1
Cells(Ycat + 2 + x, Xcat + 2).Value = Workbooks("Omzetgegevens.xls").Sheets(1).Cells(y2, 3 + x).Value


Bedankt