Eine Familie von Microsoft-Managementsystemen für relationale Datenbanken, die auf Benutzerfreundlichkeit ausgelegt sind
Hallo,
Deshalb schrieb ich "ungetestet". ;-)
Ersetze Worksheets durch Sheets, dann sollte es klappen.
Gruss - Peter
Dieser Browser wird nicht mehr unterstützt.
Führen Sie ein Upgrade auf Microsoft Edge durch, um die neuesten Features, Sicherheitsupdates und den technischen Support zu nutzen.
Hallo community,
aus Access heraus möchte ich eine Excel Tabelle Aktivieren. Öffnen der Tabelle funktioniert problemlos, wenn ich aber die Tabelle, die im Hintergrund ist, wieder aktivieren und sichtbar machen möchte beiße ich mir die Zähne aus.
Dim Ret
Dim ExcelApp As Object
Dim WB As Workbook
Dim TargetWorkbook As Workbook
Set ExcelApp = CreateObject("Excel.Application")
'Check if workbook is open**********************************************************************
Ret = IsWorkBookOpen("C:/TDB\_DataBase/Process\_Data\_Analysis.xlsm")
If Ret = True Then
' ExcelApp.Visible = True
Set TargetWorkbook = ExcelApp.Workbooks("C:/TDB\_DataBase/Process\_Data\_Analysis.xlsm") <== Her tritt der Fehler auf , Laufzeitfehler 9 Subscript out of range.
' Workbooks("Process\_Data\_Analysis.xlsm").Activate
' MsgBox "The name of the active workbook is " & ActiveWorkbook.Name
' Workbooks("Process\_Data\_Analysis.xlsm").Visible = True
' Set TargetWorkbook = ExcelApp.Workbooks.Open("C:/TDB_DataBase/Process_Data_Analysis.xlsm")
' ExcelApp.Visible = True
' TargetWorkbook.Worksheets("Source").Range("A2").CopyFromRecordset rsEPRT
GoTo 700
Else
Set TargetWorkbook = ExcelApp.Workbooks.Open("C:/TDB\_DataBase/Process\_Data\_Analysis.xlsm")
ExcelApp.Visible = True
TargetWorkbook.Worksheets("Source").Range("A2").CopyFromRecordset rsEPRT
End If
Laufzeitfehler deutet auf Fehler im Filenamen hin aber der ist korrekt und wenn ich prüfe ob der File offen ist, dann funktioniert das mit dem Filenamen anstandslos, auch wenn ich den File öffne dann funktioniert das mit dem Filenamen. Das Problem taucht nicht nur bei der Kommandozeile "Set TargetWorkbook..........." auf sondern auch bei den nachfolgenden Kommandos " Workbooks....Activate" und "Workbooks.visible......" ich schaffe es einfach nicht, die offene Exceltabelle im Vordergrund sichtbar werden zu lassen. Kann mir bitte jemand auf die Sprünge helfen??
Danke
Peter
Eine Familie von Microsoft-Managementsystemen für relationale Datenbanken, die auf Benutzerfreundlichkeit ausgelegt sind
Gesperrte Frage. Diese Frage wurde aus der Microsoft-Support-Community migriert. Sie können darüber abstimmen, ob sie hilfreich ist, aber Sie können keine Kommentare oder Antworten hinzufügen oder der Frage folgen.
Hallo,
Deshalb schrieb ich "ungetestet". ;-)
Ersetze Worksheets durch Sheets, dann sollte es klappen.
Gruss - Peter
Hallo Peter,
danke für die Antwort. Die Zeile .Workbooks...... "source".... führt wieder zur Fehlermeldung "Subscript out of range". Der Tabellenname ist Korrekt und Worksheet Name ist korrekt und beide existieren, definitiv.
.Workbooks("Process_Data_Analysis.xlsm").Worksheets("source").Select
wenn ich die Zeile auskommentiere dann durchläuft VBA die nächste Zeile ohne Störung aber weder liegt die Tabelle im Vordergrund noch wird irgendetwas hineinkopiert. Wenn ich die Tabelle manuel in den Vordergrund stelle dann erhalte ich eine Fehlermeldung, er kann nicht in eine Tabelle einfügen, er bezieht sich da auf eine andere Tabelle, und genau das will ich ja vermeiden, es soll in die Richtige Tabelle eingefügt werden.
.Selection.Range("A2").CopyFromRecordset rsEPRT
Das Ding treibt mich noch zur Verzweiflung.
Gruss
Peter
Hallo,
> wenn ich Daten mit CopyFromRecordset ...transferieren will dann erhalte ich wieder die Fehlermeldung Subscript out of range.
> Gehe ich recht in der Vermutung ich müsste in der For Schleife auch den Worksheet Namen in einer Schleife durchlaufen?
Wenn du den Namen des Worksheets kennst ("Source"?) und dieser sicher auch vorhanden ist, kannst du es direkt adressieren. Allerdings musst du es richtig addressieren. Im With-Konstrukt:
.Workbooks("Process_Data_Analysis.xlsm").Worksheets("Source").Select
.Selection.Range("A2").CopyFromRecordset rsEPRT
(ungetestet)
Die erste Zeile wählt das Blatt aus, also bringt es in den Vordergrund.
Gruss - Peter
Hallo Peter,
ich habe deine Lösungsvorschlag ausprobiert es läuft auch durch aber wenn ich Daten mit CopyFromRecordset ...transferieren will dann erhalte ich wieder die Fehlermeldung Subscript out of range. Gehe ich recht in der Vermutung ich müsste in der For Schleife auch den Worksheet Namen in einer Schleife durchlaufen? Wie beim Workbook? Oder wie müsste ich das Worksheet aktivieren?
Ein Problem ist auch noch , dass die Tabelle nicht in den Vordergrund des Bildschirms gelegt wird.
Gruss
Peter
Sub XXIsWorkBookOpen(FileName As String)
Dim Db As DAO.Database
Dim rsEPRT As DAO.Recordset
Set Db = Application.CurrentDb
Set rsEPRT = Db.OpenRecordset("qry\_Process\_Data\_Abfrage\_Export", dbOpenDynaset)
Dim ExcelApp As Object
Dim I As Long
On Error Resume Next
Set ExcelApp = GetObject(, "Excel.Application")
On Error GoTo 0
If ExcelApp Is Nothing Then
Err.Clear
Set ExcelApp = CreateObject("Excel.Application")
Else
For I = 1 To ExcelApp.Workbooks.Count
If ExcelApp.Workbooks(I).Name = "Process\_Data\_Analysis.xlsm" Then
ExcelApp.Workbooks(I).Activate
Exit For
End If
Next I
End If
With ExcelApp
.Visible = True
.UserControl = True
.Worksheets("Source").Range("A2").CopyFromRecordset rsEPRT
End With
Set ExcelApp = Nothing
Set rsEPRT = Nothing
Set Db = Nothing
End Sub
Hallo,
Du prüfst hier, ob sich die Datei sperren lässt, und schließt andernfalls daraus, dass sie in Excel auf deinem Rechner bereits geöffnet ist. Sie könnte aber genauso von einem anderen Rechner in Excel, oder von deinem Rechner vom Backup-Prozess oder Virenscanner "geöffnet" sein und die Prüfung würde dasselbe Ergebnis bringen.
Ich würde eine andere Vorgehensweise wählen:
Auch bei dieser Vorgehensweise besteht die Möglichkeit, dass die Datei von einem anderen Prozess als Excel im Zugriff ist, aber das musst du beim Öffnen durch entsprechende Fehlerbehandlung abfangen.
Beispiel (keine Lösung, aber ein Ansatz):
Dim ExcelApp As Object
Dim I As Long
On Error Resume Next
Set ExcelApp = GetObject(, "Excel.Application")
On Error GoTo 0
If ExcelApp Is Nothing Then
Err.Clear
Set ExcelApp = CreateObject("Excel.Application")
Else
For I = 1 To ExcelApp.workbooks.Count
If ExcelApp.workbooks(I).Name = "Process_Data_Analysis.xlsm" Then
ExcelApp.workbooks(I).Activate
Exit For
End If
Next I
End If
With ExcelApp
.Visible = True
.UserControl = True
End With
Set ExcelApp = Nothing
Gruss - Peter