Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1936to1940
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 Bereich festlegen - Fehler 1004

Range Bereich festlegen - Fehler 1004
18.07.2023 12:18:45
Romi
Guten Tag liebe Community,

ich habe mir mit Hilfe des Internets und meinen bescheidenen Kenntnissen den nachfolgenden Code zusammengebastelt:


Private Sub Mail_Abfrage_Firma()
Dim tbl_1, tbl_2, tbl_3 As ListObject
Dim rngBereich As Range
Dim ZeileDatensuche As Range
Dim objDoc As Object
Dim lngZ As Long
Dim PersNr, Anrede, Vorsorge, olOldBody, Abschluss As String

Set tbl_1 = ThisWorkbook.Worksheets("Vorsorge").ListObjects(1) 'Tabelle einlesen
Set tbl_2 = ThisWorkbook.Worksheets("Mitarbeiter").ListObjects(1) 'Tabelle einlesen
Set tbl_3 = ThisWorkbook.Worksheets("Firmen").ListObjects(1) 'Tabelle einlesen

Set rngBereich = ThisWorkbook.Worksheets("Firmen").Range("Firmen[[#All],[Index]:[FirmenOrt]]")

PersNr = tbl_1.DataBodyRange(ActiveCell.Row - 8, 2).Value
Set ZeileDatensuche = tbl_2.DataBodyRange.Find(What:=PersNr, LookIn:=xlValues, LookAt _
    :=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
    False, SearchFormat:=False)

Anrede = "" & tbl_2.DataBodyRange(ZeileDatensuche.Row - 6, 11).Value & " " _
        & tbl_2.DataBodyRange(ZeileDatensuche.Row - 6, 9).Value & ", 

" Vorsorge = "tbl_1.DataBodyRange(ActiveCell.Row - 8, 10).Value "
" Abschluss = "Bitte teilen Sie mir zur den Standort mit. " With CreateObject("outlook.application").CreateItem(0) .Display olOldBody = .HTMLBody .To = tbl_1.DataBodyRange(ActiveCell.Row - 8, 6).Value .Subject = "Auswahl Auftragnehmer " .HTMLBody = Anrede & Vorsorge Set objDoc = .GetInspector.WordEditor rngBereich.Copy lngZ = objDoc.Range.End - 1 objDoc.Range(lngZ).Paste .HTMLBody = .HTMLBody & Abschluss & olOldBody End With End Sub


Für die Codezeile
Set rngBereich
wirft VBA mir den Stolperstein oder auch Laufzeitfehler 1004 vor die Füße. Könnt ihr mir bitte einen Tipp geben, was ich verändern muss um den Fehler zu vermeiden?

Danke und Liebe Grüße Romi

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Range Bereich festlegen - Fehler 1004
18.07.2023 12:59:58
Daniel
HI
VBA hat noch Probleme mit diesen neuen Adressen.
Was funktionieren sollte, ist die Referenz auf den Zellbereich ohne Überschrift, also nur die Daten
Set rngBereich = ThisWorkbook.Worksheets("Firmen").Range("Firmen[[Index]:[FirmenOrt]]")
wenn du es mit Überschrift brauchst, kannst du die hinterer ergänzen:
set rng Bereich = rngBereich.Offset(-1, 0).Resize(rngBereich.Rows.Count + 1)
Gruß Daniel

1. Problem gelöst, nächste erscheint
18.07.2023 13:43:40
Romi
Hallo Daniel,

und danke dein Tipp hat geholfen. Bei der weiteren Prüfung wirft er mir nun die Codezeile
PersNr = tbl_1.DataBodyRange(ActiveCell.Row - 8, 2).Value
mit dem Laufzeitfehler 91 aus. Beim rüberfahren mit dem Mauszeiger habe ich festgestellt, dass er PersNr = "" anzeigt.

Ist mir jedoch unerklärlich, da ich dem Feld mit meiner vorherigen Sub einen Wert zuweise:

Private Sub Uf1_Btn1_Click() 'Speichern

For Each tbCtrl In UserForm1.Controls
    If Left(tbCtrl.Name, 4) = "Uf1_" Then
        If tbCtrl.Tag = "Pflicht" And Trim(tbCtrl.Value) = "" Then
            MsgBox "Bitte Mitarbeiter und/oder Vorsorgedatum eingeben.", 0, "HINWEIS"
            Exit Sub
        End If
    End If
Next
    
ZeileAußen = tbl_1.DataBodyRange(tbl_1.DataBodyRange.Rows.Count, 1).Value + 1

tbl_1.DataBodyRange(ZeileAußen, 1).Value = tbl_1.DataBodyRange.Rows.Count + 1 'Vorsorge-ID berechnen und befüllen
tbl_1.DataBodyRange(ZeileAußen, 2).Value = Uf1_LB1.Value 'PersonalNr eintragen '--HIER wird der Wert der Tabellenzelle zugewiesen

tbl_1.DataBodyRange(ZeileAußen, 10).Select

Call Pause
Call Mail_Abfrage_Firma

Unload Me

End Sub
Könntest du mir bei diesem Folgeproblem widerrum behilflich sein?

Danke und liebe Grüße Romi

Anzeige
AW: 1. Problem gelöst, nächste erscheint
18.07.2023 14:27:36
Rudi Maintaire
Hallo,
dann solltest du prüfen, wo sich deine ActiveCell befindet. Zeile evtl. &lt=8?
Und natürlich ist PersNr="", weil ihr durch den Fehler kein Inhalt zugewiesen wird.

Gruß
Rudi

AW: 1. Problem gelöst, nächste erscheint
18.07.2023 15:23:58
onur
"Ist mir jedoch unerklärlich, da ich dem Feld mit meiner vorherigen Sub einen Wert zuweise" ?
Angenommen, ZeileAußen wäre 10:
tbl_1.DataBodyRange(ZeileAußen, 1).Value = tbl_1.DataBodyRange.Rows.Count + 1 'Vorsorge-ID berechnen und befüllen
tbl_1.DataBodyRange(ZeileAußen, 2).Value = Uf1_LB1.Value 'PersonalNr eintragen '--HIER wird der Wert der Tabellenzelle zugewiesen
tbl_1.DataBodyRange(ZeileAußen, 10).Select
Dann wird (10,1) und (10,2) ein Wert zugewiesen und dank Select ActiveCell auf (10,10) gesetzt.
PersNr = tbl_1.DataBodyRange(ActiveCell.Row - 8, 2).Value
"ActiveCell.Row-8" ist aber 2, also versuchst du PersNr den Wert von (2,2) zu geben.

Anzeige
2. Problem gelöst
19.07.2023 10:46:18
Romi
Guten Morgen und danke für eure Anmerkungen,

ich habe sie mir durchgelesen und konnte euren Kommentierungen aber leider gedanklich nicht zustimmen. Denn nach meinem Verständnis wird durch Abruf der
Private Sub Uf1_Btn1_Click() 'Speichern
u. a. der folgende Code

ZeileAußen = tbl_1.DataBodyRange(tbl_1.DataBodyRange.Rows.Count, 1).Value + 1
tbl_1.DataBodyRange(ZeileAußen, 10).Select
die Zeilennummer als Long (Zahl) des DataBodyRange gespeichert.

Meine Tabellenüberschrift beginnt ab B8 und die Tabellendaten sind ab B9. Wenn man nun den DataBodyRange der Tabelle anspricht, bedeutet dies auf die "normale" Range bezogen und das vorherige Beispiel von Onur doch, dass ich mich nicht in Zeile 10 befinde sondern in Zeile 18. Nach meinem Verständnis bezieht sich
ActiveCell.Row 
auf den "normalen" Range Bereich und deshalb musste zur Ermittlung der aktuellen Zeile im Databodyrange die Anzahl der Zeilen mit Überschrift abgezogen werden.

PersNr = tbl_1.DataBodyRange(ActiveCell.Row - 8, 2).Value
Nach einer Nacht mit genügend Schlaf hatte ich heute früh eine Eingebung, der ich gefolgt bin. Ich habe in der aufgerufenen Sub Call Mail_Abfrage_Firma nochmals die Set tbl_1 + tbl_2 Eigenschaft gesetzt und siehe da er funktioniert. Danke für die Unterstützung.

Liebe Grüße Romi

Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige