Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Zellwertanpassung | Herbers Excel-Forum


Betrifft: Zellwertanpassung von: Frank
Geschrieben am: 12.08.2012 16:12:29

Hallo miteinander,
ich benötige mal Euren Rat und hoffe dass ich mich verständlich ausdrücke. Ich möchte Werte von einem Tabellenblatt (Quelle) in mein Zieltabellenblatt (Ziel) mittels Zellwertfestlegung übertragen.
Sieht folgendermaßen aus.
Im Tabellenmodul (Ziel) steht wenn in A1 die Werte 1 bis 2 ausgewählt wurden - dann MakroA oder MakroB ausführen.

Private Sub Worksheet_Change(ByVal Target As Range)

  With Target
    If .Address(0, 0) = "A1" Then
        If .Value = "1" Then
            Call MakroA
            ElseIf .Value = "2" Then
            Call MakroB
        End If
     End If
    End With
  
End Sub

Im Modulblatt stehen nun die beiden Makros bezogen aber immer auf Zeile 1. Wie muss ich dass denn anstellen, wenn ich in A2 die selbe Auswahl vornehmen möchte und die Zieladresse demzufolge Zeile 2 wäre. Ich muss aber in 17 Zeilen die Abfrage starten - und dort humpelt der Hamster sonst würde ich einfach die beiden Makros nochmal kopieren und Z=1 mit Z=2 ersetzen.
Einfach gesagt - Wenn Zellwert in A2 eine 2 wäre dann bitte MakroB starten aber in Zeile 2 beginnen, wenn in A13 Zellwert eine 1 dann bitte MakroA ausführen aber in Zeile 13 beginnen usw.
https://www.herber.de/bbs/user/81389.xls
Vielleicht hat jemand einen tip.
Danke Gruß Frank

Sub MakroA()
  Application.AskToUpdateLinks = False
        Application.ScreenUpdating = False
 Z = 1  ' übertragen in Zieltabelle - Zeile 1
For i = 4 To 7 Step 1   ' Beginn in Zeile 4 zu suchen bis Zeile 7
  Sheets("Quelle").Select ' Ausgangstabelle
 Worksheets("Quelle").Range(Cells(i, 7), Cells(i, 11)).Copy Destination:=Worksheets("Ziel"). _
Cells(Z, 5) ' Kopiere Zellen von Spalte 7 bis 11 in Zieltabelle nach Zeile 1, Spalte5
    Z = Z + 5  ' gehe 5 Zeilen nach unten von ersten Zielwert
  Next i
     Sheets("Ziel").Select
    Range("A4").Select
          Application.ScreenUpdating = True
   Application.AskToUpdateLinks = True
 End Sub

Sub MakroB()
   Application.AskToUpdateLinks = False
        Application.ScreenUpdating = False
 Z = 1  ' übertragen in Zieltabelle - Zeile 1
For i = 13 To 16 Step 1   ' Beginn in Zeile 13 zu suchen bis Zeile 16
  Sheets("Quelle").Select ' Ausgangstabelle
 Worksheets("Quelle").Range(Cells(i, 7), Cells(i, 11)).Copy Destination:=Worksheets("Ziel"). _
Cells(Z, 5) ' Kopiere Zellen von Spalte 7 bis 11
    Z = Z + 5  ' gehe 5 Zeilen nach unten von ersten Zielwert
  Next i
    Sheets("Ziel").Select
    Range("A4").Select
        Application.ScreenUpdating = True
    Application.AskToUpdateLinks = True
 End Sub

  

Betrifft: AW: Zellwertanpassung von: Hajo_Zi
Geschrieben am: 12.08.2012 16:32:01

Hallo Frank,

benutze Target.row
Dein Beitrag finde ich ein wwenig verwirrend. Darum habe ich keine Ahnung ob ich das richtige getroffen habe.
GrußformelHomepage


  

Betrifft: AW: Zellwertanpassung von: Frank
Geschrieben am: 12.08.2012 17:02:47

Hallo Hajo,

es ist in der Tat verwirrend!! Anders gesagt wenn ich z.B. in Zelle A17 eine 1 eintragen würde -- dann soll bitte MakroA loslaufen aber bitte in Z = 17 beginnen. Bei der Worksheet_Change Anweisung wird sich aber nur auf A1 bezogen das ist mein Problem.
Kann man da einen Bereich festlegen?? Sagen wir - wenn im Bereich A1 bis A17 die Zellwerte 1 bzw. 2 stehen dann das jeweilige MakroA oder MakroB ausführen. Da wäre ich schon mal sehr weit. Dann ist dann noch die Z=1 Zuweisung zu meistern. Klappt eben nur mit A1 zur Zeit.

Danke Frank


  

Betrifft: AW: Zellwertanpassung von: Hajo_Zi
Geschrieben am: 12.08.2012 17:07:56

Hallo Frank,

'A1:A17 die Zellwerte 1 bzw. 2
Option Explicit                             ' Variablendefinition erforderlich

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim RaBereich As Range                  ' Variable für Bereich
    Dim RaZelle As Range                    ' Variable für Zelle
    ' Bereich der Wirksamkeit
    Set RaBereich = Range("A1:A17")
    Set RaBereich = Intersect(RaBereich, Range(Target.Address))
    If Not RaBereich Is Nothing Then
        'ActiveSheet.Unprotect ("Passwort")
        For Each RaZelle In RaBereich
            With RaZelle
                If RaZelle = 1 Then
                    MsgBox "Mache dies " & Target.Row
                ElseIf RaZelle = 2 Then
                    MsgBox "Mache das " & Target.Row
                End If
            End With
        Next RaZelle
        'ActiveSheet.protect ("Passwort")
    End If
    Set RaBereich = Nothing                 ' Variable leeren
End Sub
Gruß Hajo


  

Betrifft: AW: Zellwertanpassung von: Frank
Geschrieben am: 12.08.2012 17:54:11

Hajo, jetzt sind wir ja schon mal ein ganzes stück weiter.
Wie übergebe ich aber jetzt den wert in die jeweiligen Makros?
Versuche es mir gerade aufzumalen. Mach dies ist MakroA - Mach das ist MakroB und jeweils wenn ok betätigt wird muss das makro ausgeführt und der Variablen Z der Target.Row wert übergeben werden.
Kann man auf die MSGBOX verzichten und gleich Call MakroA oder B mit dem target.Row verbinden.
Sorry bei VBA brauch ich Unterstützung. :-)
Hajo ich geb mir die kugel!!


  

Betrifft: AW: Zellwertanpassung von: Hajo_Zi
Geschrieben am: 12.08.2012 17:56:56

Hallo Frank,

schreibe
Markro1 Target.Row
Im Makro mußt Du dann nur vorsehen das auch was übergeben wird.
Makro1(LoZeile as Long)

Gruß Hajo


  

Betrifft: AW: Zellwertanpassung von: Frank
Geschrieben am: 12.08.2012 18:46:07

Hallo Hajo - Danke erstmal für Deine Geduld. Darum geht es mir von Anfang an - wie übergebe ich den Makros den Zeilenanfang. Wie bekomme ich den Zahlenwert aus der Messagebox nach Z=...????
Schönen Abend noch

Gruß Frank


  

Betrifft: AW: Zellwertanpassung von: Frank
Geschrieben am: 16.08.2012 15:09:35

Hallo Hajo hallo all ihr anderen, habe mich jetzt 2 Tage beschäftigt mit Target.row und target.address - ich komme nicht klar. Ich habe mir eine Gültigkeitsliste von1 bis 7 angelegt. Der Zellbereich C1 bis C20 greift auf diese Liste zu.
Des weiteren gibt es 7 Makros welche im Modulblatt stehen
Dieses untenstehende Makro steht in einem Tabellenblatt -- ich muss nun hinbekommen, dass der Adresswert - hier G8 die Listenwerte bekommt. Wenn ich z.B.in Zelle C15 die 7 auswähle soll Makro7 loslaufen. Ich weiß nicht wie ich dies übergeben soll. Du hattest mir das mit ner MSgBox angeboten. Würde auch gehen wenn der Wert der mir angezeigt wird per OK Button dort eingetragen würde. Das wäre das erste von zwei Problemen. Das zweite brauche ich erst in Angriff zu nehmen wenn ich dies geschafft habe. Kannst Du noch mal drüber schauen. Danke



Frank




Private Sub Worksheet_Change(ByVal Target As Range)

  With Target
    If .Address(0, 0) = "G8" Then
      If .Value = "1" Then
        Call Makro1
        ElseIf .Value = "2" Then
        Call Makro2
        ElseIf .Value = "3" Then
        Call Makro3
        ElseIf .Value = "4" Then
        Call Makro4
        ElseIf .Value = "5" Then
        Call Makro5
        ElseIf .Value = "6" Then
        Call Makro6
        ElseIf .Value = "7" Then
        Call Makro7
     End If
     End If
    
  End With
  
End Sub



  

Betrifft: AW: Zellwertanpassung von: Hajo_Zi
Geschrieben am: 16.08.2012 17:30:43

das Makro sollte nicht in einem Tabelleblattt, sondern in dem in dem Du G8 überwachen willst.
Ich baue keine Datei nach, die Zeit hat schon jemand investiert. Ein Link zur Datei wäre nicht schlecht.

Gruß Hajo


  

Betrifft: AW: Zellwertanpassung von: Frank
Geschrieben am: 16.08.2012 21:18:32

Hallo und Guten Abend, ich habe jetzt mal versucht alles verwirrende wegzulassen und folgende Datei hochgeladen.
https://www.herber.de/bbs/user/81458.xls
Ich möchte aus 4 Makros auswählen - momentan verweist die Targetadresse in der Worksheet_Change Anweisung starr auf C4. Dort muss ich irgendwie das Target.Row hinbekommen um anschließend dem Makro1 bis 4 die Zielzeile zu übergeben.

Gruß Frank


  

Betrifft: AW: Zellwertanpassung von: Hajo_Zi
Geschrieben am: 17.08.2012 05:55:00

Hallo Frank,

Option Explicit

' C4:C11 Zellwerte 1-4
Private Sub Worksheet_Change(ByVal Target As Range)
    With Target
        If .Column = 3 And .Row < 5 Then
            If .Value = "1" Then
                Call Makro1
            ElseIf .Value = "2" Then
                Call Makro2
            ElseIf .Value = "3" Then
                Call Makro3
            ElseIf .Value = "4" Then
                Call Makro4
            End If
        End If
    End With
End Sub

Gruß Hajo


  

Betrifft: AW: Zellwertanpassung von: Frank
Geschrieben am: 17.08.2012 14:07:21

Hallo Hajo,

genanau so... Danke

Gruß Frank


  

Betrifft: AW: Zellwertanpassung von: Frank
Geschrieben am: 16.08.2012 23:24:17

Problem gelöst - habe Zeile MsgBox... mit z.B. Range("A1") = Target.Row ersetzt und im Makro den Zeilenbezug auf A1 gesetzt.
Danke für die Hilfe

Gruß Frank