Thema Datum  Von Nutzer Rating
Antwort
Rot Excel Intelligente Tabelle per TAB steuern - bei Zeile 1425 ist Schluß
25.01.2018 08:53:46 Michael R.
Solved
25.01.2018 09:30:53 Gast49241
NotSolved
25.01.2018 11:35:27 frustierter Helfer
NotSolved
25.01.2018 11:38:07 Gast32346
NotSolved
25.01.2018 11:42:52 Gast98401
NotSolved
25.01.2018 12:09:14 Gast8188
NotSolved

Ansicht des Beitrags:
Von:
Michael R.
Datum:
25.01.2018 08:53:46
Views:
1142
Rating: Antwort:
 Nein
Thema:
Excel Intelligente Tabelle per TAB steuern - bei Zeile 1425 ist Schluß

Hallo Zusammen,

 

ich habe das Problem, dass ich in einer intelligenten Tabelle (als Tabelle formatiert) auf einem geschützten Arbeitsblatt die Zellen per TAB-Taste ansteuere.

Bei der letzten freien Zelle in der Tabellenzeile 1425 wird keine neue Zeile mehr erstellt. Gibt es da eine Beschränkung oder ist in dem VBA-Code etwas nicht richtig?

Modul1:
'##### Aktivierung der TAB-Navigation für ein geschütztes Arbeitsblatt #####

Public Sub mod_Navigation()

    Application.ScreenUpdating = False  'Bildschirmflackern verhindern

    Const PW As String = "XXX"     'Passwort
    
    Dim WS As Worksheet             'Arbeitsblatt
    Dim oLObj As ListObject         'Element der Tabellenauflistung (Listenobjekt auf einem Arbeitsblatt)
    Dim oLRow As ListRow            'Alle Zeilen eines Listenobjektes
    
    Dim AnzRow As Long              'Anzahl Zeilen
    Dim AnzCol As Long              'Anzahl Spalten
    Dim AnzZel As Integer           'Anzahl Zellen
    Dim LeZeile As Long             'Letzte Zeile
    Dim AdrErZel As String          'Adresse erste Zelle
    Dim AdrLeZel As String          'Adresse letzte Zelle
    Dim BerLObj As Variant          'Bereich des Listenobjektes
    Dim DataSetCC As Variant        'Daten des Listenobjektes
        
    
    On Error Resume Next
        
    If WS <> "DashBoard" Then
    Set WS = ActiveSheet                'aktives Arbeitsblatt auswählen 'oder auch festschreiben -> Bsp: Sheets("Reklamationen")
    End If
    
    Set oLObj = WS.ListObjects(1)       'Listenobjekt auswählen
    'Set oLRow = oLObj.ListRows.Add     'Listenobjekt um eine neue Zeile ergänzen
        
    AnzRow = oLObj.ListRows.Count                       'Zeilenanzahl Listenobjekt (oLObj.DataBodyRange.Rows.Count)
    AnzCol = oLObj.ListColumns.Count                    'Spaltenanzahl Listenobjekt (oLObj.DataBodyRange.Columns.Count)
    AnzZel = oLObj.DataBodyRange.Cells.Count            'Anzahl Datenzellen (oLObj.Range.Cells.Count 'Anzahl Tabellenzellen)
    LeZeile = oLObj.DataBodyRange.Cells(AnzZel).Row     'Letzte Tabellenzeile
    
    AdrErZel = oLObj.DataBodyRange.Cells(1).Address         'Adresse der ersten Datenzelle (Address(False, False) für Ausgabe ohne $)
    AdrLeZel = oLObj.DataBodyRange.Cells(AnzZel).Address    'Adresse der letzten Datenzelle Address(False, False) für Ausgabe ohne $)
     
    On Error GoTo 0
    
    
    'Wurde das Listenobjekt (die Tabelle) gefunden?
    If oLObj Is Nothing Then
        MsgBox "Die Tabelle konnte nicht gefunden werden.", vbExclamation, "Prüfen!"
        Exit Sub
    End If
    
    'Daten des Listenobjektes (der Tabelle)
    If Not oLObj.DataBodyRange Is Nothing Then
        DataSetCC = oLObj.DataBodyRange(1, 1).Offset(0, 0).Resize(AnzRow, AnzCol).Value
    End If
    
    'MsgBox DataSetCC
     
    'Befindet sich die aktive Zelle im definierten Bereich
    Set BerLObj = Intersect(ActiveCell, oLObj.DataBodyRange(1, 1).Offset(0, 0).Resize(AnzRow, AnzCol))
    If BerLObj Is Nothing Then
        Range(AdrErZel).Select
    End If

    'MsgBox BerLObj
    
    Application.ScreenUpdating = True   'Hier wieder einschalten, da sonst das Blatt bei TAB-Eingabe nicht automatisch gescrollt wird
    
    With oLObj
        If ActiveCell.Address = AdrLeZel Then
            ActiveSheet.Unprotect PW
            .ListRows.Add
            ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:=False, _
                                AllowSorting:=True, AllowFiltering:=True, Password:=PW
            '.Range.Cells(.ListRows.Count + 1, 2).Value = .Range.Cells(.ListRows.Count, 2).Value 'Wert aus Vorzeile übernehmen (Alternative: LeZeile = LeZeile // WS.Range("B" & LeZeile) = WS.Range("B" & LeZeile - 1))
            .Range.Cells(.ListRows.Count + 1, 2).Select     'Zelle selektieren
        Else
            ActiveCell.Offset(0, 1).Select
            ActiveSheet.EnableSelection = xlUnlockedCells
        End If
            
    End With

End Sub

 

Modul 2

'##### Programmierte SendKeys Funktion (fSendKeys), damit der NumLock nicht versehentlich durch das Makro ausgeschaltet wird #####
'##### von: http://access.mvps.org/access/api/api0046.htm #####

Option Explicit

' Declare Type for API call:
      Private Type OSVERSIONINFO
        dwOSVersionInfoSize As Long
        dwMajorVersion As Long
        dwMinorVersion As Long
        dwBuildNumber As Long
        dwPlatformId As Long
        szCSDVersion As String * 128   '  Maintenance string for PSS usage
      End Type

' API declarations:
      Private Declare Function GetVersionEx Lib "Kernel32" _
         Alias "GetVersionExA" _
         (lpVersionInformation As OSVERSIONINFO) As Long
 
     Private Declare Sub keybd_event Lib "user32" _
         (ByVal bVk As Byte, _
          ByVal bScan As Byte, _
          ByVal dwflags As Long, ByVal dwExtraInfo As Long)

      Private Declare Function GetKeyboardState Lib "user32" _
         (pbKeyState As Byte) As Long

      Private Declare Function SetKeyboardState Lib "user32" _
         (lppbKeyState As Byte) As Long

' Constant declarations:
      Const VK_NUMLOCK = &H90
      Const KEYEVENTF_EXTENDEDKEY = &H1
      Const KEYEVENTF_KEYUP = &H2
      Const VER_PLATFORM_WIN32_NT = 2
      Const VER_PLATFORM_WIN32_WINDOWS = 1

Function IsNumLockOn() As Boolean

        Dim o As OSVERSIONINFO
        o.dwOSVersionInfoSize = Len(o)
        GetVersionEx o
        
        Dim keys(0 To 255) As Byte
        GetKeyboardState keys(0)
        
        IsNumLockOn = keys(VK_NUMLOCK)
        
End Function

Sub ToggleNumLock()

        Dim o As OSVERSIONINFO
        o.dwOSVersionInfoSize = Len(o)
        GetVersionEx o
        
        Dim keys(0 To 255) As Byte
        GetKeyboardState keys(0)

          If o.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS Then  '=====Win95
                keys(VK_NUMLOCK) = Abs(Not keys(VK_NUMLOCK))
                SetKeyboardState keys(0)
          ElseIf o.dwPlatformId = VER_PLATFORM_WIN32_NT Then   '=====WinNT
          'Simulate Key Press
            keybd_event VK_NUMLOCK, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0
          'Simulate Key Release
            keybd_event VK_NUMLOCK, &H45, KEYEVENTF_EXTENDEDKEY _
               Or KEYEVENTF_KEYUP, 0
          End If
        
End Sub

Sub mySendKeys(sKeys As String, Optional bWait As Boolean = False)

        Dim bNumLockState As Boolean
        
            bNumLockState = IsNumLockOn()
            SendKeys sKeys, bWait
            If IsNumLockOn() <> bNumLockState Then
            ToggleNumLock
        End If
        
End Sub

Function fSendKeys(sKeys As String, Optional bWait As Boolean = False)

' Function to make it callable from macros
    mySendKeys sKeys, bWait
    
End Function

Arbeitsmappe:

Option Explicit

'##### Bei der aktivierten Arbeitsmappe wird die TAB-Navigation eingeschaltet #####

Private Sub Workbook_Activate()

    If ActiveSheet.Name <> "DashBoard" Then
    Application.OnKey "{TAB}", "mod_Navigation"
    End If

End Sub

'##### Bei der deaktivierten Arbeitsmappe wird die TAB-Navigation wieder ausgeschaltet #####

Private Sub Workbook_Deactivate()

    Application.OnKey "{TAB}"

End Sub

'##### Bei dem aktivierten Arbeitsblatt wird die TAB-Navigation eingeschaltet #####

Private Sub Workbook_SheetActivate(ByVal Sh As Object)

    If Sh.Name <> "DashBoard" Then
    Application.OnKey "{TAB}", "mod_Navigation"
    End If

End Sub

'##### Bei dem deaktivierten Arbeitsblatt wird die TAB-Navigation wieder ausgeschaltet #####

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)

    Application.OnKey "{TAB}"

End Sub

'##### Öffnet bei vorhandenem Auswahlfeld die Auswahl, wenn die Zelle aktiviert wird #####

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)

    Dim Invalidation As Integer
    
    On Error Resume Next

    Invalidation = Target.Validation.Type
        
    On Error GoTo 0
    
    If Sh.Name <> "DashBoard" Then
    If Invalidation = xlValidateList Then
        If Target.Value = "" Then
            fSendKeys "%{Down}"          'Application.SendKeys "%{Down}
    End If
    End If
    End If
    
End Sub

'##### Verhindert, dass ein neues leeres Tabellenblatt eingefügt werden kann #####

Private Sub Workbook_NewSheet(ByVal Sh As Object)

    With Application
        .ScreenUpdating = False
        .DisplayAlerts = False
        Sh.Delete
        .DisplayAlerts = True
        .ScreenUpdating = True
    End With

End Sub

Vielen Dank für eine mögliche Unterstützung

Gruß

Michael


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
Rot Excel Intelligente Tabelle per TAB steuern - bei Zeile 1425 ist Schluß
25.01.2018 08:53:46 Michael R.
Solved
25.01.2018 09:30:53 Gast49241
NotSolved
25.01.2018 11:35:27 frustierter Helfer
NotSolved
25.01.2018 11:38:07 Gast32346
NotSolved
25.01.2018 11:42:52 Gast98401
NotSolved
25.01.2018 12:09:14 Gast8188
NotSolved