Hirdetés

Új hozzászólás Aktív témák

  • TillaT

    tag

    Sziasztok!
    Létezik olyan eseménykezelési lehetőség, ami azonnal érzékeli az aktív munkalapon eszközölt sor és/vagy oszlopbeszúrásokat?

    VBA kóddal szeretném korlátozni egy munkafüzet minden munkalapján a táblázatok görgethetőségét.
    - A munkalapok eltérő méretűek.
    - Görgethető tartományként minden munkalapon az adott munkalap 'A1' cellája, valamint az 'A' oszlop utolsó nem üres cellája és az utolsó nem üres oszlop metszéspontja által határolt tartományt szeretném kijelölni.

    A ThisWorkbook szerkesztőfelületébe írt alábbi kódsorokkal szerettem volna megoldani az elgondolásomat, de sajnos nem teljesen az elvártak szerint működik.
    1., Ha csak úgy dolgozok a munkalapokon, hogy sehol nem szúrok be sort vagy oszlopot, akkor hibátlanul működik a görgethetőség korlátozása minden munkalapon.
    2., De ha egy munkalapon beszúrok sorokat/oszlopokat, akkor ezt csak azután veszi figyelembe az adott munkalap görgethetőségének korlátozásánál, ha előbb elkattintok egy másik munkalapra, majd vissza.

    3., A kód hatása alatt nem lehet hagyományos módon -sorszámok vagy oszlopnevek kijelölésével- megadni a beszúrandó sorokat/oszlopokat. Csak úgy enged sorokat és oszlopokat beszúrni, hogy a táblázaton belül bárhol ki kell jelölni annyi sort/oszlopot, amennyit be akarok szúrni, majd a felbukkanó Beszúrás módja ablakban az "Egész sor" vagy az "Egész oszlop" opciók közül választva szúrja be, amit szeretnék.
    Ki lehet ezt váltani, hogy a kód futása ellenére is hagyományos módon lehessen kijelölni a beszúrandó sorokat/oszlopokat?

    Dim lastRow As Long
    Dim LastColumn As Long
    Dim scrollArea As Range

    Private Sub Workbook_Open()
       ThisWorkbook.Sheets(1).Activate
       Call ScrollAreaInterpret
    End Sub

    Private Sub Workbook_SheetActivate(ByVal Sh As Object)
        Call ScrollAreaInterpret
    End Sub

    Private Sub Worksheet_Change(ByVal Target As Range)
        Call ScrollAreaInterpret
    End Sub

    Sub ScrollAreaInterpret()
            lastRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, "A").End(xlUp).Row
            LastColumn = ActiveSheet.Cells(1, Columns.Count).End(xlToLeft).Column
            Set scrollArea = ActiveSheet.Range("A1").Resize(lastRow, LastColumn)
            ActiveSheet.scrollArea = scrollArea.Address
    End Sub

Új hozzászólás Aktív témák