Yksi ongelma lisää tuli mieleen josta tahtoisin kysyä:
Minulla on kaksi taulukkoa päällekkäin, ja kun poistan ylemmästä rivin, siirtyy alempi taulukko rivin ylöspäin. Mutta kun ylempään taulukkoon lisää rivin, alempi taulukko ei liikukaan mukana vaan tiedot menevät päällekkäin. Miten siis saisin alemman taulukon liikkumaan ylemmän taulukon mukana, ja miten viittaukset hoituvat sitten?
(Mod. teki uudesta kysymyksestä uuden keskustelun.)
1. Millä komennolla lisäät rivin ylempään taulukkoon?
Moi!
oletan, että kysymys liittyy aiempaan viestiin koskapa moderaattori meni ja teki tästä uuden keskustelun...
oletetaan, että halutaan lisätä ja poistaa rivejä (yksi rivi kerrallaan) komentopainikkeen avulla taulukosta Taul1 niin, että toiminnot vaikuttavat taulukon Taul2 vastaaviin riveihin.
Lisää taulukkoon Taul1 2 ActiveX komentopainiketta (CommandButton1 & CommandButton2). Kilkkaa vuorollaan kutakin komentonappia hiiren oikealla, valitse Muokkaa ohjausobjektia ja poista suojaus välilehdellä Lukittu ruudun rasti. Lisää taulun Taul1 ensimmäiselle riville muutamaan sarakkeeseen haluamiasi sarakeotsikoita, kopio ne vastaaviin taulun Taul2 soluhin ja lisää komentonappien koodit:
'Taul1 Private Sub CommandButton1_Click() 'Lisää rivi Taul1.Unprotect Password:="salasana" Taul2.Unprotect Password:="salasana" If Selection.Row = 1 Then Rows(2).Select Else Rows(Selection.Row).Select End If If Selection.Row <= UsedRange.SpecialCells(xlCellTypeLastCell).Row Then Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove ElseIf Selection.Row > UsedRange.SpecialCells(xlCellTypeLastCell).Row Then Rows(UsedRange.SpecialCells(xlCellTypeLastCell).Row + 1).Select End If rivi = Selection.Row For sarake = 1 To UsedRange.SpecialCells(xlCellTypeLastCell).Column arvo = InputBox("Syötä solun " & Replace(Cells(rivi, sarake).Address, "$", "") & " arvo") Cells(rivi, sarake).Value = arvo Next Application.ScreenUpdating = False Taul2.Activate Taul2.Rows(rivi).Select Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove Taul1.Rows(rivi).Copy Destination:=Taul2.Range("A" & rivi) Taul1.Activate Taul2.Protect Password:="salasana", DrawingObjects:=True, Contents:=True, Scenarios:=True Taul1.Protect Password:="salasana", DrawingObjects:=True, Contents:=True, Scenarios:=True Application.ScreenUpdating = True End Sub Private Sub CommandButton2_Click() 'Poista rivi rivi = Selection.Row If rivi = 1 Then MsgBox "Et voi poistaa otsikkoriviä" Exit Sub End If Taul1.Unprotect Password:="salasana" Taul2.Unprotect Password:="salasana" If rivi <= UsedRange.SpecialCells(xlCellTypeLastCell).Row Then Taul1.Rows(rivi).Delete Taul2.Rows(rivi).Delete End If Taul2.Protect Password:="salasana", DrawingObjects:=True, Contents:=True, Scenarios:=True Taul1.Protect Password:="salasana", DrawingObjects:=True, Contents:=True, Scenarios:=True End Sub
Suojaa sen jälkeen molemmat taulukot asettamalla salasanaksi salasana ja tallenna työkirja makrot sallivaan muotoon.
Mikäli taas halutaan, että taulun Taul1 muutokset vaikuttavat suoraan taulun Taul2 solujen arvoihin niin tässä (vain) yksi esimerkki...
'Taul1 Private Sub Worksheet_Change(ByVal Target As Range) 'jos taulussa Taul2 on käytössä enemmän rivejä, kuin 1 niin... If Taul2.UsedRange.SpecialCells(xlCellTypeLastCell).Row > 1 Then 'tyhjennetään alue "A2:" & viimeisen käytössä olevan solun osoite Taul2.Range("A2:" & Taul2.UsedRange.SpecialCells(xlCellTypeLastCell).Address).Clear 'jolloin ensimmäisen ('otsikkorivin') rivin tiedot säilyvät End If 'asetetaan muuttujan arvoksi taulun Taul1 'viimeisen käytössä olevan solun rivi rivi = Taul1.UsedRange.SpecialCells(xlCellTypeLastCell).Row 'jos muuttujan arvo on suurempi kuin 1 niin... If rivi > 1 Then 'kopioidaan solualue joka muodostuu taulun Taul1 sarakkeen 'A riveistä 2 - rivi ja sarakkeen C riveistä 2 - rivi 'tauluun Taul2 alkaen solusta A2 jolloin ko. solualue 'kopioituu sarakkeisiin A - B Taul1.Range("A2:A" & rivi & "," & "C2:C" & rivi).Copy Destination:=Taul2.Range("A2") End If End Sub
Aihe on jo aika vanha, joten et voi enää vastata siihen.