Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Zugriff auf externe Datei

Zugriff auf externe Datei
Uwe
Hallo,
wie baue ich folgendes Makro um, das es nicht mehr auf Tabelle 11 dieser Datei sondern auf Tabelle 1 einer externen Datei (z.B. c:\test.xls) zugreift?
Vielen Dank und noch einen schönen 1.Mai.
Uwe

Private Sub Worksheet_Change(ByVal Target As Range)
Dim ws1 As Worksheet
Dim zeile As Long
Set ws1 = ThisWorkbook.Worksheets(11)
zeile = 2
If Target.Cells.Count > 1 Then Exit Sub
If Target.Column = 16 Then
Do Until IsEmpty(ws1.Cells(zeile, "P"))
If Target = ws1.Cells(zeile, "P") Then
' Werte aus Tabelle 1 übernehmen
ws1.Range(ws1.Cells(zeile, 5), ws1.Cells(zeile, 16)).Copy
Me.Range(Me.Cells(Target.Row, 5), Me.Cells(Target.Row, 16)). _
PasteSpecial Paste:=xlPasteAll
Application.CutCopyMode = xlCut
Target.Select
Exit Do
End If
zeile = zeile + 1
Loop
End If
End Sub

Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Zugriff auf externe Datei
01.05.2004 13:23:14
Georg
Hallo Uwe
die Datei muß auf sein
Set ws1 = Workbooks("test.xls").Worksheets("Tabelle1")
Gruß
AW: Zugriff auf externe Datei
01.05.2004 13:35:08
Nepumuk
Hallo Uwe,
VBA gut?
folgende Variante funktioniert, wenn die Datei test.xls geöffnet ist:


Private Sub Worksheet_Change(ByVal Target As Range)
  Dim ws1 As Worksheet
  Dim zeile As Long
  Set ws1 = Workbooks("test.xls").Worksheets("Tabelle1")
  zeile = 2
  If Target.Cells.Count > 1 Then Exit Sub
  If Target.Column = 16 Then
    Do Until IsEmpty(ws1.Cells(zeile, "P"))
      If Target = ws1.Cells(zeile, "P") Then
        ' Werte aus Tabelle 1 übernehmen
        ws1.Range(ws1.Cells(zeile, 5), ws1.Cells(zeile, 16)).Copy
        Me.Range(Me.Cells(Target.Row, 5), Me.Cells(Target.Row, 16)). _
                  PasteSpecial Paste:=xlPasteAll
        Application.CutCopyMode = xlCut
        Target.Select
        Exit Do
      End If
      zeile = zeile + 1
    Loop
  End If
End Sub


ist sie nicht geöffnet, dann so:


Private Sub Worksheet_Change(ByVal Target As Range)
  Dim ws1 As Worksheet
  Dim zeile As Long
  zeile = 2
  If Target.Cells.Count > 1 Then Exit Sub
  If Target.Column = 16 Then
    GetObject ("c:\test.xls")
    Set ws1 = Workbooks("test.xls").Worksheets("Tabelle1")
    Do Until IsEmpty(ws1.Cells(zeile, "P"))
      If Target = ws1.Cells(zeile, "P") Then
        ' Werte aus Tabelle 1 übernehmen
        ws1.Range(ws1.Cells(zeile, 5), ws1.Cells(zeile, 16)).Copy
        Me.Range(Me.Cells(Target.Row, 5), Me.Cells(Target.Row, 16)). _
                  PasteSpecial Paste:=xlPasteAll
        Application.CutCopyMode = xlCut
        Target.Select
        Exit Do
      End If
      zeile = zeile + 1
    Loop
    Workbooks("test.xls").Close SaveChanges:=False
  End If
End Sub


wenn sie mal geöffnet ist und mal nicht, dann so:


Private Sub Worksheet_Change(ByVal Target As Range)
  Dim ws1 As Worksheet, wkb As Workbook
  Dim zeile As Long, boloffen As Boolean
  zeile = 2
  If Target.Cells.Count > 1 Then Exit Sub
  If Target.Column = 16 Then
    For Each wkb In Workbooks
        If wkb.Name = "test.xls" Then boloffen = TrueExit For
    Next
    If Not boloffen Then GetObject ("c:\test.xls")
    Set ws1 = Workbooks("test.xls").Worksheets("Tabelle1")
    Do Until IsEmpty(ws1.Cells(zeile, "P"))
      If Target = ws1.Cells(zeile, "P") Then
        ' Werte aus Tabelle 1 übernehmen
        ws1.Range(ws1.Cells(zeile, 5), ws1.Cells(zeile, 16)).Copy
        Me.Range(Me.Cells(Target.Row, 5), Me.Cells(Target.Row, 16)). _
                  PasteSpecial Paste:=xlPasteAll
        Application.CutCopyMode = xlCut
        Target.Select
        Exit Do
      End If
      zeile = zeile + 1
    Loop
    If Not boloffen Then Workbooks("test.xls").Close SaveChanges:=False
  End If
End Sub


Gruß
Nepumuk
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige