Ansicht:   

#444216

crowsname

Arnsberg,
05.02.2021, 16:50:43

Excel VBA Laufzeitfehler 91 (Objektvariable oder With-Blockvariable... (pc.sw.office)

...nicht festgelegt

Hallo zusammen,

Wir haben hier auf dem Server zwei Dateien liegen. Die untereinander Daten austauschen sollen.

Funktioniert bei allen Rechnern tadellos. Nur bei einem Rechner kommt die oben genannte Fehlermeldung.

Der Debugger gibt folgendes aus:


Set wsh_q = ActiveWorkbook.Worksheets("Tabelle1")
Set wsh_z = Workbooks.Open(ActiveWorkbook.Path & "\PayPal Berechnen.xlsm").Worksheets("PayPal")
var_q = Split("c,d,e,f", ",")
var_z = Split("a,k,j,l", ",")
letzte = wsh_q.Range("A65536").End(xlUp).Row
str_r = "#1:#" & letzte



Fehler soll in der 2. Zeile liegen.

Die Variable wsh_z ist aber deklariert.

Ich verstehe nicht, warum es bei den anderen Rechnern funktioniert, nur bei dem einen nicht.

Besten Gruß

Michael

--
MfG

Michael
-------------------------------------
Personal Training und Ernährungsberatung
http://www.dein-bpc.de

Natürliche Baustoffe:
http://www.auro-online.de

Getreidemühlen und Zubehör:
http://www.getreidemuehlen.de

Sport in Arnsberg:
http://www.personaltraining-nh.de/Home

#444217

fuchsi zur Homepage von fuchsi

Niederösterreich,
05.02.2021, 17:25:06

@ crowsname

Excel VBA Laufzeitfehler 91 (Objektvariable oder With-Blockvariable...

was steht in ActiveWorkbook.Path drin?

--
mein privates Hobby. www.ffzell.at

#444218

manes zur Homepage von manes

Köln,
05.02.2021, 17:33:34

@ crowsname

Excel VBA Laufzeitfehler 91 (Objektvariable oder With-Blockvariable...

Hallo
> Wir haben hier auf dem Server zwei Dateien liegen. Die untereinander Daten
> austauschen sollen.

Greifen die Rechner allesamt auf dieselben Excel-Dateien auf dem Server zu?
Wenn das jeweils separat erfolgt, als was ist denn wsh_z deklariert?

FFPX
Manes

--
Also wenn ich ehrlich sein sollte, müsste ich lügen!

#444293

crowsname

Arnsberg,
08.02.2021, 10:51:30

@ manes

Excel VBA Laufzeitfehler 91 (Objektvariable oder With-Blockvariable...

> Greifen die Rechner allesamt auf dieselben Excel-Dateien auf dem Server zu?
>
> Wenn das jeweils separat erfolgt, als was ist denn wsh_z deklariert?

Hallo,

sorry das ich mich jetzt erst zurück melde.

Ja, alle greifen auf die gleichen Dateien auf dem Server zu. Teilweise haben die Rechner Excel 16 / 19 oder 365.

Das ist der gesamte Code:


Sub PayPalAufbereitungDatenKopieren()

Workbooks.Open "\\SERVER-PC\SrvDaten\Buchhaltung\2021\PayPal Berechnen.xlsm"

Workbooks("PayPal Berechnen.xlsm").Activate

Worksheets("PayPal").Activate

Dim letzten As Long

'Prüfen ob Daten eingetragen sind und dann ggf. löschen oder Fehlermeldung ausgeben'

If Range("A11").Value = "" Then
Else
letzten = Range("A65536").End(xlUp).Row
Range("A11:N" & letzten).Clear
End If

'Sicher gehen, dass die richtige Mappe geöffnet und aktiviert ist'

Workbooks.Open "\\SERVER-PC\SrvDaten\Buchhaltung\2021\PayPal Aufbereitung.xlsm"

Workbooks("PayPal Aufbereitung.xlsm").Activate

Dim wsh_q As Worksheet
Dim wsh_z As Worksheet
Dim var_q As Variant
Dim var_z As Variant
Dim int_x As Integer
Dim str_r As String
Dim str_q As String
Dim str_z As String
Dim letzte As Long

'Festlegen aus welchem Tabellenblatt welche Daten wohin verschoben werden soll'

Set wsh_q = ActiveWorkbook.Worksheets("Tabelle1")
Set wsh_z = Workbooks.Open(ActiveWorkbook.Path & "\PayPal Berechnen.xlsm").Worksheets("PayPal")
var_q = Split("c,d,e,f", ",")
var_z = Split("a,k,j,l", ",")
letzte = wsh_q.Range("A65536").End(xlUp).Row
str_r = "#1:#" & letzte

'Durchlauf bis alle Spalten durchlaufen sind'

For int_x = 0 To UBound(var_q)
str_q = Replace(str_r, "#", var_q(int_x))
str_z = Replace(str_r, "#", var_z(int_x))
wsh_q.Range(str_q).Copy Destination:=wsh_z.Range(str_z).Offset(10)
Next
End Sub

--
MfG

Michael
-------------------------------------
Personal Training und Ernährungsberatung
http://www.dein-bpc.de

Natürliche Baustoffe:
http://www.auro-online.de

Getreidemühlen und Zubehör:
http://www.getreidemuehlen.de

Sport in Arnsberg:
http://www.personaltraining-nh.de/Home

#444294

crowsname

Arnsberg,
08.02.2021, 10:53:04

@ fuchsi

Excel VBA Laufzeitfehler 91 (Objektvariable oder With-Blockvariable...

> was steht in ActiveWorkbook.Path drin?

Hallo,

sorry das ich mich jetzt erst zurück melde.

Hier der gesamte Code:


Sub PayPalAufbereitungDatenKopieren()

Workbooks.Open "\\SERVER-PC\SrvDaten\Buchhaltung\2021\PayPal Berechnen.xlsm"

Workbooks("PayPal Berechnen.xlsm").Activate

Worksheets("PayPal").Activate

Dim letzten As Long

'Prüfen ob Daten eingetragen sind und dann ggf. löschen oder Fehlermeldung ausgeben'

If Range("A11").Value = "" Then
Else
letzten = Range("A65536").End(xlUp).Row
Range("A11:N" & letzten).Clear
End If

'Sicher gehen, dass die richtige Mappe geöffnet und aktiviert ist'

Workbooks.Open "\\SERVER-PC\SrvDaten\Buchhaltung\2021\PayPal Aufbereitung.xlsm"

Workbooks("PayPal Aufbereitung.xlsm").Activate

Dim wsh_q As Worksheet
Dim wsh_z As Worksheet
Dim var_q As Variant
Dim var_z As Variant
Dim int_x As Integer
Dim str_r As String
Dim str_q As String
Dim str_z As String
Dim letzte As Long

'Festlegen aus welchem Tabellenblatt welche Daten wohin verschoben werden soll'

Set wsh_q = ActiveWorkbook.Worksheets("Tabelle1")
Set wsh_z = Workbooks.Open(ActiveWorkbook.Path & "\PayPal Berechnen.xlsm").Worksheets("PayPal")
var_q = Split("c,d,e,f", ",")
var_z = Split("a,k,j,l", ",")
letzte = wsh_q.Range("A65536").End(xlUp).Row
str_r = "#1:#" & letzte

'Durchlauf bis alle Spalten durchlaufen sind'

For int_x = 0 To UBound(var_q)
str_q = Replace(str_r, "#", var_q(int_x))
str_z = Replace(str_r, "#", var_z(int_x))
wsh_q.Range(str_q).Copy Destination:=wsh_z.Range(str_z).Offset(10)
Next
End Sub

--
MfG

Michael
-------------------------------------
Personal Training und Ernährungsberatung
http://www.dein-bpc.de

Natürliche Baustoffe:
http://www.auro-online.de

Getreidemühlen und Zubehör:
http://www.getreidemuehlen.de

Sport in Arnsberg:
http://www.personaltraining-nh.de/Home

#444345

manes zur Homepage von manes

Köln,
10.02.2021, 22:47:20

@ crowsname

Excel VBA Laufzeitfehler 91 (Objektvariable oder With-Blockvariable...

Hallo
Kam mir doch so bekannt vor. Ist jetzt ein Jahr her!

Mir sind zwei Dinge aufgefallen:

1. Ich hatte damals schon dargestellt, dass das ständige Aktivieren unnötig ist und das ganze unübersichtlich macht. Jetzt hast Du es doch wieder angewendet.

2. Wenn ich das richtig verstehe, wird jeweils von einer lokalen Excel-Datei gestartet, um von einer Datei auf dem Server auf eine andere Datei auf dem Server zu kopieren. Wenn Du das so löst, muss gewährleistet sein, dass jede dieser lokalen Excel-Dateien auf den jeweiligen PCs bezgl. des Makrocodes absolut identisch ist. Ist das der Fall?
Alternative: Excel-Datei, die den Kopiervorgang steuert, ebenfalls auf den Server legen und dann von den einzelnen PCs dort aufrufen.
Oder den Kopiercode in eine der beiden Dateien integrieren und dort aufrufen.

Besteht das Problem denn überhaupt noch?

FFPX
Manes

> > Greifen die Rechner allesamt auf dieselben Excel-Dateien auf dem Server
> zu?
> >
> > Wenn das jeweils separat erfolgt, als was ist denn wsh_z deklariert?
>
> Hallo,
>
> sorry das ich mich jetzt erst zurück melde.
>
> Ja, alle greifen auf die gleichen Dateien auf dem Server zu. Teilweise
> haben die Rechner Excel 16 / 19 oder 365.
>
> Das ist der gesamte Code:
>
>


> Sub PayPalAufbereitungDatenKopieren()
> 
> Workbooks.Open "\\SERVER-PC\SrvDaten\Buchhaltung\2021\PayPal
> Berechnen.xlsm"
> 
> Workbooks("PayPal Berechnen.xlsm").Activate
> 
> Worksheets("PayPal").Activate
> 
> Dim letzten As Long
> 
> 'Prüfen ob Daten eingetragen sind und dann ggf. löschen oder
> Fehlermeldung ausgeben'
> 
> If Range("A11").Value = "" Then
> Else
> letzten = Range("A65536").End(xlUp).Row
> Range("A11:N" & letzten).Clear
> End If
> 
> 'Sicher gehen, dass die richtige Mappe geöffnet und aktiviert ist'
> 
> Workbooks.Open "\\SERVER-PC\SrvDaten\Buchhaltung\2021\PayPal
> Aufbereitung.xlsm"
> 
> Workbooks("PayPal Aufbereitung.xlsm").Activate
> 
> Dim wsh_q As Worksheet
> Dim wsh_z As Worksheet
> Dim var_q As Variant
> Dim var_z As Variant
> Dim int_x As Integer
> Dim str_r As String
> Dim str_q As String
> Dim str_z As String
> Dim letzte As Long
> 
> 'Festlegen aus welchem Tabellenblatt welche Daten wohin verschoben werden
> soll'
> 
> Set wsh_q = ActiveWorkbook.Worksheets("Tabelle1")
> Set wsh_z = Workbooks.Open(ActiveWorkbook.Path & "\PayPal
> Berechnen.xlsm").Worksheets("PayPal")
> var_q = Split("c,d,e,f", ",")
> var_z = Split("a,k,j,l", ",")
> letzte = wsh_q.Range("A65536").End(xlUp).Row
> str_r = "#1:#" & letzte
> 
> 'Durchlauf bis alle Spalten durchlaufen sind'
> 
> For int_x = 0 To UBound(var_q)
> str_q = Replace(str_r, "#", var_q(int_x))
> str_z = Replace(str_r, "#", var_z(int_x))
> wsh_q.Range(str_q).Copy Destination:=wsh_z.Range(str_z).Offset(10)
> Next
> End Sub
> 

--
Also wenn ich ehrlich sein sollte, müsste ich lügen!

#444346

crowsname

Arnsberg,
11.02.2021, 10:21:10

@ manes

Excel VBA Laufzeitfehler 91 (Objektvariable oder With-Blockvariable...

> Hallo
> Kam mir doch so bekannt vor. Ist jetzt ein Jahr her!
>

Jap, du hattest mir damals schon geholfen.


> 1. Ich hatte damals schon dargestellt, dass das ständige Aktivieren
> unnötig ist und das ganze unübersichtlich macht. Jetzt hast Du es doch
> wieder angewendet.

Ja, wollte es immer mal anpassen, bin aber im Tagesgeschäft nicht zu gekommen.

> 2. Wenn ich das richtig verstehe, wird jeweils von einer lokalen
> Excel-Datei gestartet, um von einer Datei auf dem Server auf eine andere
> Datei auf dem Server zu kopieren. Wenn Du das so löst, muss gewährleistet
> sein, dass jede dieser lokalen Excel-Dateien auf den jeweiligen PCs bezgl.
> des Makrocodes absolut identisch ist. Ist das der Fall?
> Alternative: Excel-Datei, die den Kopiervorgang steuert, ebenfalls auf den
> Server legen und dann von den einzelnen PCs dort aufrufen.
> Oder den Kopiercode in eine der beiden Dateien integrieren und dort
> aufrufen.

Beide Dateien liegen auf dem Server. Es greifen also alle Rechner auf die gleichen Dateien auf dem Server zu.
Es wird von der PayPal Aufbereiten (die auf den Server liegt) in die PayPal Berechnen (die auf dem Server liegt) kopiert.

> Besteht das Problem denn überhaupt noch?

Jap, besteht noch.

Danke mal wieder für deine Mühe!

--
MfG

Michael
-------------------------------------
Personal Training und Ernährungsberatung
http://www.dein-bpc.de

Natürliche Baustoffe:
http://www.auro-online.de

Getreidemühlen und Zubehör:
http://www.getreidemuehlen.de

Sport in Arnsberg:
http://www.personaltraining-nh.de/Home

#444348

Johann

11.02.2021, 15:26:15
(editiert von Johann, 11.02.2021, 15:32:00)

@ crowsname

Excel VBA Laufzeitfehler 91 (Objektvariable oder With-Blockvariable... (ed)

Von Excel habe ich nicht viel Ahnung, aber wie ich das beim Überfliegen sehe öffnest Du ganz am Anfang die Datei „PayPal Berechnen.xlsx“. Dann öffnest Du die später im Verlauf des Codes nochmal. Möglicherweise mokiert das eine der eingesetzten Excel-Versionen mit dem beschriebenen Fehler, wahrscheinlich die aktuellste (365).
Wenn dem so ist weise der ersten Öffnung bereits eine Variable zu und selektiere später wieder den benötigten Worksheet darüber (empfohlen) oder schließe das Workbook nach dem ersten öffnen wieder.

--
Alles ist einfach, leider ist das Einfache schwierig. (Clausewitz)

#444359

manes zur Homepage von manes

Köln,
12.02.2021, 01:10:19
(editiert von manes, 12.02.2021, 01:10:52)

@ crowsname

Excel VBA Laufzeitfehler 91 (Objektvariable oder With-Blockvariable... (ed)

Hallo

> Beide Dateien liegen auf dem Server. Es greifen also alle Rechner auf die
> gleichen Dateien auf dem Server zu.
> Es wird von der PayPal Aufbereiten (die auf den Server liegt) in die PayPal
> Berechnen (die auf dem Server liegt) kopiert.

Ich glaube zwar nicht, dass evtl. unterschiedliche xls-Varianten eine Rolle spielen könnten, aber vielleicht hilft Aufräumen ein wenig.

Versuch es mal hiermit. Am Schluss werden die beiden geöffneten xls-Dateien wieder geschlossen und die Zieldatei dabei gespeichert. Ggf. weglassen.

Sub PayPalAufbereitungDatenKopieren()

Dim wb_q As Workbook
Dim wb_z As Workbook
Dim wsh_q As Worksheet
Dim wsh_z As Worksheet
Dim var_q As Variant
Dim var_z As Variant
Dim int_x As Integer
Dim str_r As String
Dim str_q As String
Dim str_z As String
Dim letzte As Long
Const cStr_Ordner As String = "\\SERVER-PC\SrvDaten\Buchhaltung\2021\"

Set wb_q = Workbooks.Open(cStr_Ordner & "PayPal Aufbereitung.xlsm")
Set wb_z = Workbooks.Open(cStr_Ordner & "PayPal Berechnen.xlsm")
Set wsh_q = wb_q.Worksheets("Tabelle1")
Set wsh_z = wb_z.Worksheets("Paypal")

With wsh_q
If .Range("A11") <> "" Then
letzte = .Range("A65536").End(xlUp).Row
.Range("A11:N" & letzten).Clear
End If
End With

var_q = Split("c,d,e,f", ",")
var_z = Split("a,k,j,l", ",")
str_r = "#1:#" & letzte

For int_x = 0 To UBound(var_q)
str_q = Replace(str_r, "#", var_q(int_x))
str_z = Replace(str_r, "#", var_z(int_x))
wsh_q.Range(str_q).Copy Destination:=wsh_z.Range(str_z).Offset(10)
Next

wb_q.Close
wb_z.Close savechanges:=True

End Sub

--
Also wenn ich ehrlich sein sollte, müsste ich lügen!

#444380

manes zur Homepage von manes

Köln,
13.02.2021, 11:01:50

@ manes

Excel VBA Laufzeitfehler 91 (Objektvariable oder With-Blockvariable...

Kleine Berichtigung. Statt letzten muss es letzte heißen
> With wsh_q
> If .Range("A11") <> "" Then
> letzte = .Range("A65536").End(xlUp).Row
> .Range("A11:N" & letzten).Clear
> End If
> End With

--
Also wenn ich ehrlich sein sollte, müsste ich lügen!

#444381

crowsname

Arnsberg,
13.02.2021, 20:25:46

@ manes

Excel VBA Laufzeitfehler 91 (Objektvariable oder With-Blockvariable...

Ganz herzlichen Dank für deine Mühe.

Werde es im Laufe der nächsten Woche testen und mich dann zurück melden.

--
MfG

Michael
-------------------------------------
Personal Training und Ernährungsberatung
http://www.dein-bpc.de

Natürliche Baustoffe:
http://www.auro-online.de

Getreidemühlen und Zubehör:
http://www.getreidemuehlen.de

Sport in Arnsberg:
http://www.personaltraining-nh.de/Home

#444382

crowsname

Arnsberg,
13.02.2021, 20:27:43

@ Johann

Excel VBA Laufzeitfehler 91 (Objektvariable oder With-Blockvariable...

Hi,

danke dir.

Werde schauen, ob das das Problem ist. Was ich so schon sagen kann ist, dass der Rechner der Probleme macht nicht die 365 Version hat.

Wenn ich was raus bekomme, melde ich mich noch mal.

Danke noch mal.

--
MfG

Michael
-------------------------------------
Personal Training und Ernährungsberatung
http://www.dein-bpc.de

Natürliche Baustoffe:
http://www.auro-online.de

Getreidemühlen und Zubehör:
http://www.getreidemuehlen.de

Sport in Arnsberg:
http://www.personaltraining-nh.de/Home

#444385

Johann

14.02.2021, 09:02:40

@ crowsname

Excel VBA Laufzeitfehler 91 (Objektvariable oder With-Blockvariable...

manes hat diese Sache bereits in seinem Lösungsvorschlag adressiert, da kannst Du Zeit sparen und besser direkt auf Basis seiner Variante weiter entwickeln.

--
Alles ist einfach, leider ist das Einfache schwierig. (Clausewitz)

#444405

crowsname

Arnsberg,
17.02.2021, 11:02:47

@ manes

Excel VBA Laufzeitfehler 91 (Objektvariable oder With-Blockvariable...

Hi,

stoße gerade auf ein Problem und finde den Fehler nicht.

Egal wie viele Daten ich in die PayPal Aufbereiten einfüge, es werden immer nur 10 Datensätze übertragen.

Alles unter den 10 wird nicht übertragen und auch aus der PayPal Aufbereiten raus gelöscht.

Hab nicht den Part in deinem Code gefunden, der das verursacht.

Besten Gruß

Michael

--
MfG

Michael
-------------------------------------
Personal Training und Ernährungsberatung
http://www.dein-bpc.de

Natürliche Baustoffe:
http://www.auro-online.de

Getreidemühlen und Zubehör:
http://www.getreidemuehlen.de

Sport in Arnsberg:
http://www.personaltraining-nh.de/Home

#444406

manes zur Homepage von manes

Köln,
17.02.2021, 20:05:21

@ crowsname

Excel VBA Laufzeitfehler 91 (Objektvariable oder With-Blockvariable...

Hallo
> Alles unter den 10 wird nicht übertragen und auch aus der PayPal
> Aufbereiten raus gelöscht.
> Hab nicht den Part in deinem Code gefunden, der das verursacht.
In der Passage

With wsh_q
If .Range("A11") <> "" Then
letzte = .Range("A65536").End(xlUp).Row
.Range("A11:N" & letzten).Clear
End If
End With

wird geprüft.in welcher Zeile die letzte Eintragung in der Spalte A ist. Wenn von A11 abwärts nichts eingetragen ist, ist der Wert letzte = 10. Dementsprechend werden dann auch nur 10 Datensätze übertragen. So waren Deine Vorgaben!

Wenn Du möchtest, dass alles in den Spalten c bis f übertragen werden soll, dann vergiss die Variable letzte. In dem Fall müsstest Du vielmehr die kompletten Spalten übertragen, allerdings ohne die letzten 10 Zeilen, weil am Zielpunkt ja alles um 10 Zeilen nach unten versetzt eingefügt werden sollen.
M.a.W.
statt str_r = "#1:#" & letzte müsste es dann heißen
str_r = "#1:#" & 65526

Schaumerma, ob es so klappt.
Viel Erfolg
Manes

--
Also wenn ich ehrlich sein sollte, müsste ich lügen!

Ansicht:   
Auf unserer Web-Seite werden Cookies eingesetzt, um diverse Funktionalitäten zu gewährleisten. Hier erfährst du alles zum Datenschutz