Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1556to1560
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
Inhaltsverzeichnis

Zellenwerte in Eingabemeldung, dynamisch -> Lupe

Zellenwerte in Eingabemeldung, dynamisch -> Lupe
13.05.2017 16:40:52
Peter
Hallo zusammen
Ich suche eine Möglichkeit, die Inhalte der Zellen, z.B. der Spalten AF4:AF; AU4:AU dynamisch in die Zellen-Eingabemeldungen zu kopieren (Datenüberprüfung). Auf diese Weise habe ich eine Art Lupenfunktion.
Hat jemand eine Idee, wie zu realisieren?
Danke.
Viele Grüsse,
Peter

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zellenwerte in Eingabemeldung, dynamisch -> Lupe
13.05.2017 17:09:05
Sepp
Hallo Peter,
in das Modul der Tabelle.
' **********************************************************************
' Modul: Tabelle1 Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range, lngLast As Long
Dim vntList As Variant, vntValues As Variant
Dim strList As String

lngLast = Me.UsedRange.SpecialCells(xlCellTypeLastCell).Row

If Not Intersect(Target, Union(Range("AF4:AF" & lngLast), Range("AU4:AU" & lngLast))) Is Nothing Then
  vntValues = Range(Cells(4, Target.Column), Cells(lngLast, Target.Column))
  vntList = toArraySorted(vntValues)
  strList = Join(vntList, vbLf)
  For Each rng In Range(Cells(4, Target.Column), Cells(lngLast, Target.Column)).Cells
    With rng.Validation
      .Delete
      .Add Type:=xlValidateInputOnly
      .InputMessage = strList
    End With
  Next
End If
End Sub

Private Function toArraySorted(Field As Variant, Optional Uniqe As Boolean = True) As Variant
Dim objArrayList As Object
Dim lngR As Long, lngC As Long

On Error GoTo ErrExit

Set objArrayList = CreateObject("System.Collections.Arraylist")

With objArrayList
  For lngR = LBound(Field, 1) To UBound(Field, 1)
    For lngC = LBound(Field, 2) To UBound(Field, 2)
      If Not .Contains(Trim(Field(lngR, lngC))) Or Not Uniqe Then
        If Field(lngR, lngC) <> "" Then .Add Trim(Field(lngR, lngC))
      End If
    Next
  Next
  .Sort
  toArraySorted = .toArray
End With

Exit Function
ErrExit:
toArraySorted = -1
End Function

Gruß Sepp

Anzeige
AW: Zellenwerte in Eingabemeldung, dynamisch -> Lupe
13.05.2017 17:30:36
Peter
Hallo Sepp
Danke für Deine geschätzte Anwort.
Das ist genau das was ich suche, jedoch werden alle Zelleninhalte in die Eingabemeldung geschrieben. D.h. jede Zelle hat die gleiche Eingabemeldung, nämlich die Inhalte aller Zellen. Jedoch sollte in die jeweilige Eingabemeldung, nur der Wert der entsprechenden Zelle eingefügt und angezeigt werden. D.h. jede Zelle hat seine individuelle Eingabemeldung, der Inhalte der Zelle. Lässt sich das anpassen?
Danke.
Viele Grüsse
Peter
AW: Zellenwerte in Eingabemeldung, dynamisch -> Lupe
13.05.2017 17:39:04
Sepp
Hallo Peter,
dann so.
' **********************************************************************
' Modul: Tabelle1 Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range, lngLast As Long

lngLast = Me.UsedRange.SpecialCells(xlCellTypeLastCell).Row

If Not Intersect(Target, Union(Range("AF4:AF" & lngLast), Range("AU4:AU" & lngLast))) Is Nothing Then
  For Each rng In Intersect(Target, Union(Range("AF4:AF" & lngLast), Range("AU4:AU" & lngLast))).Cells
    If Len(rng) Then
      With rng.Validation
        .Delete
        .Add Type:=xlValidateInputOnly
        .InputMessage = rng.Text
      End With
    Else
      rng.Validation.Delete
    End If
  Next
End If
End Sub

Gruß Sepp

Anzeige
AW: Zellenwerte in Eingabemeldung, dynamisch -> Lupe
13.05.2017 18:22:03
Peter
Hallo Sepp
Ja, genau so! Jedoch werden, im Gegensatz zur ersten Lösung, die Zeilenumbrüche der Zelle nicht übernommen. Das kommt ziemlich unübersichtlich rüber, d.h. wenn ein Text einer Zelle in vier Zeilen aufgeteilt ist, dass dann in der Eingabemeldung, der Zelleninhalt ebenfalls mit vier Zeilenumbrüche dargestellt wird. Wie müsste ich den Code anpassen, damit die Zeilenumbrüche übernommen werden?
Danke.
Viele Grüsse,
Peter
AW: Zellenwerte in Eingabemeldung, dynamisch -> Lupe
13.05.2017 18:40:11
Sepp
Hallo Peter,
die Größe der Eingabemeldung lässt sich nicht ändern, da wirst du auch mit den Umbrüchen Pech haben.
Gruß Sepp

Anzeige
Alternative mit einem Shape
13.05.2017 19:09:21
Sepp
Hallo Peter.
probier mal.
' **********************************************************************
' Modul: Tabelle1 Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************

Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim objShape As Object, lngLast As Long, strComment As String


If Not Intersect(Target, Union(Range("AF4:AF" & Rows.Count), Range("AU4:AU" & Rows.Count))) Is Nothing Then
  If Target.Count = 1 Then
    On Error GoTo NoShape
    HasShape:
    Set objShape = Me.Shapes("txtComment")
    
    With objShape
      .Visible = False
      .TextFrame.Characters.text = ""
      If Target.Count = 1 Then
        strComment = Target.text
        If strComment <> "" Then
          strComment = breakText(strComment, Cint(Target.ColumnWidth * 1.4))
          .TextFrame.Characters.text = strComment
          .Top = Target.Top + 5
          .Left = Target.Left + Target.Width + 5
          .Visible = True
        End If
      End If
    End With
  End If
Else
  On Error Resume Next
  Me.Shapes("txtComment").Visible = False
End If
Set objShape = Nothing

Exit Sub

NoShape:
If Err.Number = -2147024809 Then
  If makeComment Then
    Resume HasShape
  Else
    Exit Sub
  End If
End If
End Sub

Private Sub dummy()
Me.Shapes(Application.Caller).Visible = False
End Sub

Private Function makeComment() As Boolean
Dim objShape As Shape

On Error GoTo ErrExit

Set objShape = ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, 0#, 0#, 10#, 10#)

With objShape
  .Name = "txtComment"
  .Visible = msoFalse
  .OnAction = Me.Name & ".dummy"
  .Fill.ForeColor.RGB = RGB(255, 255, 225)
  .Line.ForeColor.RGB = RGB(100, 100, 100)
  .TextFrame.HorizontalAlignment = xlHAlignLeft
  .TextFrame.VerticalAlignment = xlVAlignTop
  .TextFrame.AutoSize = True
  .TextFrame2.WarpFormat = msoWarpFormat1
End With

makeComment = Err.Number = 0
Exit Function
ErrExit:
makeComment = False
End Function

Private Function breakText(ByVal text As String, ByVal länge As Integer) As String
Dim tmp As String, str As String
Dim lenT As Integer, i As Integer, n As Integer
lenT = Len(text)
n = 1
i = 1
Do
  tmp = Mid(text, i, länge)
  If lenT - i >= länge Then
    n = Len(tmp) - InStr(1, StrReverse(tmp), " ") + 1
  Else
    n = Len(tmp)
  End If
  str = str & Trim(Left(tmp, n)) & vbLf
  i = i + n
Loop While i < lenT
breakText = Left(str, Len(str) - 1)
End Function

Gruß Sepp

Anzeige
AW: Alternative mit einem Shape
13.05.2017 19:52:32
Peter
Hallo Sepp
Yeph, PERFEKT!
Ich habe den "* 1.4" Wert auf 5 erhöht und jetzt läuft es perfekt!!
Ein Problem habe jedoch noch, ich bekomme die alten, vorherigen Werte nicht raus. D.h. ich habe jetzt pro Zelle zwei Zelleninformations-PopUps. Man müsste zuvor eine Löschfunktion einbauen, so dass zuerst die alte Eingabeinformation gelöscht und erst dann die neue erstellt wird, wie könnte so eine Löschfunktion aussehen?

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If iVerfolgung Then ufVerfolgung.Aktualisieren  'wird für die Lupe benötigt
Dim objShape As Object, lngLast As Long, strComment As String
If Not Intersect(Target, Union(Range("AF4:AF" & Rows.Count), Range("AU4:AU" & Rows.Count))) Is  _
Nothing Then
If Target.Count = 1 Then
On Error GoTo NoShape
HasShape:
Set objShape = Me.Shapes("txtComment")
With objShape
.Visible = False
.TextFrame.Characters.text = ""
If Target.Count = 1 Then
strComment = Target.text
If strComment  "" Then
'strComment = breakText(strComment, CInt(Target.ColumnWidth * 1.4))
strComment = breakText(strComment, CInt(Target.ColumnWidth * 5))
.TextFrame.Characters.text = strComment
.Top = Target.Top + 5
.Left = Target.Left + Target.Width + 5
.Visible = True
End If
End If
End With
End If
Else
On Error Resume Next
Me.Shapes("txtComment").Visible = False
End If
Set objShape = Nothing
Exit Sub
NoShape:
If Err.Number = -2147024809 Then
If makeComment Then
Resume HasShape
Else
Exit Sub
End If
End If
End Sub

Danke
Viele Grüsse,
Peter
Anzeige
AW: Alternative mit einem Shape
13.05.2017 19:58:10
Sepp
Hallo Peter,
alle betroffenen Zellen auswählen > Datenüberprüfung > alle löschen
Gruß Sepp

AW: Alternative mit einem Shape
13.05.2017 20:17:08
Peter
Hallo Sepp
Ja genau so hab ich es gemacht :-)
Nochmals danke für Deine wertvolle und geschätzte Hilfe.
Viele Grüsse,
Peter
AW: Alternative mit einem Shape
13.05.2017 19:58:25
Peter
Hallo Sepp
Ich konnte die erste Variante löschen.
Wirklich eine sehr schöne und elegante "Lupen-Lösung", echt super, DANKE Dir!
Viele Grüsse
Peter

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige