VBA Macro werkt niet bij Event open

Status
Niet open voor verdere reacties.

Wimveer

Gebruiker
Lid geworden
11 sep 2020
Berichten
15
Ik heb een werkende macro geplakt in Private Sub Workbook_Open maar nu krijg ik een foutmelding "Het subscript valt buiten het bereik" bij openen. Wat doe ik verkeerd?


Hier volgt het eerste stuk van de code waarop het nu al vastloopt.


Private Sub Workbook_Open()


'
' Inlezen_data_belgie Macro
'

'
Application.DisplayAlerts = False

ChDir "G:\CrosbyIP\Leveringen"
Workbooks.Open Filename:="G:\CrosbyIP\Leveringen\leveringen.xlsm"

' Selection.ClearContents

Sheets("België ").Select
ActiveSheet.UsedRange.Delete

Sheets("België leveringen").Select
ActiveSheet.UsedRange.Delete
 
Hoort die spatie achter België daar wel in?

Sheets("België ").Select
 
Chdir is overbodig.
Iedere 'select' is overbodig in VBA.

Code:
Private Sub Workbook_Open()
 Workbooks.Open "G:\CrosbyIP\Leveringen\leveringen.xlsm"

 Sheets("België").UsedRange.clearcontents
 Sheets("België leveringen").UsedRange.clearcontents
End Sub
 
@edmoor: Ja de spatie hoort daar wel. Wanneer ik gewoon, niet via event, de macro laat lopen dan hikt hij niet daarop.

@snb: het uitzetten van "Chdir" en "Select" brengt niets. Ook met jouw regels krijg ik dezelfde foutmelding.

Private Sub Workbook_Open()


'
' Inlezen_data_belgie Macro
'

'
Application.DisplayAlerts = False

' ChDir "G:\CrosbyIP\Leveringen"
Workbooks.Open Filename:="G:\CrosbyIP\Leveringen\leveringen.xlsm"

' Selection.ClearContents

'Sheets("België ").Select
'ActiveSheet.UsedRange.Delete

'Sheets("België leveringen").Select
'ActiveSheet.UsedRange.Delete


Sheets("België ").UsedRange.ClearContents
Sheets("België leveringen").UsedRange.ClearContents
Sheets("België openstaande orders").UsedRange.ClearContents


'Sheets("België openstaande orders").Select
'ActiveSheet.UsedRange.Delete
 
De namen van de werkbladen kloppen niet.
Daar moet je kijken.
Gebuik F8 om te kijken in welke regel de fout zit.
 
Laatst bewerkt:
Hmmm, het was een werkende macro die ik, na uitgebreid testen met F8, in het event "open" gecopieerd heb. Daarom mijn onbegrip/verbazing.

Maar better save then sorry ik heb de werkbladen A, B en C genoemd en de VBA-code aangepast.

Resultaat: Fout 9 tijdens uitvoering: Het subscript valt buiten het bereik.
 
Maak er eens dit van:
Code:
[COLOR="#FF0000"]With ActiveWorkbook[/COLOR]
    [COLOR="#FF0000"].[/COLOR]Sheets("België ").UsedRange.ClearContents
    [COLOR="#FF0000"].[/COLOR]Sheets("België leveringen").UsedRange.ClearContents
    [COLOR="#FF0000"].[/COLOR]Sheets("België openstaande orders").UsedRange.ClearContents
[COLOR="#FF0000"]End With[/COLOR]
 
Laatst bewerkt:
Na
Code:
Workbooks.Open Filename:="G:\CrosbyIP\Leveringen\leveringen.xlsm"

is leveringen.xlsm het activeworkbook.
De toevoeging aan de code is dan echt overbodig.

Robuuster:

Code:
With Workbooks.Open("G:\CrosbyIP\Leveringen\leveringen.xlsm")
    .Sheets("België ").UsedRange.ClearContents
    .Sheets("België leveringen").UsedRange.ClearContents
    .Sheets("België openstaande orders").UsedRange.ClearContents
End With

of
Code:
With Workbooks.Open("G:\CrosbyIP\Leveringen\leveringen.xlsm")
  for each it in .sheets
    it.UsedRange.ClearContents
  next
End With

Maar wat de zin is om eest een bestaand bestand met inhoud te openen en daarna volledig leeg te maken ontgaat me. Een nieuw bestand maken lijkt me dan voor-de-hand-liggender.
 
Laatst bewerkt:
Ik ben duidelijk nog een junior member. Ik snap niet waarom een opgenomen en werkende macro niet meer werkt wanneer ik deze in een event plak.

Doel van de file is het (dagelijks) verplaatsen van de inhoud van 3 csv bestanden naar één file die door andere gebruikers wel te benaderen is.

In de opgenomen macro laad ik met "externe gegevens ophalen" "van tekst" de csv bestanden in de file die door anderen ook te benaderen is. De vorige excercitie maakte de tabbladen leeg voordat ik de nieuwe data zou inlezen.

Dankzij jullie tips werkt het leegmaken.

Maar nu loopt het script weer vast bij het inlezen van de csv bestanden. Ik kan me voorstellen dat het makkelijker kan maar heb geen idee hoe.

With ActiveWorkbook

.Sheets("A").UsedRange.ClearContents
.Sheets("B").UsedRange.ClearContents
.Sheets("C").UsedRange.Delete Shift:=xlUp ' bij clear kan ik geen externe gegevens meer importeren



End With

Application.Goto ActiveWorkbook.Sheets("C").Cells(1, 1)

' nieuw stuk 13/09/2020

With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;X:\Operations\e-mail\belgie_openstaande_orders.csv", Destination:=Range _
("$A$1"))
.CommandType = 0
.Name = "belgie_openstaande_orders"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 850
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = True
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With











Application.Goto ActiveWorkbook.Sheets("B").Cells(1, 1)

With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;X:\Operations\e-mail\belgie_leveringen.csv", Destination:=Range("$A$1") _
)
' .CommandType = 0
.Name = "belgie_leveringen"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 850
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileOtherDelimiter = ";"
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
ActiveWorkbook.Save

ActiveWorkbook.Close

Application.DisplayAlerts = True





End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan