Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1896to1900
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

Worksheets-Objekt-Zugriff in ActiveWorkb

Worksheets-Objekt-Zugriff in ActiveWorkb
10.09.2022 08:12:35
Wolfgang
Hallo,
die anhängige Arbeitsmappe scheitert an mehreren VBA-Problemen, die ich nicht beheben kann, weil ein scheinbar einfaches Problem
ich nicht lösen kann, all' das Microsoft Zeug zum Zugriff auf ein Arbeitsblatt in der aktive Arbeitsmappe funktioniert nicht,
ich komme nicht an das Worksheets-Aufzählungs-Objekt heran, weder mit "ActiveWorkbook" noch "ThisWorkbook".
Eigentlich sollte das "Sub Debug_WindRose" eine Funktion, die in einer Zelle aufgerufen werden und eine Zell-Referenz übernehmen,
sowie einen String in die aufrufende Zelle zurückgeben,
eine Function kann man aber nicht debuggen (@Microsoft:Warum eigentlich nicht?)
An den auskommentierten Zeilen sieht man dies und auch,
daß ich auf verschiedenen Wegen versuchen will an mein Arbeitsblatt "WindRose" 'rankommen will, um meinen Rückgabewert auszulesen.

Sub Debug_WindRose()
'09.09.22 10:30
'Function WindRose(RefKurs)
'Function WindRose(RefKurs As Range) As String
'Dieses Makro arbeitet nur korrekt, wenn im Quell-Arbeitsblatt die Winkel in aufsteigender Abfolge eingetragen sind
Const Tbl As String = "WindRose" 'Das geht und hat nix mit meinem Problem zu tun
'Dim RefKurs As Range
'Dim RefKurs As Object
Dim Kurs As Double
Dim ap As Application
Dim wb As Workbook
Dim ws As Worksheet
Dim UR As Range
Dim E As Range
Dim rw As Long
Dim i As Integer
Dim d, r As Double
Dim rtnWindRose As String
On Error GoTo ErrorHandlerApp
'Falls Microsoft's GetObect nicht geht, dann das hier
'Set ap = "Microsoft Excel"
'From
'https://docs.microsoft.com/de-de/office/vba/language/reference/user-interface-help/getobject-function
Set ap = GetObject(, "Excel.Application") 'Mit oder ohne Set beim Durchsteppen Debuggerfehler 91
If Err.Number  0 Then ExcelWasNotRunning = True
Err.Clear    ' Clear Err object in case error occurred.
On Error GoTo ErrorHandlerWB
Set wb = ap.ThisWorkbook
On Error GoTo ErrorHandlerWS
Set ws = wb.Worksheets(Tbl)
On Error GoTo ErrorHandlerDefault
UR = ws.UsedRange 'Hier meckert Compiler 91 ObjektVariable nicht definiert, hat nix mit Const Tbl zu tun
Kurs = -0.012114
Kurs = CDbl(Kurs)
rw = UR.Rows.Count 'Damit Do While nicht überläuft
r = 360 'Größter Winkel in der Tabelle = Sinus 0,958915723
On Error GoTo ErrorHandlerLoop
i = 2 'nicht in Header suchen
Do Until i > rw
cv = ws.Range(1, i).Value 'Debugger 1004
d = Kurs - CDbl(cv)
If (d 

Ich bastle nun schon einige Wochen an diesem (Microsoft-made) Problem, bitte helft mir.
Vielen Dank!
Gruß Wolfgang

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Worksheets-Objekt-Zugriff in ActiveWorkb
10.09.2022 08:50:44
RPP63
Moin!

UR = ws.UsedRange 'Hier meckert Compiler 91 ObjektVariable nicht definiert, hat nix mit Const Tbl zu tun
Kunststück!
Wie muss die Range-Variable UR zugewiesen werden?
Wie alle Objektvariablen, per SET
Nur am Rand:
Dein Variablen-Overkill macht den Code nicht gerade lesbarer!
Gruß Ralf
AW: Worksheets-Objekt-Zugriff in ActiveWorkb
10.09.2022 18:35:33
Wolfgang
Moin Ralf,
Danke für Deinen Hinweis auf meine Unaufmerksamkeit. Sobald ich mein Problem mit dem WorkSheets-Objekt gelöst habe, gibt's als Dankeschön hier eine Arbeits-Mappe mit lauffähigen Funktionen für den Kurs und die Windrose-Bezeichnung dazu.
Ich habe das Logbuch von Christoph Kolumbus's 1. Reise Tag für Tag aufgelöst, ferner habe ich nach Wickinger-Original-Segel-Beschreibung den Rörn von der Norwegischen Küste, nach Island und Grönland und die Odyssee nachverfolgt.
Ich bin mir nicht sicher, ob ich das Log der Bismarck auf ihrer letzten Feindfahrt ins Internet stellen sollte, das bringt "Raubtaucher" auf dämliche Gedanken, aber die Titanik kann man inzwischen ja längst machen, da unten waren ja schon viele.
Dann könnte ich ja einen Überfall von Captain Morgan auf die Spanische Silber Flotte mir 'raussuchen, ich war nämlich auf "seiner" Insel, die gehört zu Columbien.
Und als "Beifang" gibt's eine aus einer Zelle aufrufbare Funktion um aus einem Sinus-Wert den Winkel bestimmen. Das braucht man, wenn man den Kurs aus Koordinaten berechnen will, ohne Navi-Lineal.
Mast- und Schotbruch Wolfgang

Anzeige
AW: Worksheets-Objekt-Zugriff in ActiveWorkb
13.09.2022 10:38:29
Yal
Moin Wolfgang,
viel schönes dabei, auch viel nutzloses:
Es ist ein VBA-Code, der unter Excel läuft richtig? Dann läuft es auch nicht ohne Excel.
Die Prüfung GetObject(, "Excel.Application") ist dementsprechend reine Vermüllung.
Wenn VBA, dann Workbook dahinter. Es gibt dementsprechend IMMER einen aktiven Workbook.
Im Allgemein, alle Selbstverständlichkeiten nur prüfen, wenn erst überhaupt ein Problem aufgetreten ist. Sonst ist man schnell dabei nachzuprüfen, ob Excel aus 2+2 tatsächlich 4 gemacht hat.
Es sollte auch immer nur eine einzige Error-Handling pro Sub geben. Nicht mal "VBA-Profi" reicht, um die potentielle Verwicklungen von mehrfachen Fehlerhandling zu durchschauen.
Verwende, wenn Du schon im Voraus weisst, wo der Anfang und wo der Ende ist, immer For anstatt While/Until. Da vermeidest Du die endlose Schleife.
Wenn eine Variable ein Double ist, dann wird alles was darin geschrieben wird zur Double. Brauchste keinen cDbl(..).
Du berechnest und setzst die lokale Variablen "r" und "rtnWindRose", machst aber nicht daraus bevor das Ende der Sub. Welche Sinn hat es? (ich brauche die Antwort selber nicht, ich möchte nur, dass Du dich die Frage stellst)
Beim ersten (d Lange rede. Mein Code-Vorschlag:

Sub Debug_WindRose()
'09.09.22 10:30
'Dieses Makro arbeitet nur korrekt, wenn im Quell-Arbeitsblatt die Winkel in aufsteigender Abfolge eingetragen sind
Dim Z As Range
Dim d As Double
Dim r As Double
Dim rtnWindRose As String
Const cKurs = -0.012114
r = 360 'Größter Winkel in der Tabelle = Sinus 0,958915723
With ThisWorkbook.Worksheets("WindRose")
For Each Z In Range(.Range("A2"), .Cells(Rows.Count, 1))
If Z.Value = "" Then 'Sollte nicht passieren
MsgBox "Die Zelle " & Z.Address & " ist leer. Bitte prüfen"
Exit For
End If
d = Kurs - Z.Value
If (d 
VG
Yal
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige