• 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.

Macro probleem toevoegen aan tabellen

Status
Niet open voor verdere reacties.

eriksmit1964

Gebruiker
Lid geworden
25 jan 2016
Berichten
53
Dag,

Ik heb de namen van tabbladen in tabel5 staan. De tabel maak ik leeg en wil graag de nieuwe tabbladnamen weer in tabel 5. Nu staat het in reeks (n9 tot en met N) met de naam lijst (N5 tot en met N).


In onderstaande code worden de tabbladnamen vanaf N9 netjes onder elkaar gezet. Maar ik zou het graag in tabel5 willen hebben. de header staat in N7 en de eerste tabnaam komt dan in N8.
Verder heb ik tabblad namen die beginnen met een 8 en die zouden er ook in moeten. Maar zodra ik aanpas krijg ik geen reeks namen meer
Code:
 If Left(sh.Name, 1) <> "4" or If Left(sh.Name, 1) <> "8" Then GoTo Volgende

Wie kan me helpen? En waarom begint de reeks in N9?

Groet, Erik

Code:
Sub Worksheet_Activate()

With Sheet1.ListObjects("Table5").ListRows
        Do While .Count >= 1
            .Item(1).Delete
        Loop
    End With 'deze loop maakt tabel 5 leeg maar laat tabel bestaan
With Sheets("Stuur")
  
 For Each sh In ThisWorkbook.Sheets
 If Left(sh.Name, 1) <> "4" Then GoTo Volgende
.Cells(.Range("N" & .Rows.Count).End(xlUp).Row + 1, 14) = sh.Name
Volgende:
Next
  ActiveWorkbook.Names.Add _
    Name:="Lijst", _
      RefersTo:=.Range("N5:$N$" & .Range("N" & .Rows.Count).End(xlUp).Row) 'Geeft de naam Lijst aan bereik N5 tot N?
 End With
End Sub
 
Erik,

Eerlijk gezegd: geen idee. Plaats daarom eens een representatief voorbeeld bestandje
 
Zo beter?
Code:
Sub Worksheet_Activate()
dim sv, sh as worksheet, c00 as string
With Sheet1.ListObjects("Table5")
    .databodyrange.clearcontents
   
   For Each sh In Sheets
      If Left(sh.Name, 1) <> "4" and Left(sh.Name, 1) <> "8" then c00 = c00 & "|" & sh.name
   Next sh
     sv = application.transpose(split(mid(c00, 2), "|"))
        if c00 <> "" then .range.cells(2, 1).resize(ubound(sv)) = sv
 End With
End Sub
 
Dag HSV,
Bijna goed. Ik heb onderstaande aangepast en nu is werkt het. Ik kreeg de tabbladnamen die ik niet wilde. Klopt mijn veronderstelling dat de waarden in tabel5 komen omdat je de tabel niet verlaat nadat die leeg is gemaakt?

Code:
 If Left(sh.Name, 1) = "4" Or Left(sh.Name, 1) = "8" Then c00 = c00 & "|" & sh.Name

Deze regels snap ik niet goed. Kun je die nog toelichten. En dan met name het deel mid(c00,2). Je splitst op basis van teken |. Transpose gaat van regel naar kolom of vice versa
Als c00 leeg is dan ???
Code:
sv = Application.Transpose(Split(Mid(c00, 2), "|")) 
If c00 <> "" Then .Range.Cells(2, 1).Resize(UBound(sv)) = sv

Hieronder de voor mij werkende code.
Code:
Sub VullenTabel5()
Dim sv, sh As Worksheet, c00 As String
With Sheet1.ListObjects("Table5")
    .DataBodyRange.ClearContents   'maakt de tabel leeg
   
   For Each sh In Sheets
      If Left(sh.Name, 1) = "4" Or Left(sh.Name, 1) = "8" Then c00 = c00 & "|" & sh.Name 'zet de tabbladnamen in array c00 op basis eerste
                                                                                         'karakter van tabbladnaam scheidingsteken is |
   Next sh
     sv = Application.Transpose(Split(Mid(c00, 2), "|"))  'Zet array c00 met 1 regel en X kolommen om naar sv met 1 kolom en X regels
        If c00 <> "" Then .Range.Cells(2, 1).Resize(UBound(sv)) = sv  'Als c00 leeg is dan ????
 End With    ' Alle waarden komen in de tabel omdat nadat de tabel leeg is gemaakt je in de tabel blijft.
End Sub




Dank voor de hulp.
 
'Mid' = Deel in formulevorm (tekst,begingetal,aantal tekens).
Indien er bladen zijn die aan de voorwaarde voldoen krijg je bv:
c00 = |4|8|41|81
Mid(c00,2) wordt c00=4|8|41|81

De if statement heb je nodig als c00="" (geen tekst bevat, geen bladen gevonden die aan de voorwaarde voldoen); er is dan geen 'Ubound' van de 'Split' functie, zonder krijg je een foutmelding, en dat wil je niet.
 
Ter overweging:

Code:
Sub Worksheet_Activate()
   For Each sh In Sheets
     c00 = c00 & "|" & sh.Name
   Next
   sn = Filter(Split(Mid(c00, 2), "|"), "4", 0)

   If UBound(sn) > -1 Then
     With Sheet1.ListObjects(1).DataBodyRange
       .ClearContents
       .Cells(1).Resize(UBound(sn) + 1) = Application.Transpose(sn)
     End With
   End If
End Sub
 
Dag SNB,
Dank voor je antwoord. Ik heb onderstaande macro ingebruik.
Code:
Private Sub Workbook_Open()  'Leegmaken tabel 5 en opnieuw vullen met tabbladnamen
Dim sv, sh As Worksheet, c00 As String 'definieer variabelen
With Sheet1.ListObjects("Table5")
    .DataBodyRange.ClearContents   'maakt de tabel leeg
   
   For Each sh In Sheets
      If Left(sh.Name, 1) = "4" Or Left(sh.Name, 1) = "8" Then c00 = c00 & "|" & sh.Name 'zet de tabbladnamen in array c00 op basis eerste
                                                                                         'karakter van tabbladnaam scheidingsteken is |
   Next sh
     sv = Application.Transpose(Split(Mid(c00, 2), "|"))  'Zet array c00 met 1 regel en X kolommen om naar sv met 1 kolom en X regels
        If c00 <> "" Then .Range.Cells(2, 1).Resize(UBound(sv)) = sv  'Als c00 leeg is dan ????
 End With    ' Alle waarden komen in de tabel omdat nadat de tabel leeg is gemaakt je in de tabel blijft.
End Sub
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan