Foutmelding: "kan het benoemde argument niet vinden"

Status
Niet open voor verdere reacties.

Erik191283

Gebruiker
Lid geworden
13 mei 2015
Berichten
49
Ik heb een bestand waar ik diverse bewerkingen op wil doen. Dit bestand krijg ik maandelijks aangeleverd, maar voor mijn bewerkingen is het handiger als de formules er uit zijn.

Omdat het een bestand betreft met een fors (en steeds verder oplopend) aantal tabbladen wil ik dit graag met een loopje oplossen.

Onderstaande loop heb ik nu gemaakt, maar ik krijg nu de foutmelding:

Compileerfout:
Kan het benoemde argument niet vinden

Als ik dan op OK klik krijg is het woord Paste geselecteerd. Iemand enig idee wat er mis gaat?
(Waarbij wel handig is om te zeggen dat ik mijn kennis van VBA vooral van het internet heb gehaald en bepaald geen specialist ben...)

Code:
For Each wsSingleSheet In wbSingleWorkbook.Sheets
            
            wsSingleSheet.UsedRange.Copy_
            wwsSingleSheet.PasteSpecial Paste:=xlPasteValues
            
                       
        Next wsSingleSheet
 
De fout veranderd in elk geval...

Krijg nu dat er syntaxis fout is...

Code:
For Each wsSingleSheet In wbSingleWorkbook.Sheets
            
            wsSingleSheet.UsedRange.Copy _
            wsSingleSheet.PasteSpecial Paste:=xlPasteValues
                                 
        Next wsSingleSheet
 
Haakjes om de argumenten:
Code:
wsSingleSheet.PasteSpecial(Paste:=xlPasteValues)
 
En dan ben ik weer terug op de oude foutmelding...

Code:
For Each wsSingleSheet In wbSingleWorkbook.Sheets
            
            wsSingleSheet.UsedRange.Copy _
            wsSingleSheet.PasteSpecial(Paste:=xlPasteValues)
            
           
        Next wsSingleSheet
 
Plaats de volledige Sub in plaats van alleen die paar regeltjes.
 
De volledige sub is ook hier van het forum afkomstig.

Er wordt info uit 25 bestanden opgehaald, wat allemaal onder elkaar in Excel moet komen.
In eerste instantie werkte alles goed, tot er in de oorspronkelijke tabbladen een verwijzing ingebouwd werd naar andere tabbladen in hetzelfde bestand. Die verwijzing klopte na importeren niet meer, terwijl ik wel die waarde nodig had.
Daarom wilde ik nu eerst het blad kopieren en plakken waarde kiezen om te zorgen dat er in mijn totaalbestand alleen maar waardes binnenkomen en geen formules.

Bij deze overigens al bedankt voor jullie inspanningen om mee te kijken!

Code:
Sub VoegExcelBestandenSamenIn1NieuwBlad()
' [TOPIC=848630///][NOHTML][rml][ Excel] Meerdere bestanden samenvoegen[/rml][/NOHTML][/TOPIC]
' deel 2

Application.ScreenUpdating = False

Stap1

Dim wbSingleWorkbook As Excel.Workbook, wbFinalWorkbook As Excel.Workbook
Dim wsSingleSheet As Excel.Worksheet, wsFinalSheet As Excel.Worksheet
Dim strPath As String, strWorkbook(500) As String ' max 500 bestanden
Dim intCounter As Integer, n As Integer
Dim Answer As VbMsgBoxResult

    strPath = "J:\Scans\Synergy_Import\NIET WEGGOOIEN\Riam\"        ' Map met .xls-bestanden
    intCounter = 1              ' teller
    strWorkbook(intCounter) = Dir(strPath & "*.xls")
    
    Do While strWorkbook(intCounter) <> ""
    
        intCounter = intCounter + 1
        strWorkbook(intCounter) = Dir
        
    Loop
    
    intCounter = intCounter - 1 ' want de laatste is leeg
    Set wbFinalWorkbook = Workbooks.Add
    Application.DisplayAlerts = False
    
    Do While wbFinalWorkbook.Sheets.Count > 1
    
        wbFinalWorkbook.Sheets(1).Delete
    
    Loop                        ' We hebben maar 1 blad nodig
    
    Application.DisplayAlerts = True
    Set wsFinalSheet = wbFinalWorkbook.Sheets(1)
        
    On Error GoTo Einde         ' Error trapping AAN
    
    For n = 1 To intCounter
    
        Set wbSingleWorkbook = Workbooks.Open(Filename:=strPath _
            & strWorkbook(n), ReadOnly:=True)
            
        For Each wsSingleSheet In wbSingleWorkbook.Sheets
            
            wsSingleSheet.UsedRange.Copy _
            wsSingleSheet.PasteSpecial(Paste:=xlPasteValues)
            
            wsSingleSheet.UsedRange.Copy _
                Destination:=wsFinalSheet.Cells _
                (wsFinalSheet.Cells.SpecialCells _
                (xlCellTypeLastCell).Row + 1, 1)
            
        Next wsSingleSheet

        wbSingleWorkbook.Close SaveChanges:=False
    
    Next n
    
    On Error GoTo 0             ' Error trapping UIT
    
Einde:

    Select Case Err.Number      ' Foutmelding 1004 is
                                ' hoogstwaarschijnlijk veroorzaakt
        Case 1004               ' door iets te plakken dat boven
                                ' de 65536 rijen uit zou komen
            Answer = MsgBox(Err.Description & Chr(13) & Chr(13) & _
                "Waarschijnlijk wordt dit bestand te groot..." & _
                Chr(13) & "Verder gaan op nieuw blad?", _
                vbCritical Or vbYesNo, "Error " & Err.Number & _
                ": " & Err.Description)
            
            If Answer = vbYes Then
            
                Set wsFinalSheet = wbFinalWorkbook.Sheets.Add
                Resume
                
            End If
            
        Case 0                  ' Niks aan 't handje :-)
            
        Case Else               ' Overige foutmeldingen
        
            MsgBox Err.Description, _
                vbCritical Or vbOKOnly, "Error " & Err.Number & _
                " in bestand " & n
    
    End Select
    
    Set wbSingleWorkbook = Nothing
    Set wbFinalWorkbook = Nothing
    Set wsSingleSheet = Nothing
    Set wsFinalSheet = Nothing



Application.ScreenUpdating = True

End Sub
 
Zo dan:

Code:
    wsSinglesheet.Cells.Copy
    wsSinglesheet.Cells.PasteSpecial Paste:=xlPasteValues
    Application.CutCopyMode = False
 
Vereenvoudiging van Code doet ook vaak wonderen:

Code:
Sub M_snb()
  Application.ScreenUpdating = False
  c00 = "J:\Scans\Synergy_Import\NIET WEGGOOIEN\Riam\"
  c01 = Dir(c00 & "*.xls")
  y = 1
    
  Do While c01 <> ""
    With GetObject(c00 & c01)
      For Each it In .Sheets
        sn = it.UsedRange
        Sheets(1).Cells(y, 1).Resize(UBound(sn), UBound(sn, 2)) = sn
        y = y + UBound(sn)
      Next
      .Close 0
    End With
    c01 = Dir
  Loop
End Sub
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan