1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

Excel 2013: aus geschlossener Arbeitsmappe lesen geht nicht

Discussion in 'Office-Programme' started by tommy_cat, Dec 27, 2017.

Thread Status:
Not open for further replies.
  1. tommy_cat

    tommy_cat Byte

    Windows 10 Home, Version 1709 und MS Office 2013

    Hallo zusammen,

    ich möchte gern aus einer geschlossenen Arbeitsmappe einen Wert auslesen und in eine andere Excel-Tabelle eintragen. Dafür benutze ich den Befehl ExecuteExcel4Macro(). Sub und Function geschrieben wie in Beispielen von "http://www.wbrnet.info/db/1149.html" beschrieben. Alles wunderbar. Mit geschlossener Arbeitsmappe funktioniert es bei mir jedoch nicht. Das Makro gibt dann "#Bezug" zurück. Es läuft nur mit bereits geöffneter Arbeitsmappe.
    Irgendwas mache ich falsch. Liegt's an Windows 10 oder an Excel?

    Gruß tommy_cat
     
  2. Eric March

    Eric March CD-R 80

    Es liegt an dir: falsche Taktik. ;)

    Bezüge
    benötigen zwangsweise eine verfügbare Quelle. Also muss die Quellmappe ebenso zwangsweise offen sein.

    Wenn ich einen Wert auslesen will dann heißt das (Makro…) diesen aus der Quelle zu kopieren und und am Ziel einzufügen.

    Eric March
     
  3. HajoZi

    HajoZi Byte

    Hallo Tommy,

    ich schlage immer folgenden Code vor. Wobei bei einem Wert, würde ich eine Formel in die Zelle eintragen.

    Option Explicit

    Public Function GetDataClosedWB(SourcePath As String, _
    SourceFile As String, sourceSheet As String, _
    SourceRange As String, TargetRange As Range) As Boolean
    'Holt einen Bereich aus einer _geschlossenen_ Arbeitsmappe
    'Nur in VBA zu verwenden; nicht aus einer Tabellenzelle heraus
    t.ramel@mvps.org
    ' wird durch die HoleDaten aufgerufen
    Dim strQuelle As String
    Dim Zeilen As Long
    Dim Spalten As Byte
    On Error GoTo InvalidInput
    strQuelle = "'" & SourcePath & "[" & SourceFile & "]" & sourceSheet & "'!" & Range(SourceRange).Cells(1, 1).Address(0, 0)
    Zeilen = Range(SourceRange).Rows.Count
    Spalten = Range(SourceRange).Columns.Count
    With TargetRange.Cells(1, 1).Resize(Zeilen, Spalten)
    .Formula = "=IF(" & strQuelle & "="""",""""," & strQuelle & ")"
    .Value = .Value
    End With
    GetDataClosedWB = True
    Exit Function
    InvalidInput:
    MsgBox "Die Quelldatei oder der Quellbereich ist ungültig!", vbExclamation, "Get data from closed Workbook"
    GetDataClosedWB = False
    End Function

    Public Sub HoleDaten()
    ' Die Funktion arbeitet mit der obrigen GetDataClosedWB zusammen
    Dim Pfad As String
    Dim Dateiname As String
    Dim Blatt As String
    Dim Bereich As String
    Dim Ziel As Range
    Pfad = "L:\Eigene Dateien\Hajo\Internet\Test\2009\"
    Dateiname = "Beispiel Forum 30.xlsm" ' aus welcher Datei soll er holen?
    Blatt = "Tabelle1" ' von welcher Tabelle soll er holen?
    Bereich = "A1:B9" ' aus welchem Bereich soll er holen?
    Set Ziel = ActiveSheet.Range("A1") ' in welchen Bereich soll er kopieren? Genauer gesagt: Bei welcher Zelle soll er anfangen, Datein reinzukopieren? Bsp: ActiveCell geht auch
    If GetDataClosedWB(Pfad, Dateiname, Blatt, Bereich, Ziel) Then
    MsgBox "Daten importiert"
    End If
    End Sub

    <br><span style=" font-weight:bold;"> Code eingef&uuml;gt mit: </span> <a style ="color:#ffff00; background-color:#000080; font-weight:bold;" href="http://www.haserodt.de/cj_pro/cj_ex.htm" target="blank">Excel Code Jeanie</a>

    Gruß Hajo
     
  4. tommy_cat

    tommy_cat Byte

    Hallo Hajo,
    ich steh voll auf'm Schlauch. Hab Dein Makro eingegeben, Pfad, Dateiname, Blatt, Bereich etc. geändert. Und trotzdem: die Arbeitsmappe, aus der gelesen werden soll, muss bei mir offen sein. Irgendeine Kleinigkeit mache ich falsch. Muss ich den Code in ein Modul schreiben? Bisher hab ich ihn in VBAProject -> "Diese Arbeitsmappe" geschrieben mit Private Sub Workbook_open (), damit der Code sofort beim Öffnen ausgeführt wird (bin nicht so der VBA-Profi).
     
  5. HajoZi

    HajoZi Byte

    Makro, werden Grundsätzlich in ein Modul geschrieben. Unter DieseArbeitsmappe kommen Ereignisse der Mappe.

    Gruß Hajo
     
Thread Status:
Not open for further replies.

Share This Page