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

Range im UserForm

Range im UserForm
26.05.2020 11:37:46
MarC
Hallo,
ich komme gerade nicht weiter. Ich möchte den Inhalt von Zellen an unterschiedlichen Positionen überprüfen und dann berechnen wieviel % von denen ausgefüllt sind. Ich dachte mir das ich das mit Set Bereich = Range hinbekomme. Aber leider erhalte ich immer eine Fehlermeldung "Laufzeitfehler 1004 - Die Methode Range für das Objekt _Global ist fehlgeschlagen".
Was bedeutet das? Eine Datei kann ich leider wegen dem Inhalt nicht hochladen.
        Set Bereich = Range( "Z" & ZeileEdit & ":AB" & ZeileEdit & ", AJ" & ZeileEdit & ":AJ" &  _
ZeileEdit & ", AL" & ZeileEdit & ":AL" & ZeileEdit & ", AP" & ZeileEdit & ":BC" & ZeileEdit & ", BF" & ZeileEdit & ":BG" & ZeileEdit & ", BJ" & ZeileEdit & ":BK" & ZeileEdit & ", BM" & ZeileEdit & ":BM" & ZeileEdit)
Anzahl = Application.CountA(Bereich)
.Cells(ZeileEdit, 81).Value = Round((Anzahl / 36), 3)

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Frage
26.05.2020 11:50:55
hary
Moin
Zeig mal mehr vom Code.
Hast du eine with Anweisung drin? Da vor Cells ein Punkt ist.
.Cells(ZeileEdit, 81).Value = Round((Anzahl / 36), 3)

Wenn ja gibt es dieses Blatt? Meist ist 1004 wenn ein Blatt nicht vorhanden/Blatname falsch geschrieben ist.
gruss hary
AW: Frage
26.05.2020 11:59:36
MarC
Also die Datei hat nur zwei Blätter und die sind vorhanden. Im UserForm ist ein Button zum Speichern. So sieht der ganze Code aus (ich habe normale Textbox --> Zellen Zuweisungen rausgelassen weil das sonst zu lang wird).
Private Sub cmb_Speichern_Click()
Dim strName As String
Dim Query As Long
Dim Spalte As Long
Dim Bereich As Range
Dim Anzahl As Long
Application.ScreenUpdating = False
Query = MsgBox("Soll der neue Eintrag gespeichert werden?", vbYesNo)
If Query = vbYes Then
With Sheets("Overview")
.Cells(ZeileEdit, 28).Value = TextB4.Value
.Cells(ZeileEdit, 29).Value = IIf(CheckBox1 = True, "x", "")
If TextBox10.Text  "" And TextBox12.Text  "" Then
.Cells(ZeileEdit, 41).Value = CInt(TextBox10) + CInt(TextBox12)
ElseIf TextBox10.Text  "" And TextBox12.Text = "" Then
.Cells(ZeileEdit, 41).Value = TextBox10.Value
ElseIf TextBox10.Text = "" And TextBox12.Text  "" Then
.Cells(ZeileEdit, 41).Value = TextBox12.Value
Else
.Cells(ZeileEdit, 41).Value = ""
End If
.Cells(ZeileEdit, 50).Value = TextB14.Value
.Cells(ZeileEdit, 51).Value = TextB15.Value
.Cells(ZeileEdit, 52).Value = TextB16.Value
.Cells(ZeileEdit, 53).Value = TextB17.Value
.Cells(ZeileEdit, 54).Value = cb_Bewerber.Value
strName = TextBox15.Value
If strName  "" Then
.Cells(ZeileEdit, 55).Value = Trim(Split(strName, " ")(0))
.Cells(ZeileEdit, 56).Value = Trim(Split(strName, " ")(1))
End If
.Cells(ZeileEdit, 70).Value = TextBox20.Value
Set Bereich = Range("C" & ZeileEdit & ":D" & ZeileEdit & ", J" & ZeileEdit & ":N" &  _
ZeileEdit & ", P" & ZeileEdit & ":S" & ZeileEdit & ", Z" & ZeileEdit & ":AB" & ZeileEdit & ", AJ" & ZeileEdit & ":AJ" & ZeileEdit & ", AL" & ZeileEdit & ":AL" & ZeileEdit & ", AP" & ZeileEdit & ":BC" & ZeileEdit & ", BF" & ZeileEdit & ":BG" & ZeileEdit & ", BJ" & ZeileEdit & ":BK" & ZeileEdit & ", BM" & ZeileEdit & ":BM" & ZeileEdit)
Anzahl = Application.CountA(Bereich)
.Cells(ZeileEdit, 81).Value = Round((Anzahl / 36), 3)
End With
Unload Me
End If
End Sub

Anzeige
AW: Frage
26.05.2020 12:06:28
Martin
Hallo MarC,
könnte es sein, dass ein Punkt vor Range fehlt?
Set Bereich = .Range...
Viele Grüße
Martin
AW: Frage
26.05.2020 12:09:27
hary
Moin
Welchen Wert hat ZeileEdit
Die Variable ist nicht deklariert. Wenn Wert von ZeileEdit = Null dann kommt ein Fehler.
Range ist auf dem aktivem Blatt?
gruss hary
Ich hatte Tomaten vor den Augen...
26.05.2020 12:18:34
Martin
...und habe dabei noch geschrieben, dass wir die korrekte Deklaration und Wertzuweisung der Variablen bei dem Codeschnipsel nicht analysieren können. Anscheinend hat MarC ohne Option Explicit gearbeitet, sonst hätte es wegen der fehlenden Deklaration von ZeileEdit eine entsprechende Fehlermeldung gegeben.
Danke, Hary!
VG Martin
Anzeige
AW: Ich hatte Tomaten vor den Augen...
26.05.2020 12:34:59
MarC
Also "Option Explicit" habe ich überall drin
Option Explicit
Public ZeileEdit As Long

AW: Frage
26.05.2020 12:19:18
MarC
Die Variable ZeileEdit habe ich nicht im UserForm sondern in einem Modul Global deklariert. Kann es daran liegen oder ist das egal?
@Martin muss ein Punkt bei Range stehen? also .Range?
@Hary also ich rufe das UserForm auf dem Tabellenblatt Overview auf und wenn speichern klicke werden die Daten auch wieder auf dem Blatt gespeichert. Das ist also mein aktives Blatt. Hätte ich das anderes bezeichnen müssen also activesheet?
Public ZeileEdit As Long

Anzeige
AW: Frage
26.05.2020 12:30:04
hary
Moin
Ist soweit alles OK.
Public ZeileEdit As Long

Aber wo bekommt die ZeileEdit ihren Wert zugewiesen?
Bsp.-weise: ZeileEdit = 2
gruss hary
AW: Frage
26.05.2020 12:47:30
MarC
Danke Hary und Martin für eure Hilfe. Die ZeileEdit bekommt ihren Wert von dem Code und der ist in dem Tabellenblatt Overview
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Row > 9 And Target.Column > 1 And Target.Column  " _
" Then
'   Bestehenden Task für die Bearbeitung öffnen.
Cancel = True
ZeileEdit = Target.Row
uf_EditJob.Show
End If
End Sub

Anzeige
AW: Frage
26.05.2020 12:34:53
Martin
Hallo Marc,
der Punkt muss nur dann vor Range stehen, wenn das aktive Arbeitsblatt während der Ausführung des Makros nicht mit Sicherheit Overview ist. Aber wenn das Makro immer ausgeführt wird während das Arbeitsblatt Overview aktiv ist, dann kannst du dir alles im With sparen:
Private Sub cmb_Speichern_Click()
Dim strName As String
Dim Query As Long
Dim Spalte As Long
Dim Bereich As Range
Dim Anzahl As Long
Application.ScreenUpdating = False
Query = MsgBox("Soll der neue Eintrag gespeichert werden?", vbYesNo)
If Not Query = vbYes Then
Exit Sub
End If
Cells(ZeileEdit, 28).Value = TextB4.Value
Cells(ZeileEdit, 29).Value = IIf(CheckBox1 = True, "x", "")
If TextBox10.Text  "" And TextBox12.Text  "" Then
Cells(ZeileEdit, 41).Value = CInt(TextBox10) + CInt(TextBox12)
ElseIf TextBox10.Text  "" And TextBox12.Text = "" Then
Cells(ZeileEdit, 41).Value = TextBox10.Value
ElseIf TextBox10.Text = "" And TextBox12.Text  "" Then
Cells(ZeileEdit, 41).Value = TextBox12.Value
Else
Cells(ZeileEdit, 41).Value = ""
End If
Cells(ZeileEdit, 50).Value = TextB14.Value
Cells(ZeileEdit, 51).Value = TextB15.Value
Cells(ZeileEdit, 52).Value = TextB16.Value
Cells(ZeileEdit, 53).Value = TextB17.Value
Cells(ZeileEdit, 54).Value = cb_Bewerber.Value
strName = TextBox15.Value
If strName  "" Then
Cells(ZeileEdit, 55).Value = Trim(Split(strName, " ")(0))
Cells(ZeileEdit, 56).Value = Trim(Split(strName, " ")(1))
End If
Cells(ZeileEdit, 70).Value = TextBox20.Value
Set Bereich = Range("C" & ZeileEdit & ":D" & ZeileEdit & ", J" & ZeileEdit & ":N" & _
ZeileEdit & ", P" & ZeileEdit & ":S" & ZeileEdit & ", Z" & ZeileEdit & ":AB" & ZeileEdit & ",  _
AJ" & ZeileEdit & ":AJ" & ZeileEdit & ", AL" & ZeileEdit & ":AL" & ZeileEdit & ", AP" & ZeileEdit & ":BC" & ZeileEdit & ", BF" & ZeileEdit & ":BG" & ZeileEdit & ", BJ" & ZeileEdit & ":BK" & ZeileEdit & ", BM" & ZeileEdit & ":BM" & ZeileEdit)
Anzahl = Application.CountA(Bereich)
Cells(ZeileEdit, 81).Value = Round((Anzahl / 36), 3)
Unload Me
End Sub
Viele Grüße
Martin
Anzeige
AW:@Martin
26.05.2020 12:46:02
hary
Moin Martin
Da ist unser Problem wieder. ;-))
Marc deklariet zwar Public ZeileEdit As Long im Modul.
Aber wo weist er ZeileEdit einen Wert zu!?
Wenn das nicht passiert hat ZeileEdit den Wert Null.
Zeile Null gibt es nicht,also Fehler.
Mal schauen was Marc schreibt.
gruss hary
AW: AW:@Martin
26.05.2020 13:20:39
Martin
Hallo Hary,
eventuell sollte MarC einfach eine entsprechende Kontrolle in seinem Makro ergänzen:
    If ZeileEdit = 0 Then
MsgBox "Der Variable 'ZeileEdit' ist kein Wert zugewiesen!", vbExclamation, "Abbruch"
Exit Sub
End If
Viele Grüße
Martin
Anzeige
AW: Frage
26.05.2020 12:58:46
MarC
Sorry das ich nochmal genauer nachfrage. Ich kann also das With...... weg lassen oder wenn ich es behalten möchte muss ich halt vor Range noch einen Punkt machen damit es stimmt also .Range
AW: Frage
26.05.2020 13:15:56
Martin
Hallo MarC,
der Punkt verweist auf das mit With angegebene Objekt.
Also wenn du With Sheets("Overview") schreibst und aktuell ein anderes Arbeitsblatt aktiv ist, dann bezieht sich .Cells(x, y) trotzdem auf das Arbeitsblatt Overview. Aber ohne dem Punkt bezieht sich Cells(x, y) auf das aktuell ausgewählte Arbeitsblatt.
Wenn also dein Makro läuft während das Arbeitsblatt "Overview" aktiv ist, dann kannst du auf die With-Anweisung komplett verzichten. Aber wenn du dich bei Ausführung des Makros auf einem anderem Arbeitsblatt befindest, sollte auch vor Range ein Punkt stehen, sonst werden der Variable Bereich nicht die Zellen vom Arbeitsblatt Overview zugewiesen, sondern vom aktuell angezeigten Arbeitsblatt.
Viele Grüße
Martin
Anzeige
AW: with Anweisung
26.05.2020 13:18:39
hary
Moin
Ja.
Gilt fuer Range und Cells
Innerhalb einer with Anweisung: mit Punkt bezieht sich auf with, ohne Punkt bezieht sich auf das aktive Blatt
Einen Fehler konnte ich nur herbeifuehren, wenn ZeileEdit den Wert Null hat.
Sonst muss es was anderes sein. Aber ohne Bsp.-mappe wird's eng. ;-))
gruss hary
AW: anderen Verdacht
26.05.2020 13:20:57
hary
Moin nochemal
Fiel mir gerade ein. Hast du einen Blattschutz gesetzt? Verbundene Zellen?
gruss hary
AW: anderen Verdacht
26.05.2020 14:01:44
MarC
Tausend Dank erst mal für die Erklärung und Hilfe Martin und Hary. Jetzt bin ich viel schlauer =D
Ich sollte keine einzige verbundene Zellen in der Mappe haben, aber ich habe einen Blattschutz drin, damit niemand die Oberfläche oder Buttons versehentlich verstellt. Der Blattschutz wird immer beim öffnen der Datei aufgerufen.
Was komisch ist. Ich habe die Datei geschlossen und wieder geöffnet und jetzt ist der Fehler weg. Vll tritt er nur bei einer bestimmten Konstellation auf ^^
Der Blattschutz sieht wie folgt aus:
Sub WriteProtectionOn()
Sheets("Overview").Protect userinterfaceonly:=True, Password:="xxxxx", AllowFormattingCells: _
=True, Contents:=True, Scenarios:=True
Sheets("Overview").EnableAutoFilter = True
Sheets("Overview").EnableOutlining = True
Sheets("Overview").EnableSelection = xlUnlockedCells
End Sub

Anzeige
AW: Range im UserForm
26.05.2020 11:51:15
Martin
Hallo Marc,
du hast ja leider nur einen Codeschnipsel hier gepostet, das macht die Fehlersuche schwierig. Wir können nicht sehen ob deine Variablen korrekt deklariert wurden und auf welches With-Objekt sich .Cells bezieht. Ebenso kennen wir den zugewiesenen Wert der Variable Zeileedit nicht. Ich habe deinen Code ansonsten getestet und konnte keinen Fehler feststellen.

Sub Test2()
Dim ZeileEdit As Long
Dim Bereich As Range
Dim Anzahl As Long
ZeileEdit = 5
Set Bereich = Range("Z" & ZeileEdit & ":AB" & ZeileEdit & ", AJ" & ZeileEdit & ":AJ" &  _
ZeileEdit & ", AL" & ZeileEdit & ":AL" & ZeileEdit & ", AP" & ZeileEdit & ":BC" & ZeileEdit & ", BF" & ZeileEdit & ":BG" & ZeileEdit & ", BJ" & ZeileEdit & ":BK" & ZeileEdit & ", BM" & ZeileEdit & ":BM" & ZeileEdit)
Anzahl = Application.CountA(Bereich)
Cells(ZeileEdit, 81).Value = Round((Anzahl / 36), 3)
Bereich.Select
MsgBox Bereich.Address
MsgBox Anzahl
End Sub

Viele Grüße
Martin
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige