Anzeige
Archiv - Navigation
940to944
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
940to944
940to944
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Zugriff auf anderes Workbook

Zugriff auf anderes Workbook
16.01.2008 18:53:00
Udo
Hallo,
ich möchte mittels eine Function auf eine anderes Workbook zugreifen und dort Zellen verketten.
Dazu gibts die Function:
Function Verketten(SourceWorkB As Workbook) As String
Verketten = "=CONCATENATE([Symbolik.xls]Emu!R14C1,[Symbolik.xls]Emu!R14C2)"
'das geht, da ich die Namen des Workbook und Worksheet direkt angebe.
' Ich möchte aber die VariablenNamen aus den Übergabeparametern verwenden, ungefähr so
Verketten = "=CONCATENATE([SourceWorkB]Emu!R14C1,[SourceWorkB]Emu!R14C2)"
geht aber nicht, da die Datei SourceWorkB nicht gefunden wird.
Danke im vorraus
Udo Berger

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zugriff auf anderes Workbook
16.01.2008 19:16:56
Christian
Hallo Udo,
so zB:

Option Explicit
Function CONC(strWKB As String, strWKS As String) As String
CONC = _
"=CONCATENATE([" & strWKB & "]'" & strWKS & _
"'!R14C1,[" & strWKB & "]'" & strWKS & "'!R14C2)"
End Function
Sub TestFunction()
MsgBox CONC("TestWks.xls", "Tabelle1")
End Sub

Gruß Christian

AW: Zugriff auf anderes Workbook
17.01.2008 10:38:34
Udo
Danke für die Info mit dem &-Operator - hat geholfen
Udo

AW: Zugriff auf anderes Workbook
16.01.2008 19:21:15
Erich
Hallo Udo,
warum mit der VERKETTEN-Funktion? In VBA gibts doch auch den &-Operator.
Willst du wirklich das Workbook-Objekt als Parameter übergeben?
In der 2. Version wird nur der Name des Workbooks als String übergeben.
Probier mal

Function Verkette1(SourceWorkB As Workbook) As String
With SourceWorkB.Worksheets("Emu")
Verkette1 = .Cells(14, 1) & .Cells(14, 2)
End With
End Function
Function Verkette2(strWBName As String) As String
With Workbooks(strWBName).Worksheets("Emu")
Verkette2 = .Cells(14, 1) & .Cells(14, 2)
End With
End Function
Sub tst()
MsgBox Verkette1(ThisWorkbook)
MsgBox Verkette2(ThisWorkbook.Name)
End Sub

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: Zugriff auf anderes Workbook
17.01.2008 11:00:00
Udo
Hallo Erich,
vielen Dank für die Info. Richtig hast Du schon in die Übergabeparameter auch das Tabellenblatt mit aufgenommen. Ich möchte auch die Zellen mit aufnehmen. Ich weiss aber nicht als welchen Typ.
Function Verketten(SourceWorkB As String, SourceWorkS As String, Zelle1 As Variant, Zelle2 As Variant) As String
Beim Aufruf der Funktion möche ich einfach Zelle1:=A14 oder Zelle1:=R14C1 angeben.
Gruesse
Udo

AW: Zugriff auf anderes Workbook
17.01.2008 13:06:53
Erich
Hallo Udo,
ist eine eigene Verketten-Funktion in VBA überhaupt nötig/sinnvoll/praktisch?
erg = Range("A1") & Range("A2") lässt sich doch im Prinzip genau so hinschrieben wie
erg = Range("A1") * Range("A2") oder erg = Range("A1") + Range("A2")
Kämest du bei der Addition oder Multiplikation auf die Idee, dafür eigene Funktionen zu schreiben?
War vielleicht der Grund, dass der Aufruf der VERKETTEN-Fkt. so kompliziert aussah?
Wenn es um den Zugriff auf Zellen einer anderen Mappe oder eines anderen Blattes geht:
Das lässt sich sehr schön mit With / EndWith schreiben - ohne Funktion.
Nebenbei: Du solltest die Funktion nicht "Verketten" nennen - so heißt schon die EXCEL-Funktion.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: Zugriff auf anderes Workbook
17.01.2008 13:14:26
Udo
Ja Erich, Du hast schon recht,
aber erstens übe ich etwas und zweitens sollen in der Funktion noc mehr Sachen abgehen, z.B. das Verketten von Zellen solange diese beschrieben sind etc.. Deshalb benötige ich die Zellen als Übergabeparameter, sie sind dann die Startadressen.
Gruesse
Udo

AW: Zugriff auf anderes Workbook
17.01.2008 15:58:00
Erich
Hallo Udo,
die Entscheidung, ob die beiden Zellen per String (=Zelladresse) oder als Bereichsobjekt (Range) als Parameter
übergeben werden sollten, hängt vor allem davon ab, was beim Aufruf leichter fällt.
Wenn es Range-Parameter sind, kann die Angabe des Workbooks und des Wo0rksheets entfallen.
Jeder Bereich kennt das Blatt und die Mappe, zu denen er gehört.
( Das könntest du abfragen mit MsgBox rngA.Parant.Name und rngA.Parant.Parant.Name )
Deine Funktion sähe dann so aus:

Function VerketteR(rngZ1 As Range, rngZ2 As Range) As String
VerketteR = rngZ1 & rngZ2
' oder anderer, umfangreicherer Code
End Function

Wenn die Zelladressen Parameter sein sollen:
Gehören beide Zellen immer im selben Blatt? Wenn nicht, wären auch zwei Mappen- und zwei Blatt-Parameter sinnvoll.
Gehören beide Zellen immer im selben Blatt, sähe das etwa so aus:


Function VerketteS(strWbName As String, strWsName As String, _
strR1 As String, strR2 As String) As String
With Workbooks(strWbName).Worksheets(strWsName)
VerketteS = .Range(strR1) & .Range(strR2)
' oder anderer, umfangreicherer Code
End With
End Function

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: Zugriff auf anderes Workbook
18.01.2008 11:26:43
Udo
Danke Erich, freut mich, wenn ich soviel Unterstützung bekomme. Werde ich gleich mal beides ausprobieren.
Gruesse
udo

AW: Zugriff auf anderes Workbook
18.01.2008 12:06:00
Udo
Habe alles Mögliche ausprobiert, geht aber nichts.
Allein in der Funktion habe ich eingegeben:
VerketteS = .Range(1, 1) & .Range(1, 2)
oder
VerketteS = .Range([R1C1]) & .Range([R1C2])
oder
VerketteS = .Range([R1C1] & .Range([R1C2]
oder
VerketteS = .Range(A1) & .Range(A2)
geht alles nicht
Ferner kann ich beim Aufruf der Funktion auch nicht wissen, in welcher Form die Zelle übergeben werden soll.
Auch in deiner ersten Version als Range geht nichts.
Die gleiche Problematik: Wie soll die Zelle übergeben werden? A1, R1C1...
Udo

Anzeige
AW: Zugriff auf anderes Workbook
18.01.2008 13:21:05
Erich
Hallo Udo,
was du hinter "Habe alles Mögliche ausprobiert, geht aber nichts."
geschrieben hast, geht sicher nicht.
Da müsstest du dich noch ein wenig damit beschäftigen, wie man in VBA Zellen anspricht.
Beispiele dafür gibt es in der VBA-Hilfe und hier im Forum in Hülle und Fülle.
Ich hatte dir geschrieben:
Die Entscheidung, ob die beiden Zellen per String (=Zelladresse) oder als Bereichsobjekt (Range) als Parameter
übergeben werden sollten, hängt vor allem davon ab, was beim Aufruf leichter fällt.
Wo willst du die Funktion nutzen?
Willst du sie von einer VBA-Routine aus aufrufen? Oder in einer Tabelle?
Wenn aus VBA: Wie werden die zu verkettenden Zellen vor dem Aufruf festgelegt?
Hast du die Zellen als Bereiche (Ranges) vorliegen oder nur die Zelladressen?
In dieser Mappe (als Verketter1.xls speichern) findest du für beide Funktionen Beispiele:
https://www.herber.de/bbs/user/49147.xls
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: Korrektur: Parent statt Parant
17.01.2008 16:44:00
Erich
Hallo Udo,
im vorigen Beitrag hätte stehen sollen:
( Das könntest du abfragen mit MsgBox rngA.Parent.Name und rngA.Parent.Parent.Name )
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige