Microsoft Excel

Herbers Excel/VBA-Archiv

Abänderung vom Code

Betrifft: Abänderung vom Code von: Carl
Geschrieben am: 20.11.2014 17:50:31

Hallo,

ich würde gern diesen Code so abändern, dass er nur in bestimmten Spalten und Zellen greift.

Public r As Range
   Private Sub Worksheet_Change(ByVal Target As Range)
   For Each r In Target
       With r
           .HorizontalAlignment = xlCenter
           If (.Value - Int(.Value)) = 0 Then
               .NumberFormat = "0"
           Else
               .NumberFormat = "# ?/?"
           End If
       End With
   Next r
   End Sub
   
   Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   Set r = Target
   End Sub
Siehe auch hier: https://www.herber.de/forum/archiv/1380to1384/t1383320.htm#1383320

  

Betrifft: Target.Rows & Target.Columns von: Frank
Geschrieben am: 21.11.2014 10:44:22

Hallo Carl,

Target as Range hat die Eigenschaften Rows und Columns, die man auswerten kann.
dazu müsstest Du den Code innerhalb der WITH-Anweisungen in zwei weitere IF-Abfrage einschliessen:

if .Rows=DeineZeile Then
   if .Columns=DeineSpalte Then
      .HorizontalAlignment = xlCenter
      ...
      End If
   end if
end if
Grüsse,
Frank


  

Betrifft: AW: Target.Rows & Target.Columns von: Carl
Geschrieben am: 22.11.2014 12:41:03

Hallo Frank,

irgendwie komme ich da nicht ganz zurecht. Deshalbe führe ich die Zellen auf, wo der Code greifen soll. Es sind genau die Zellen, die auch im verlinkten Posting aufgeführt sind. Und zwar diese Zellen: A4 - M4, A11 - M11, A18 - M18 und A25 - M25. Ich habe leider erst jetzt bemerkt, dass es Probleme gibt, wenn man den Code in der kompletten Tabelle (Datei) verwendet. Denn es gibt auch Zellen, da stehen noch andere Kommazahlen drin. Und die sollen nicht verändert werden. Aber wenn ich in diese Zellen z.B 2,4 eingebe, dann wird aus der Zahl 2,4 die Zahl 2 2/5. Klar, ich könnte die betroffen Zellen entsprechen formatieren. Aber durch den Code fehlt auch noch "Rückgängig". Und darauf möchte ich nicht verzichten.


  

Betrifft: AW: Target.Rows & Target.Columns von: Crazy Tom
Geschrieben am: 22.11.2014 12:51:28

Hallo

so kannst du die Ausführung eines Makros nur auf bestimmte Bereiche einschränken

    Dim rngBereich As Range
    Set rngBereich = Range("A4:M4, A11:M11, A18:M18, A25:M25")
    If Not Intersect(Target, rngBereich) Is Nothing Then
        '###hier dein Code###
    End If

MfG Tom


  

Betrifft: AW: Target.Rows & Target.Columns von: Carl
Geschrieben am: 23.11.2014 11:21:03

Hallo Tom,

danke, aber leider ist mir unbekannt, welchen Teil vom Code ich wo und wie im Bereich '###hier dein Code### einzusetzen habe.


  

Betrifft: AW: Target.Rows & Target.Columns von: Crazy Tom
Geschrieben am: 23.11.2014 11:30:20

Hallo Carl

vielleicht passt es so?

Option Explicit

Public r As Range

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rngBereich As Range
    Set rngBereich = Range("A4:M4, A11:M11, A18:M18, A25:M25")
    If Not Intersect(Target, rngBereich) Is Nothing Then
        For Each r In Target
            With r
                .HorizontalAlignment = xlCenter
                If (.Value - Int(.Value)) = 0 Then
                    .NumberFormat = "0"
                Else
                    .NumberFormat = "# ?/?"
                End If
            End With
        Next r
    End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Set r = Target
End Sub

MfG Tom


  

Betrifft: AW: Target.Rows & Target.Columns von: Carl
Geschrieben am: 24.11.2014 11:07:53

Hallo Tom,

das funktioniert super. Vielen Dank. Nur noch eine kurze Frage:

Könnte man denn auch ohne "Nebenwirkungen" den Bereich im Code so gestalten, wenn die Eingabe trotzdem nur in den vorher benannten Zellen erfolgt?

Set rngBereich = Range("A4:M25")



  

Betrifft: AW: Target.Rows & Target.Columns von: Crazy Tom
Geschrieben am: 24.11.2014 11:21:05

Hallo

hierbei

Set rngBereich = Range("A4:M25")

wirkt der Code ohne "Nebenwirkungen" ;-) im kompletten Bereich von A4 bis A25
und das wolltest du laut deiner Vorgabe ja nicht

MfG Tom


  

Betrifft: AW: Target.Rows & Target.Columns von: Carl
Geschrieben am: 24.11.2014 13:12:56

Hallo Tom,

"und das wolltest du laut deiner Vorgabe ja nicht..."

Dein Code passt schon. Und "Rückgängig" funktioniert auch in den Zellen wo Dein Code nicht greifen soll. Aber der Hintergedanke von meiner Frage war der:

Der ursprüngliche Code wirkt sich ja auf alle Zellen der Tabelle aus. Und in (z.B.) A29:M29 stehen Zahlen, da soll dieser Code nicht greifen (siehe meine Antwort an Frank). Fest sind nur die Zellen A4:M25. Zwischen A4:M25 steht zwar auch Text, und auch Wochentage in Zahlen (z.B. 04.10.), aber da wirkt sich ja der Code nicht negativ aus.