Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1428to1432
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
Inhalt aus Textbox in Variable legen
17.06.2015 14:07:58
Florian
Hallo Zusammen,
ich habe ca. 250 Excel-Dokumente mit Explosionszeichnungen.
Auf den Zeichnungen liegen kleine Textboxen mit der Bestellnummer des mittels Linie verbundenen Bauteils.
Da es nicht immer Textboxen sind die der Ersteller verwendet hat sondern manchmal auch z.B. Rechtecke mit Text (scheint in Excel unterschieden zu warden) habe ich vor einiger Zeit die VBA-Zeilen so geändert, dass bei verschiedenen Zeichenobjekten funktionieren.
Sub BestNr_in_Zwischanablage()
If TypeName(Application.Caller)  "String" Then Exit Sub
With ActiveSheet.Shapes(Application.Caller)
Select Case .Type
Case 1, 17: BestNr = .DrawingObject.Text
Case Else: MsgBox "Ungültiges Textfeld"
End Select
End With
End Sub

Nun hat unsere IT die Notebooks mit Windows 7 (64bit) und Office 2010 ausgestattet.
Plötzlich funktionieren diese Dokumente mit den Explosionszeichnungen aber nicht mehr zuverlässig.
Einige Textfelder funktionieren noch, andere starten bein anklicken zwar das Makro aber der Inhalt der Variable entspricht dem letzten funktionirendem Textfeld und neu eingefügte Textfelder (Copy&Paste) fügen die Nummer in die Variable ein von der ich das Textfeld kopiert habe und nicht das, welches sich jetzt in der Zelle befindet.
Kennt jemand ähnliche Sympthome oder weiß einen Ansatz für die Lösung meines Problems?
Kann man irgendwo ersehen, welche "ID" ein Testfeld in Excel hat?
Vielleicht wird bei Copy&Paste eine 100%ige Kopie der Ursprungsdatei erstellt und beide haben die gleiche "interne Kennung"?
Danke und Gruß
Florian

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Inhalt aus Textbox in Variable legen
17.06.2015 15:22:41
fcs
Hallo Florian,
ich weiß jetzt nicht welches Unglück die 64-bit-Version des Betriebssystems hier noch über einem ausschütten kann.
Ich hatte aber auch schon Probleme mit Application.Caller. Und zwar dann, wenn man bei Shapes nicht den automatisch von Excel vergebenen Namen eines Shapes verwendet, sondern diesen individuell anpasst. Dann wird beim Kopieren auch der individuelle Name kopiert und Application.Caller liefert immer den Namen und die Eigenschaften des Orignals.
Das konnte ich nur bereinigen, indem ich die Namen der Shapes ohne doppelte vergeben hab.
Nachfolgend dein Makro inkl. MsgBox, die einige Eigenschaften des Caller-Shapes anzeigt.
Mit dem zweiten Makro werden die Eigenschaften von bestimmten Shapes in einem Tabellenblatt gelistet.
Gruß
Franz
Public Function fncNameBereich(Bereich As Range) As String
'Als Bereich muss die Zelle links-oben im Namenbereichs gewählt werden
'Probleme gibt es allerdings wenn sich Namensbereiche überlagern, d.h. _
die gleiche linke-obere Zelle haben)
Dim objName As Name
Application.Volatile
On Error GoTo Fehler
For Each objName In ThisWorkbook.Names
If Not Intersect(Bereich, objName.RefersToRange.Range("A1")) Is Nothing Then
fncNameBereich = objName.NameLocal
Exit For
End If
Next
Exit Function
Fehler:
End Function
Sub BestNr_in_Zwischanablage()
Dim objData As New MSForms.DataObject
Dim objShape As Shape
BestNr = ""
If TypeName(Application.Caller)  "String" Then Exit Sub
Set objShape = ActiveSheet.Shapes(Application.Caller)
With objShape
Select Case .Type
Case 1, 17: BestNr = .DrawingObject.Text
Case Else: MsgBox "Ungültiges Textfeld"
End Select
End With
MsgBox "Textbox/Rechteck-Name: " & objShape.Name & vbLf _
& "ID: " & objShape.ID & vbLf _
& "Text: " & BestNr
objData.SetText BestNr
objData.PutInClipboard
End Sub
Sub Shapes_Listen_OnAction()
'Liste Shapes mit einem bestimmten zugewiesenen Makro
Dim wks As Worksheet, wksListe As Worksheet, Zeile As Long
Dim strOnAction As String
strOnAction = "BestNr_in_Zwischanablage"
Dim objShape As Shape
Set wks = ActiveSheet
Application.Workbooks.Add Template:=xlWBATWorksheet
Set wksListe = ActiveWorkbook.Worksheets(1)
With wksListe
.Cells(1, 1) = "Datei"
.Cells(1, 2) = wks.Parent.Name
.Cells(2, 1) = "Blatt"
.Cells(2, 2) = "'" & wks.Name
.Cells(2, 5) = "OnAction"
.Cells(2, 6) = "'" & strOnAction
Zeile = 4
.Cells(Zeile, 1) = "ID"
.Cells(Zeile, 2) = "Shape-Name"
.Cells(Zeile, 3) = "TopLeftCell"
.Cells(Zeile, 4) = "Top-Zeile"
.Cells(Zeile, 5) = "Left-Spalte"
.Cells(Zeile, 6) = "Text"
End With
Cells(Zeile + 1, 1).Select
ActiveWindow.FreezePanes = True
For Each objShape In wks.Shapes
With objShape
Select Case .Type
Case 1, 17
If .OnAction  "" Then
If Mid(.OnAction, InStr(1, .OnAction, "!")) = "!" & strOnAction Then
Zeile = Zeile + 1
wksListe.Cells(Zeile, 1) = .ID
wksListe.Cells(Zeile, 2) = .Name
wksListe.Cells(Zeile, 3) = .TopLeftCell.Address(False, False, xlA1)
wksListe.Cells(Zeile, 4) = .TopLeftCell.Row
wksListe.Cells(Zeile, 5) = .TopLeftCell.Column
wksListe.Cells(Zeile, 6) = "'" & .DrawingObject.Text
End If
End If
Case Else
'do nothing
End Select
End With
Next
wksListe.Columns.AutoFit
End Sub

Anzeige

304 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige