Laufzeitfehler mit Userform nur in einer Tabelle
#1
Hallo zusammen,

habe eine Userform erstellt, die mir einen Wert aus einer bestimmten Tabelle rundet und anzeigt, wenn ich auf einen Button klicke. Dieser Wert ändert sich beim Arbeiten mit dem Dokument und soll deshalb immer zur Hand sein.

Funktioniert soweit alles sehr gut, allerdings kriege ich einen Laufzeitfehler 438 : Objekt unterstützt diese Eigenschaft oder Methode nicht. Aber NUR in einer Tabelle, bei allen anderen funktioniert es. Ein Klick auf Debuggen markiert mir folgende Zeile:

TextBox1.Value = (.....)

Code:
Private Sub CommandButton1_Click()
Dim objWB As Workbook

Set objWB = Workbooks("20170522_Fahrzeuganzahl_Netto_v2.0.xlsm")

TextBox1.Value = Round(objWB.Worksheets("Fahrzeuge").Range("R34").Value, [2])
End Sub
In der Tabelle in der das Problem Auftritt befinden sich 2 Module, die eine Zeile mit allen Formeln und Formatierungen nach unten kopiert/bzw diese wieder löscht.
Modul 1:

Code:
Sub NeueZeile()
Dim Zeile As Long

With ActiveSheet
  'Zeilennummer:
  Zeile = .Cells.Find("*", , , , xlByRows, xlPrevious).Row + 1
  'Kopieren:
  Intersect(.Rows(Zeile - 1), .UsedRange).Copy
  .Cells(Zeile, 1).PasteSpecial Paste:=xlPasteFormats            'Formate
  .Cells(Zeile, 1).PasteSpecial Paste:=xlPasteFormulas           'Formeln
  Application.CutCopyMode = False
 
  'Werte löschen
  Intersect(.Rows(Zeile), .UsedRange).SpecialCells(xlCellTypeConstants).ClearContents
 
  'Nummer in Spalte B:
  .Cells(Zeile, 2).Value = .Cells(Zeile - 1, 2).Value + 1
 
 
 
End With
End Sub
Modul 2:

Code:
Sub Tabelleleeren()
   On Error Resume Next
   Selection.SpecialCells(xlCellTypeConstants, 1).Select
   On Error Resume Next
   Selection.ClearContents
   On Error Resume Next
   Range("A7", "AK300").Clear
   Range("B6") = "1"
   
End Sub
Kommt es hier irgendwo zu einem Konflikt? Da mir Excel nur diese eine Zeile markiert, die ja in anderen Tabellen wunderbar funktioniert, bin ich leider etwas ratlos.
Ich nutze Excel 2010
Gruß Dubsepp
Top
#2
Hallo,

versuche es mal ohne die eckigen Klammern.

Code:
TextBox1.Value = Round(objWB.Worksheets("Fahrzeuge").Range("R34").Value, 2)
Gruß Stefan
Win 10 / Office 2016
[-] Folgende(r) 1 Nutzer sagt Danke an Steffl für diesen Beitrag:
  • Dubsepp
Top
#3
(22.05.2017, 12:50)Steffl schrieb: Hallo,

versuche es mal ohne die eckigen Klammern.

Code:
TextBox1.Value = Round(objWB.Worksheets("Fahrzeuge").Range("R34").Value, 2)

Super! Das hats gelöst!
Kannst du mir noch erklären warum das dann nur in dieser Tabelle nicht funktioniert hat? Huh
Top
#4
Hallo,

keine Ahnung. Ich hätte eher vermutet, dass deine Lösung mit den eckigen Klammern überhaupt nicht funktioniert. Ein Test im Direktfenster hat mich jetzt aber Besseres belehrt.

Zitat:?round(activecell.Value,2)
2,35
?round(activecell.Value,[2])
2,35
?activecell.Value
2,34567
Gruß Stefan
Win 10 / Office 2016
Top
#5
Hallo Stefan,

die eckigen Klammern sind im Prinzip so etwas wie die Kurzform von Evaluate.

Mal was zum Test:
Code:
Sub test()
MsgBox 2 & vbLf & [2] & vbLf & Application.Evaluate(2) & vbLf & Application.Evaluate("C2") & vbLf & [C2] & vbLf & [2+2]
End Sub

Am deutlichsten ist es an der Stelle mit [2+2]

Es kann aber sein, dass man das nicht überall einsetzen kann. Ich habe die Erfahrung gemacht, dass Excel sich bei bestimmten Aktionen weigert, in der codezeile einen Ausdruck z.B. per Formel unmittelbar zu erzeugen. Man kann da nur eine Variable verwenden, die man zuvor füllt. Vielleicht ist es hier genau so.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 2 Nutzer sagen Danke an schauan für diesen Beitrag:
  • Dubsepp, Steffl
Top
#6
(30.05.2017, 21:58)schauan schrieb: Hallo Stefan,

die eckigen Klammern sind im Prinzip so etwas wie die Kurzform von Evaluate.

Mal was zum Test:
Code:
Sub test()
MsgBox 2 & vbLf & [2] & vbLf & Application.Evaluate(2) & vbLf & Application.Evaluate("C2") & vbLf & [C2] & vbLf & [2+2]
End Sub

Am deutlichsten ist es an der Stelle mit [2+2]

Es kann aber sein, dass man das nicht überall einsetzen kann. Ich habe die Erfahrung gemacht, dass Excel sich bei bestimmten Aktionen  weigert, in der codezeile einen Ausdruck z.B. per Formel unmittelbar zu erzeugen. Man kann da nur eine Variable verwenden, die man zuvor füllt. Vielleicht ist es hier genau so.

Vielen Dank für die Erklärung!

Wieder was gelernt!

Gruß Dubsepp
Top
#7
Hallo Sepp,

es ist in der Regel nicht nötig, immer den Text des Vorposters zu zitieren. Benutze bitte zum normalen Antworten den entsprechenden "Antworten"-Button rechts unten.
Gruß Günter
Jeder Fehler erscheint unglaublich dumm, wenn andere ihn begehen.
angebl. von Georg Christoph Lichtenberg (1742-1799)
[-] Folgende(r) 1 Nutzer sagt Danke an WillWissen für diesen Beitrag:
  • Dubsepp
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste