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

regel invoegen o.b.v. een knop

Status
Niet open voor verdere reacties.

Cartucci

Gebruiker
Lid geworden
18 aug 2018
Berichten
65
Zie bijgaand voorbeeldbestand. Hierin heb ik een oude situatie en een nieuwe situatie aangegeven.

Ik zou graag per type (kolom A) een regel onderin het typevak toe kunnen voegen d.m.v. een knop. Die knop is bijv. gepositioneerd ergens linksboven in de (samengevoegde cel) waarin het type nummer wordt weergegeven.

In het betreffende vak moet dan onderaan het vak 1 regel ingevoegd worden waarbij de formules uit de rij erboven ook mee worden gekopieerd en de celopmaak intact blijft.

De volgende manier heb ik voor ogen op basis van het voorbeeld:

In cel B7 (of B8 als dat beter is) gaan staan. Op de knop drukken welke in het type 1 vak staat. VBscript wordt uitgevoerd en de nieuwe situatie wordt realiteit.

Nog mooier zou zijn als het alleen een kwestie van “op de knop drukken” is waarbij je niet eerst in cel B7 hoeft te staan.

Is zoiets mogelijk? Een andere oplossing is uiteraard ook welkom.
 

Bijlagen

  • voorbeeld.xlsx
    16,8 KB · Weergaven: 29
dubbelklikken op die samengevoegde cel in de A-kolom
 

Bijlagen

  • voorbeeld (15).xlsm
    33,4 KB · Weergaven: 20
Dankjewel Cow18.

Het doet wat ik bedoel, echter, het oorspronkelijke voorbeeld was een versimpeling van het werkelijke bestand en ik kom er niet uit om de vertaalslag te maken.

Het originele bestand kan ik niet meesturen maar ik heb bij deze een versie gestuurd die gelijk is maar geen inhoud meer toont die ik niet kan delen.

Wat van belang is, is dat na het invoegen, een kopie van de regel erboven geplaatst wordt in de nieuwe regel, i.v.m. de formules en opmaak. Tevens moet de onderste regel "leeg opgeleverd" worden. In de geboden oplossing blijft de inhoud staan.

Is het mogelijk om aan te geven hoe ik dezelfde functionaliteit krijg als in de reeds geboden oplossing? Bij voorbaat dank!
 

Bijlagen

  • voorbeeld.xlsm
    718,5 KB · Weergaven: 21
zoiets dan, er was nog een extra A-kolom
 

Bijlagen

  • voorbeeld (1).xlsm
    732,5 KB · Weergaven: 45
Perfect! Wederom bedankt!

Mogelijk nog een paar kleinigheidjes: Bij dubbelklikken in B32 of B59 wordt de volgende melding getoond: melding.PNG

In B105 werkt de dubbelklik niet?
 
Ah, dat B105 niet reageert, heeft te maken met het feit dat dit geen samengevoegde cel is.

Wanneer ik een extra regel toevoeg (regel 106) en in kolom B de cellen B105 en B106 samenvoeg, werkt het wel maar dan wordt in kolom A bij de eerste uitvoering van het script, een extra cel aangemaakt onderaan. Bij de tweede keer werkt het wel juist maar de extra cel blijft aanwezig.

Wat mij nog niet was opgevallen, is dat bij het optreden van de melding (zie item hierboven), kolom A niet goed meekomt en "verminkt" raakt m.b.t. de indeling.
 
Laatst bewerkt:
Via een misbruik melding kwam dit bij ons binnen. Dat is niet de manier om aandacht te krijgen voor een vraag.
Bij hoge uitzondering plaats ik het hier.

De gebruiker gaf de volgende reden:
Hallo Cow18

Mag ik je vragen nog een keer naar mijn opmerkingen te kijken m.b.t. de door jouw geboden oplossing? Ik heb zelf reeds enkele pogingen ondernomen maar begrijp niet waarom de zaken optreden zoals beschreven:

Samengevat:

1. Bij dubbelklikken op B32 of B59 wordt een melding aangegeven. Zie item 20-9 15:41 voor een screenshot van de melding.

2. B105 is een niet samengevoegde cel en in dat geval werkt de dubbelklik niet. Voeg je een regel toe en maak je er wel een samengevoegde cel van, dan wordt in kolom A een extra regel aangemaakt en raakt kolom A de indeling kwijt.
 
Mijn welgemeende excuses voor mijn misvatting. Ik dacht dat Attendeer Moderator inhield dat ik op die manier degene die reageerde op mijn vraag nogmaals attendeerde. Dit omdat ik van mening was reeds 2 x de vraag via het forum gesteld te hebben. In elk geval dank voor uw medewerking.
 
een nieuwe poging

PS. tja, er ontsnapt soms een reactie aan mijn aandacht.
Dus, ja, dan helpt een wake-up call, maar soms wordt dat, bij herhaling, aanzien als te opdringerig gedrag.
 

Bijlagen

  • voorbeeld (1) (2).xlsm
    1,5 MB · Weergaven: 35
Laatst bewerkt:
Hartelijk dank Cow18! Het werkt. Er ging nog iets niet helemaal goed m.b.t. de opmaak van kolom A maar ik geloof dat ik dit zelf heb op kunnen lossen door het script nog iets aan te passen.

Nog een vraag als dat mag:

Is het mogelijk om de regelinvoegactie ongedaan te maken door bijvoorbeeld te dubbelklikken op cel B4? Of anders via een knop?

Ik kan me nl. voorstellen dat een gebruiker een regel teveel invoegt in zijn/haar enthousiasme en dat kan nu niet eenvoudig ongedaan gemaakt worden.
 
oei ...
ja, dat kan morgen
 
Laatst bewerkt:
ik hou niet bij welke rij ik als laatste heb ingevoegd, dus dubbelklikken op B4 helpt niet veel.
In de linkerkantlijn naast kolom A heb je de rijnummers staan.
Als je nu me de gewone linkermuisknop op zo'n rijnummer klikt, dan zal
- als de B-cel in die rij de laatste cel van een samengevoegde cel is, de vraag worden gesteld of die rij weg mag.
- zoniet, gebeurt er niets.
 

Bijlagen

  • voorbeeld (1) (2) (1).xlsm
    1,5 MB · Weergaven: 14
Laatst bewerkt:
Dat werkt wederom goed! Bedankt!

Alleen de opmaak van de onderste cel gaat na het verwijderen van de regel verloren. Er wordt geen middeldikke streep geplaatst.

Is in het script nog een toevoeging te maken die de streep terugplaatst?
 
zo
 

Bijlagen

  • voorbeeld (1) (2) (1).xlsm
    1,4 MB · Weergaven: 20
Ik probeer nog een bladbeveiliging in te voeren (zonder wachtwoord) maar krijg dat niet voor elkaar.

Het "regel invoegscript" en het "regel verwijder script" zijn op een of andere manier aan elkaar gelinkt? Ze werken in elk geval niet als in in beide scripts een regel toevoeg om de beveiliging op te heffen en vervolgens weer aan te zetten.

Cow18, kun je me nog van informatie voorzien hoe dit te doen?

[JS][XML][SQL]Const iKol = 745 'aantal kolommen vanaf C tot ABQ

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
With Target '-> cel waarin gedubbelklikt wordt
If Intersect(Target, Range("B8:B500")) Is Nothing Then Exit Sub 'niet dubbelklikken in die B-range = einde verhaal

If .MergeCells Or .Offset(, -1).MergeCells Then ' kijken of die B-cel een samengevoegde cel is, zoniet einde verhaal
.Offset(1).Resize(1, iKol).Insert Shift:=xlDown 'onder die samengevoegde cel, in een rij iKol cellen breed invoegen
With .Resize(Target.Rows.Count + 1) 'die samengevoegd cel + nieuwe B-cel
.MergeCells = True 'samenvoegen
'.Borders(xlEdgeBottom).Weight = xlMedium 'onderkant medium dikke streep
End With

With .Offset(, -1).Cells(1).MergeArea 'de cel links ernaast in de A-kolom
If .MergeCells Then 'is een samengevoegde cel
.Offset(1).Resize(1).Insert Shift:=xlDown 'onder die samengevoegde cel, 1 cel invoegen
Application.DisplayAlerts = False
With .Resize(.Rows.Count + 1) 'die samengevoegd cel + nieuwe A-cel
.MergeCells = True 'samenvoegen
.Borders(xlEdgeBottom).Weight = xlMedium 'onderkant medium dikke streep
.Borders(xlEdgeTop).Weight = xlMedium 'bovenkant nieuwe rij, dikke streep
.Borders(xlEdgeRight).Weight = xlMedium 'rechterkant nieuwe rij, medium streep
.Borders(xlEdgeLeft).Weight = xlMedium 'rechterkant nieuwe rij, medium streep
.Borders(xlEdgeBottom).Weight = xlMedium 'onderkantkant nieuwe rij, medium streep
.Borders(xlInsideHorizontal).Weight = xlThin 'rechterkant nieuwe rij, medium streep
End With
Application.DisplayAlerts = True
Else
MsgBox "foutje met niet-samengevoegde A-cel " & .Address, vbCritical
End If
End With

With .Offset(, 1).Cells(Target.Rows.Count + 1, 1).Resize(1, iKol) 'nieuw toegevoegde cellen vanaf C-kolom en dik 700 kolommen breed
.Offset(-1).Copy .Cells(1) 'kopieer laatste rij naar nieuwe rij
On Error Resume Next 'doorgaan bij foutmelding
.SpecialCells(xlConstants).ClearContents 'alle cellen met vaste inhoud (geen formules) leegmaken
On Error GoTo 0
End With

With .Cells(1).MergeArea.Resize(, iKol)
.Borders(xlEdgeTop).Weight = xlMedium 'bovenkant nieuwe rij, fijne streep
.Borders(xlEdgeRight).Weight = xlMedium 'rechterkant nieuwe rij, medium streep
.Borders(xlEdgeLeft).Weight = xlMedium 'rechterkant nieuwe rij, medium streep
.Borders(xlEdgeBottom).Weight = xlMedium 'onderkantkant nieuwe rij, medium streep
.Borders(xlInsideHorizontal).Weight = xlThin 'rechterkant nieuwe rij, medium streep
End With

.Interior.Color = 8703650

Application.Goto .Offset(.Cells(1).MergeArea.Rows.Count - 1, 1).Cells(1), 0 'ga in de nieuw ingevoegde C-cel staan

End If
End With
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
With Target
If .Rows.Count = 1 And .Columns.Count = Columns.Count And .Row > 8 Then 'je hebt een ganse rij geselecteerd
Set c1 = .Cells(1).MergeArea.Cells(1) '1e cel van de samengevoegde cellen van die rij in de A-kolom
Set cma = .Cells(1, 2).MergeArea 'samengevoegde cellen in de B-kolom
Set c2 = .Cells(1, 2).MergeArea.Cells(1) 'idem voor de B-kolom

If c1.Address <> .Cells(1).Address And c2.Address <> .Cells(1, 2).Address Then 'A en B cel zijn samengevoegde cellen, maar niet de 1e van die samengevoegde cel
If cma.Cells(cma.Rows.Count, 1).Address = .Cells(1, 2).Address Then 'B-cel is de laatste van die samengevoegde cel
If MsgBox("ben je zeker dat rij " & Target.Row & " weg mag ?", vbYesNo) = vbYes Then 'bevestiging vragen
.Cells(1).Resize(, iKol + 1).Delete xlShiftUp 'zoveel cellen weg
c1.Cells(1).MergeArea.Resize(, iKol + 1).Borders(xlEdgeBottom).Weight = xlMedium 'onderkantkant nieuwe rij, medium streep
Application.Goto .Cells(0, 3), 0 'naar de C-kolom gaan
End If
End If
End If
End If
End With
End Sub[/SQL][/XML][/JS]
 
voeg dit toe in thisworkbook.
Daarna werkboek opslaan, sluiten en terug openen.
Werkblad zal beveiligd zijn, maar de macro's mogen hun werk doen.
Code:
Private Sub Workbook_Open()
   [COLOR="#FF0000"]With Sheets("werkplanning")
      .Unprotect                                 'beveiliging eraf zonder paswoord
      .Protect userinterfaceonly:=True           'beveiliging er terug op en macro's krijgen vrij spel
   End With
[/COLOR]
   For Each cl In Range("d7:nj7")
      If cl = Date Then cl.Offset(0, 0).Activate
   Next cl
End Sub
 
Bedankt voor je geduld Cow18.

Ik heb 3 sheets in het document: "werkplanning" "totalen" en "parameters". Deze wil ik graag alle op deze manier beveiligen. Is dat een kwestie van deze 3 sheets opnemen in dit script?

Of moet dit anders? Ik heb reeds wat geprobeerd door de sheets toe te voegen in het script maar betwijfel of ik de juiste scheidingstekens hanteer. Het werkt nl. niet als ik dat doe.

De opmaak van de onderste regel, nadat een regel wordt verwijderd, wordt nu niet meer teruggeplaatst. Zie #13 in bovenstaande vragen. Komt dat door het toevoegen van het script uit #16? Dat werkt nl. wel.
 
Laatst bewerkt:
blad per blad aflopen voor de beveiliging.
 

Bijlagen

  • voorbeeld (1) (2) (1) (2).xlsm
    1,4 MB · Weergaven: 26
Bedankt Cow18! We gaan het eerst eens in depraktijk testen. Ik wil je hartelijk danken voor je support in deze!
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan