Live-Forum - Die aktuellen Beiträge
Datum
Titel
18.04.2024 18:04:29
18.04.2024 16:33:24
Anzeige
Archiv - Navigation
1736to1740
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

Arbeitsmappe im Hintergrund bearbeiten

Arbeitsmappe im Hintergrund bearbeiten
23.01.2020 12:34:47
Simon
Hallo zusammen,
mein Problem in dem Code unten, besteht darin, dass cell immer "Nothing" ist. Das liegt daran, dass ich die Arbeitsmappe die im Hintergrund geöffnet wurde nicht ausgewählt habe und die Excel-Datei, in der der Code ausgeführt wird, enthält den gesuchten Wert nicht.
Wie wähle ich also ein Workbook was im Hintergrund geöffnet ist aus und greife darauf zu?
Hier mein Code:
Public Sub InNutzung()
Dim pfad, Dateiname As String
Dim count As Integer
Dim cell As Range
Dim wb As Workbook
Dim ws As Worksheets
Dim Source As Object
count = 0
pfad = "C:\Users\A56296611\OneDrive - Deutsche Telekom AG\Berichtautomatisierung TNL-West\"
Dateiname = Dir(pfad & "*ZFP*")
Application.ScreenUpdating = False
'öffnet alle relevanten Excel-Dateien im Hintergrund
'Do While Dateiname  ""
'    GetObject pfad & "\" & Dateiname
'    Dateiname = Dir()
'Loop
'Geht jede Datei durch und sucht die letzte Zelle mit dem Wort "Erfolg" und verschiebt dann  _
_
den Zielbereich um eins nach rechts
For Each wb In Application.Workbooks
If InStr(1, wb.Name, "ZFP") > 0 Then
Set cell = Range("A1:A100").Find("Erfolg", After:=Range("A35"))
Set cell = cell.Offset(0, 1)
' Wenn der Wert in der Zielzelle größer als Null ist, wird der Roboter genutzt
If cell > 0 Then
count = count + 1
Else
On Error Resume Next
End If
End If
Next wb
Application.ScreenUpdating = True
End Sub

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Arbeitsmappe im Hintergrund bearbeiten
23.01.2020 12:38:11
Torsten
Hallo Simon,
versuch diese Zeile so:
Set cell = Workbooks(wb.Name).Range("A1:A100").Find("Erfolg", After:=Range("A35"))

Gruss Torsten
AW: Arbeitsmappe im Hintergrund bearbeiten
23.01.2020 12:50:07
volti
Hallo Simon,
mir fällt auf, dass Du im Code das Workbook teilweise nicht ansprichst.
For Each wb In Application.Workbooks
    If InStr(1, wb.Name, "ZFP") > 0 Then
        Set cell = wb.Range("A1:A100").Find("Erfolg", After:=wb.Range("A35"))
        Set cell = wb.cell.Offset(0, 1)
    ' Wenn der Wert in der Zielzelle größer als Null ist, wird der Roboter genutzt
        If cell > 0 Then
            Count = Count + 1
        Else
            On Error Resume Next
        End If
    End If
Next wb

Ohne den Verweis auf das gewünschte Workbook wb wird das gerade aktive Workbook genommen und das wolltest Du ja sicher nicht.
viele Grüße
Karl-Heinz --- Ex DTS Ffm :-) ---
Anzeige
AW: Arbeitsmappe im Hintergrund bearbeiten
23.01.2020 12:56:36
volti
Hi, da war jetzt doch einer zu viel:
For Each wb In Application.Workbooks
    If InStr(1, wb.Name, "ZFP") > 0 Then
        Set cell = wb.Range("A1:A100").Find("Erfolg", After:=wb.Range("A35"))
        Set cell = cell.Offset(0, 1)
    ' Wenn der Wert in der Zielzelle größer als Null ist, wird der Roboter genutzt
        If cell > 0 Then
            Count = Count + 1
        Else
            On Error Resume Next
        End If
    End If
Next wb

VG KH
Anzeige
leichte Korrekturen
23.01.2020 13:03:33
Rudi
Hallo,
Count sollte nicht als Variable genutzt werden, da eine VBA-Eigenschaft (z.B. Worksheets.Count)
Was ist, wenn Erfolg nicht gefunden wird?
Sub xxxxx()
Dim WB As Workbook, Cell As Range, iCount As Integer
For Each WB In Workbooks
If InStr(1, WB.Name, "ZFP") > 0 Then
Set Cell = WB.Range("A1:A100").Find("Erfolg", After:=WB.Range("A35"))
If Not Cell Is Nothing Then
' Wenn der Wert in der Zielzelle gr?er als Null ist, wird der Roboter genutzt
iCount = iCount - (Cell.Offset(, 1) > 0)
End If
End If
Next WB
End Sub

Gruß
Rudi
Anzeige
AW: Arbeitsmappe im Hintergrund bearbeiten
23.01.2020 13:11:37
Simon
Ja genau das ist es ja was ich nicht will, die Idee von Torsten hat leider nicht funktioniert, da bekomme ich die Fehlermeldung:
Laufzeitfehler: 438
Objekt untestützt die Eigenschaft oder Methode nicht.
Und wb.Name entspricht ja dann der Datei die ich ansprechen möchte. Das stimmt ja auch soweit.
Denn bei der ersten Datei ist der Name (jetzt als Beispiel) Datei 1. Und die will ich dann auswählen, aber wie mache ich das?
VG
Simon
AW: Arbeitsmappe im Hintergrund bearbeiten
23.01.2020 13:33:29
volti
Hallo Simon,
schau Dir Rudi's Vorschlag an, der sollte passen.
Ansonsten: Während der Abarbeitung der Schleife wird in wb das jeweilige Workbook referenziert (ist also praktisch schon angesprochen)
Alle weiteren Aktionen zum Workbook müssen dann aber auch referenziert werden, also über wb.
viele Grüße
Karl-Heinz
Anzeige
AW: Arbeitsmappe im Hintergrund bearbeiten
23.01.2020 14:12:36
Simon
Hi,
erstmal danke für die Vorschläge. :D
Nur auch bei Rudis Vorschlag kommt der Laufzeitfehler 438: Objekt unterstützt diese Eigenschaft oder Methode nicht.
Das passiert mir auch die ganze Zeit schon :S
Mein Schnipsel ....
23.01.2020 14:26:03
Rudi
… läuft fehlerfrei.
AW: Mein Schnipsel ....
23.01.2020 14:39:44
Simon
Hi Rudi,
tjaaaa ich weiß auch nicht wieso.
Emin Code sieht jetzt so aus:
Public Sub InNutzung()
Dim pfad, Dateiname As String
Dim WB As Workbook, Cell As Range, iCount As Integer
iCount = 0
pfad = "C:\Users\A56296611\OneDrive - Deutsche Telekom AG\Berichtautomatisierung TNL-West\"
Dateiname = Dir(pfad & "*ZFP*")
Application.ScreenUpdating = False
'öffnet alle relevanten Excel-Dateien im Hintergrund
Do While Dateiname  ""
GetObject pfad & "\" & Dateiname
Dateiname = Dir()
Loop
'Geht jede Datei durch und sucht die letzte Zelle mit dem Wort "Erfolg" und verschiebt dann  _
den Zielbereich um eins nach rechts
For Each WB In Workbooks
If InStr(1, WB.Name, "ZFP") > 0 Then
Set Cell = WB.Range("A1:A100").Find("Erfolg", After:=WB.Range("A35"))
If Not Cell Is Nothing Then
' Wenn der Wert in der Zielzelle gr?er als Null ist, wird der Roboter genutzt
iCount = iCount - (Cell.Offset(, 1) > 0)
End If
End If
Next WB
Application.ScreenUpdating = True
End Sub

Anzeige
AW: Mein Schnipsel ....
23.01.2020 15:19:34
Rudi
Hallo,
da fehlt die Angabe des Worksheets. Sorry
Set Cell = WB.Range("A1:A100").Find("Erfolg", After:=WB.Range("A35"))

muss z.B. sein
Set Cell = WB.Sheets("Blattname").Range("A1:A100").Find("Erfolg", After:=WB.Range("A35"))
Außerdem hast du hier
GetObject pfad & "\" & Dateiname

einen \\, da Pfad bereits mit \ endet.
Public Sub InNutzung()
Dim pfad As String, Dateiname As String
Dim WB As Workbook, Cell As Range, iCount As Integer
iCount = 0
pfad = "C:\Users\A56296611\OneDrive - Deutsche Telekom AG\Berichtautomatisierung TNL-West\"
Application.ScreenUpdating = False
Dateiname = Dir(pfad & "*ZFP*")
'?ffnet alle relevanten Excel-Dateien im Hintergrund
Do While Dateiname  ""
Set WB = GetObject(pfad & Dateiname)   'Datei ?ffnen
Set Cell = WB.Sheets("Blattname").Range("A1:A100").Find("Erfolg", After:=WB.Range("A35"))
If Not Cell Is Nothing Then
' Wenn der Wert in der Zielzelle gr?er als Null ist, wird der Roboter genutzt
iCount = iCount - (Cell.Offset(, 1) > 0)
End If
WB.Close False    'Datei wieder schlie?en
Dateiname = Dir() 'n?chster Dateiname
Loop
End Sub
Gruß
Rudi
btw.: was machst du mit iCount?
Anzeige
AW: Mein Schnipsel ....
23.01.2020 15:30:53
Simon
Hi,
kein Problem :D
Ich weiß, dass da ein doppel Slash ist, aber es funktioniert nur so, bitte Frag nicht warum :D
Mit iCount will ich zählen wie oft der Wert in der Zielzelle größer als Null ist, denn dadurch weiß ich das ein bestimmtes Programm benutzt wird.
AW: Mein Schnipsel ....
23.01.2020 15:34:12
Simon
Selber Fehler, ich verstehs nicht.
AW: Mein Schnipsel ....
23.01.2020 16:05:28
volti
Hallo Simon,
habe auch noch mal drüber geschaut. Auch bei After:=WB.Range("A35") muss natürlich das Blatt und nicht das Workbook stehen.
Schlage daher vor, eine Variable WS für Worksheet einzuführen und Cell in rCell umzuwandeln. Verwechselt man sonst auch schnell.
Für den Worksheetnamen nimmst Du entweder die Nummer (z.B. immer das erste/xte/einzige Blatt), den immer selben Namen oder Du musst Dir SELECT-Abfrage machen, falls bei mehreren gültigen Workbooks die Blätter unterschiedlich heißen sollten.
Und Screenupdating würde ich auch wieder einschalten, wobei Du Dir das eigentlich sparen kannst, das auszuschalten. Es passiert ja nichts auf dem Bildschirm...
Public Sub InNutzung()
  Dim Pfad As String, Dateiname As String
  Dim WB As Workbook, WS As Worksheet
  Dim rCell As Range
  Dim iCount As Integer
 
  Pfad = "C:\Users\A56296611\OneDrive - Deutsche Telekom AG\Berichtautomatisierung TNL-West\"
  Application.ScreenUpdating = False
 
  Dateiname = Dir(Pfad & "*ZFP*")
  'öffnet alle relevanten Excel-Dateien im Hintergrund
  Do While Dateiname <> ""
    Set WB = GetObject(Pfad & Dateiname)    'Datei öffnen
    Set WS = WB.Sheets(1)                   'Oder WB.Sheets("Blattname")
    Set rCell = WS.Range("A1:A100").Find("Erfolg", After:=WS.Range("A35"))
    If Not rCell Is Nothing Then
      ' Wenn der Wert in der Zielzelle größer als Null ist, wird der Roboter genutzt
      iCount = iCount - (rCell.Offset(, 1) > 0)
    End If
    WB.Close False    'Datei wieder schließen
    Dateiname = Dir() 'nächster Dateiname
  Loop
  Application.ScreenUpdating = True
End Sub
viele Grüße
Karl-Heinz

Hier ein neuer Versuch:
Anzeige
AW: Mein Schnipsel ....
23.01.2020 16:15:21
Simon
Hi,
IHR SEID DIE BESTEN!!
Funtkioniert besten Dank :D :D
VG
Simon

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige