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

Vba array probleem

Status
Niet open voor verdere reacties.

tobo100

Gebruiker
Lid geworden
14 okt 2013
Berichten
156
het doel van deze macro is om alle werkbladen te "listen"
om daarna de werkblad namen te kunnen gebruiken in een userform in de vorm van checkboxen
deze checkboxen wil ik aan kunnen vinken om later de aan gevinkte werkbladen te kunnen printen

wat er niet goed gaat is dat ik nu met deze samengestelde code
iedere keer een werkblad moet aanmaken om de code te laten werken
ik heb van alles geprobeerd om DestSh te omzeilen maar ik krijg het niet voor elkaar

de macro variabel DestSh gooit hier bij roet in het eten
wie kan me helpen

vr gr Tobo


Code:
Private Tck(10) As MSForms.CheckBox
Private Sub addCheckboxes()
    UserForm1.Show
End Sub

Private Sub CommandButton1_Click()
    Dim i As Integer
    Dim Tck As MSForms.CheckBox
    Dim offset As Integer: offset = 15
    Dim sh As Worksheet
    Dim [B]DestSh[/B] As Worksheet
     
    On Error Resume Next
    On Error GoTo 0
    Application.DisplayAlerts = False
    On Error Resume Next
    Set [B]DestSh[/B] = ActiveWorkbook.Worksheets.Add   ''geen sheet toevoegen [B]DestSh[/B] heeft voormij alleen waarde on de array te vullen
    For Each sh In ActiveWorkbook.Worksheets
    Application.DisplayAlerts = False
    
    
    [B]DestSh[/B].Name = "Verzamelblad"
    If IsError(Application.Match(sh.Name, _
    Array([B]DestSh.Name[/B], "Data", "blad1"), 0)) Then  ''enkele uitzonderingen maken
    Set Tck = UserForm1.Controls.Add("Forms.Checkbox.1", "Checkbox" & i, True)
    Tck.Top = offset
    Tck.Left = 15
    Tck.Width = 100
    offset = offset + 15
    Tck.Caption = sh.Name
    End If
    Next
End Sub
 
Zo dan?

Code:
Private Sub UserForm_Initialize()
Dim sh As Worksheet, y As Long, tck As Control, n As Long
For Each sh In ThisWorkbook.Sheets
 y = y + 1
    Set tck = UserForm1.Controls.Add("Forms.Checkbox.1", "Checkbox" & y, True)
    tck.Top = n
    tck.Left = 15
    tck.Width = 100
   n = n + 15
    tck.Caption = sh.Name
 Next sh
End Sub
 
ziet er prima uit HSV maar ik mis nu alleen het stukje waar ik uitzonderingen kan maken
er zijn dus een paar worksheets die niet in die lijst moeten voor komen
in dit voorbeeld zijn het er 2 maar kunnen er meer zijn
Code:
 Array(DestSh.Name, "[COLOR="#0000FF"]Data", "blad1[/COLOR]"), 0)) Then  ''enkele uitzonderingen maken
 
HSV heeft het leeuwendeel voor je gedaan. De uitzonderingen zijn er simpel in te bouwen.
Code:
Private Sub UserForm_Initialize()
    Dim sh As Worksheet, y As Long, tck As Control, n As Long
    For Each sh In ThisWorkbook.Sheets
        Select Case sh.Name
            Case "Data", "blad1"
            Case Else
                y = y + 1
                Set tck = UserForm1.Controls.Add("Forms.Checkbox.1", "Checkbox" & y, True)
                tck.Top = n
                tck.Left = 15
                tck.Width = 100
                n = n + 15
                tck.Caption = sh.Name
        End Select
    Next sh
End Sub
 
Laatst bewerkt:
Beter?
Code:
Private Sub UserForm_Initialize()
Dim sh As Worksheet, y As Long, tck As Control, n As Long, c00
For Each sh In ThisWorkbook.Sheets
c00 = "Blad4|" & "Blad5|"  'de bladen die niet meegenomen mogen worden
If InStr(c00, sh.Name & "|") = 0 Then
 y = y + 1
    Set tck = UserForm1.Controls.Add("Forms.Checkbox.1", "Checkbox" & y, True)
    tck.Top = n
    tck.Left = 15
    tck.Width = 100
   n = n + 15
    tck.Caption = sh.Name
  End If
 Next sh

Kan ook Ed. ;)
 
Laatst bewerkt:
het is weer helemaal geweldig edmoore dankjewel
HSV jou oplossing neem ik mee :thumb::thumb:
 
waarom toch niet gewoon gebruik gemaakt van de eigenschap .visible ?

Code:
Private Sub UserForm_Initialize()
    c00 = "|Blad4|Blad5|" 
    j=0

    For Each sh In ThisWorkbook.Sheets
      If InStr(c00, "|" & sh.Name & "|") = 0 Then 
          with me("checkbox" & j)
             .visible=true
             .caption=sh.name
          end with
          j=j+1
      End If
    Next

End sub
 
Edit: Als je meerdere werkbladen aanmaakt, moet je evenveel checkboxen aanmaken.
Checkbox 0 (j=0) kan niet.
 
Laatst bewerkt:
@HSV

een vinkvak kan iedere geldige naam hebben, dus ook "checkbox0"
 
Dat is waar, "het kan", maar er is vast niemand die het in z'n hoofd haalt om van z'n eerst geplaatste checkbox van de 1 een 0 te maken.
Laten we het maar op ongelukkig geplaatst houden. ;)
 
Toch wel, net zoals in ieder userform controls(0) de eerste control is. In een tientallig stelsel begin je nl. te tellen bij 0.
Ik kan bevestigen dat 'niemand' niet klopt. :)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan