Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
936to940
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
936to940
936to940
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Excel 2003 VBA

Excel 2003 VBA
27.12.2007 12:10:00
Flinx
Hallo zusammen,
Ich habe da ein Problem, bei dessen Lösung ihr mir vielleicht auf die Sprünge helfen könntet.
Absicht:
Zeile bis zur aktiven Zelle markieren
bei Auswahl der nächsten Zelle Markierung zurücksetzen und neuen Bereich markieren
..und das in allen Tabellen einer Arbeitsmappe und in allen Arbeitsmappen
Lösung:
über Klassenmodul (Beispiele dafür gab es genug),
funktioniert auch innerhalb einer Tabelle, nach dem Wechsel in eine andere Tabelle/Arbeitsmappe auch,
jedoch wird die letzte Markierung in der Vorgängertabelle nicht aufgehoben. Es erscheint auch eine Fehlermeldung, die ich mit meinen Kenntnissen aber nicht in eine Lösung umsetzen kann.
Ich habe mal versucht, das Ganze so verständlich wie mir möglich, auszukommentieren, hoffe, ich bringe da nicht zu viel durcheinander
Modul1
Option Explicit
Dim oKlasseExcel As clsExcelApp

Private Sub ExcelWatch_Initialize()
Set oKlasseExcel = New clsExcelApp
Set oKlasseExcel.ExcelWatch = Application
End Sub



Private Sub ExcelWatch_Terminate()
Set oKlasseExcel = Nothing
End Sub


Klassenmodul
Option Explicit
Public WithEvents ExcelWatch As Application
Public intc As Integer 'Wert für Vorgängerzelle Zeile
Public intr As Integer 'Wert für Vorgängerzelle Spalte


Private Sub ExcelWatch_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
'Die Prozedur markiert die Zeile bis zur aktiven Zelle, setzt die Markierung bei Wechsel
'zu einer anderen Zelle innerhalb des Blattes wieder zurück und markiert den neuen Bereich
Dim newc As Integer 'Spalte der aktiven Zelle
Dim newr As Integer 'Zeile der aktiven Zelle
Dim myrangeold As Range 'Range der Vorgängerzelle
Dim myRangeNew As Range 'Range der aktiven Zelle
'? die Namen des aktuellen Tabellenblattes sowie der Arbeitsmappe vorhalten,
'da diese eventuell beim Wechsel auf ein anderes Tabellenblatt / Arbeitsmappe benötigt werden ?
Dim mysheet As String
Dim myWorkbook As String
'Hier werden die Werte der alten Zelle vorgehalten
If intc  0 And intr  0 Then
For intc = 1 To intc
Set myrangeold = Sh.Range(Cells(intr, 1), Cells(intr, intc))
myrangeold.Borders(xlEdgeBottom).LineStyle = xlNone
Next
End If
'Die aktive Zeile erhält einen Unterstrich bis zur aktiven Zelle
newc = ActiveCell.Column
newr = ActiveCell.Row
For newc = 1 To newc
Set myRangeNew = Sh.Range(Cells(newr, newc), ActiveCell)
myRangeNew.Borders(xlEdgeBottom).LineStyle = xlDash
myRangeNew.Borders(xlEdgeBottom).Weight = xlThin
myRangeNew.Borders(xlEdgeBottom).ColorIndex = 3
Next
'MsgBox ("neue Adresse: " & newc & "," & newr)
'Der Wert der aktiven Zelle wird den intc und intr Variablen als "alte" Zelle zugewiesen
intc = ActiveCell.Column
intr = ActiveCell.Row
mysheet = ActiveSheet.Name
myWorkbook = ActiveWorkbook.Name
'MsgBox ("Zelle " & intc & "," & intr & " in Sheet " & mysheet & " in WB " & myWorkbook)
End Sub



Private Sub ExcelWatch_SheetActivate(ByVal Sh As Object)
'Bei Wechsel des Sheets wird die Markierung im Vorgängerblatt aufgehoben
' hm..oder sollte sie zumindest :-)
Dim myWorkbook As String
Dim mysheet As String
Dim myrangeold As Range
If intc  0 And intr  0 Then
For intc = 1 To intc
Set myrangeold = Sh(mysheet).Range(Cells(intr, 1), Cells(intr, intc))
myrangeold.Borders(xlEdgeBottom).LineStyle = xlNone
Next
End If
End Sub


1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Excel 2003 VBA
27.12.2007 12:32:34
Original
Hi,
dein Code klappt nur im aktiven Blatt.
die zeile
Set myrangeold = Sh.Range(Cells(intr, 1), Cells(intr, intc))
muss richtig so refenrenziert werden:
Set myrangeold = Sh.Range(Sh.Cells(intr, 1), Sh.Cells(intr, intc))
mfg Kurt

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige