• 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 werkt niet

Status
Niet open voor verdere reacties.

bascas

Gebruiker
Lid geworden
18 mei 2006
Berichten
446
Hallo, in onderstaand document kun je op tabblad "voorblad" in kolom A een naam invoeren, vervolgens wordt er een tabblad aangemaakt met die naam. Maar als je op dat tabblad de naam weghaalt met delete, dan maakt hij weer een blad aan en start de foutopsporing, dat zou niet moeten. En... de uitkomst van K2 en K3 van de aangemaakte tabbladen zou op het " voorblad" terecht moeten komen ( automatisch), maar weet niet hoe?

Groetjes Bas

Bekijk bijlage Leveranciers overzicht.xls
 
Je eerste vraag.
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
 If Target.Column = 1 And Target <> "" Then
  Sheets.Add(after:=Sheets(Sheets.Count)).Name = Target
   Sheets("pepsi").Range("1:5").Copy ActiveSheet.Range("1:5")
 End If
End Sub

Moet er morgen weer vroeg af, dus geen tijd meer.
 
En hier heb je de rest van de code

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 And Target <> "" Then
Sheets.Add(after:=Sheets(Sheets.Count)).Name = Target
Sheets("pepsi").Range("1:5").Copy ActiveSheet.Range("1:5")
Sheets("Voorblad").Range(Target.Address).Offset(0, 3) = "=" & Target & "!$K$2"
Sheets("Voorblad").Range(Target.Address).Offset(0, 4) = "=" & Target & "!$K$3"
End If

End Sub

Veel succes
 
Bedankt heren, waar zou ik dat stukje tekst de volgende code neer moeten zetten? Range("B2")=activesheet.name
 
bascas,

Die zou je b.v.b. achter het blad kunnen zetten.
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Range("B2") = ActiveSheet.Name
End Sub
 
Of.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Column = 1 And Target <> "" Then
    Sheets.Add(after:=Sheets(Sheets.Count)).Name = Target
     Sheets("pepsi").Range("1:5").Copy ActiveSheet.Range("1:5")
      ActiveSheet.Range("B2") = ActiveSheet.Name
     Sheets("Voorblad").Range(Target.Address).Offset(0, 3) = "=" & Target & "!$K$2"
    Sheets("Voorblad").Range(Target.Address).Offset(0, 4) = "=" & Target & "!$K$3"
  End If
End Sub
 
Bedankt, nu verandert alleen nog kolom C van tabblad " voorblad" als ik daar met de delete knop iets weghaal. Die zou dus een vaste waarde moeten hebben/houden.
 
Is het nu een verwijzing?
Graag wat meer informatie, of je bestandje uploaden.
 
Stel je hebt een tabblad gemaakt op het voorblad, maar dat is niet goed. En je verwijdert het tabblad, en je haalt de tekst op het voorblad weg met delete, dan past hij de grote aan van kolom C. Hoop dat het zo iets duidelijker is.
Groet Bas

Bekijk bijlage Leveranciers overzicht1.xls
 
Het laatste stukje van de code.
Code:
For i = 1 To 7
  If ActiveSheet.Name <> "Voorblad" Then
    ActiveSheet.Columns(i).ColumnWidth = Sheets("pepsi").Columns(i).ColumnWidth
   End If
  Next
End Sub
 
Nog een verzoek, nu plaatst het stukje script een tabblad na het tabblad "pepsi" , en dan weer na die , enz enz, zou dat ook op alfabet kunnen?En hoe zou de code dan worden.

Groet Bas
 
Code:
Sub SortSheets()
   Application.ScreenUpdating = False
   Dim i As Integer, J As Integer

   For i = 1 To Sheets.Count - 1  'Aantal tabbladen die aanwezig zijn / Pak 1 tabblad
      For J = i + 1 To Sheets.Count ' Pak 1 tabblad verder
         If UCase(Sheets(i).Name) > UCase(Sheets(J).Name) Then 'Als tablad 1 groter in alfabet is dan tabblad 2
            Sheets(J).Move before:=Sheets(i) 'wissel deze om
         End If
     Next J
  Next i
  Sheets("Voorblad").Move before:=Sheets(1)
End Sub
 
Warm Bakkertje,
waar zou die code in moeten, dit is wat ik al heb.
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 And Target <> "" Then
Sheets.Add(after:=Sheets(Sheets.Count)).Name = Target
Sheets("blanco").Range("1:5").Copy ActiveSheet.Range("1:5")
ActiveSheet.Range("B2") = ActiveSheet.Name
Sheets("Voorblad").Range(Target.Address).Offset(0, 1) = "=" & Target & "!$F$2"
Sheets("Voorblad").Range(Target.Address).Offset(0, 2) = "=" & Target & "!$F$3"
End If
For i = 1 To 6
   ActiveSheet.Columns(i).ColumnWidth = Sheets("blanco").Columns(i).ColumnWidth
   Next
End Sub

Ik ben echt geen held in VBA.

groetjes Bas
 
Zet de code in een standaardmodule (Invoegen Module)
Zet in de code die je nu al hebt tussen Next en End Sub dan SortSheets
Telkens je macro een nieuw blad aanmaakt zal dan ook automatisch gesorteerd worden.
 
Zo dan Bas.
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  Application.EnableEvents = False
   If Target.Column = 1 And Target <> "" Then
     Sheets.Add(after:=Sheets(Sheets.Count)).Name = Target
      Sheets("blanco").Range("1:5").Copy ActiveSheet.Range("1:5")
     ActiveSheet.Range("B2") = ActiveSheet.Name
    End If
 For i = 1 To 7
   ActiveSheet.Columns(i).ColumnWidth = Sheets("blanco").Columns(i).ColumnWidth
 Next
    Sheets("Voorblad").Range(Target.Address).Offset(0, 1) = "=" & Target & "!$G$2"
    Sheets("Voorblad").Range(Target.Address).Offset(0, 2) = "=" & Target & "!$G$3"
   Application.EnableEvents = True
 SortSheets
End Sub
 
Harry, met deze code maakt hij geen tabbladen meer aan. Ik heb het anders gedaan, en het werkt nu. Maar..in de naam die op " voorblad" wordt getypt in een cel in kolom A, mag geen komma of een spatie zitten, dat levert een script error op. Zou daar nog iets voor zijn, of moet ik gewoon de naam aanpassen?
Groet Bas
 
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo TheEnd
Application.EnableEvents = False
  If Target.Column = 1 And Target <> "" Then
     With Sheets.Add(Sheets(Sheets.Count))
        .Name = Target
        Sheets("blanco").Range("1:5").Copy .Range("1:5")
        .Range("B2") = .Name
        For i = 1 To 7
            .Columns(i).ColumnWidth = Sheets("blanco").Columns(i).ColumnWidth
        Next
      End With
  End If
  With Sheets("Voorblad").Range(Target.Address)
        If InStr(Target, " ") > 0 Or InStr(Target, ",") > 0 Then
            .Offset(0, 1) = "='" & Target & "'!$G$2"
            .Offset(0, 2) = "='" & Target & "'!$G$3"
        Else
            .Offset(0, 1) = "=" & Target & "!$G$2"
            .Offset(0, 2) = "=" & Target & "!$G$3"
        End If
  End With
  SortSheets
TheEnd:
  Application.EnableEvents = True
End Sub
 
Mijn vorige code maakte gewoon tabbladen aan Bas.

@Rudi,

Dit moet toch al voldoende zijn?
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  Application.EnableEvents = False
   If Target.Column = 1 And Target <> "" Then
     Sheets.Add(after:=Sheets(Sheets.Count)).Name = Target
      Sheets("blanco").Range("1:5").Copy ActiveSheet.Range("1:5")
     ActiveSheet.Range("B2") = ActiveSheet.Name
    End If
 For i = 1 To 7
   ActiveSheet.Columns(i).ColumnWidth = Sheets("blanco").Columns(i).ColumnWidth
 Next
    Sheets("Voorblad").Range(Target.Address).Offset(0, 1) = "=[COLOR="red"]'[/COLOR]" & Target & "[COLOR="red"]'[/COLOR]!$G$2"
    Sheets("Voorblad").Range(Target.Address).Offset(0, 2) = "=[COLOR="red"]'[/COLOR]" & Target & "[COLOR="red"]'[/COLOR]!$G$3"
   Application.EnableEvents = True
 SortSheets
End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan