Discussion:
Fehler "Methode 'Range' für das Objekt '_Global' ist fehlgeschlagen" in OLE Objekten
(zu alt für eine Antwort)
J***@web.de
2007-07-04 09:50:45 UTC
Permalink
Hallo NG,

ich will gerade ein VB Script programmieren, das durch alle in einer
Word Datei eingebetteten Excel Objekte läuft. Dabei soll es in allen
Zellen in den Formeln einen Ausdruck durch einen anderen ersetzen.
Leider bekomme ich bei der Ausführung in der Zeile mit dem ersten
Range immer folgende Fehlermeldung:
"Laufzeitfehler '1004': Die Methode 'Range' für das Objekt '_Global'
ist fehlgeschlagen"

Hier ist einmal mein Code:

Dim strFnd As String 'Text that has to be searched and replaced
Dim strPst As String 'Text that has to be put in

'The routine SubSetGlblPrms() sets the parameters for this modul.
Sub SubSetGlblPrms()
Dim strPrmpt As String
Dim strTtl As String

strPrmpt = "Geben Sie den Pfad/Text ein, der in allen Excel
Objekten gesucht und ersetzt werden soll: "
strTtl = "Definition des Parameters ""strFnd"""
strFnd = InputBox(strPrmpt, strTtl)

strPrmpt = "Geben Sie den Pfad/Text ein, der in allen Excel
Objekten eingetragen/eingefügt werden soll: "
strTtl = "Definition des Parameters ""strPst"""
strPst = InputBox(strPrmpt, strTtl)
End Sub

'SubEdtPth() goes through all Excel objects in the word file and
replaces
'a part of the paths, which show up in the Excel formulas.
Sub SubEdtPth()

Dim strOrgn As String 'Original value from the addressed cell in
an excel object.
Dim intCl As Integer
Dim intRw As Integer 'Counter for indexing the rows in an Excel
object
Dim strClAddrss As String
Dim objInlnShp As InlineShape

'Set parameters.
SubSetGlblPrms
If strFnd = "" Or strPst = "" Then
MsgBox "Falsche Eingabe in den Eingabefeldern!"
Exit Sub
End If
intCnt = 1

'Runs through all the Excel objects and puts the focus on them.
For Each objInlnShp In ActiveDocument.InlineShapes
objInlnShp.OLEFormat.Edit

'For each column
For intCl = 65 To 84 Step 1
'For each row
For intRw = 1 To 35 Step 1
'Changing the relevant text data.
strClAddrss = Chr(intCl) + CStr(intRw)
strOrgn = CStr(Range(strClAddrss).FormulaLocal)
strOrgn = Replace(strOrgn, strFnd, strPst, 1, -1,
vbTextCompare)
Range(strClAddrss).FormulaLocal = strOrgn
Next
Next
Next
End Sub

Vermutlich kann der Befehl Range mein InlineShape Objekt nicht
adressieren. Allerdings wird für die Variable objInlnShp nach Eingabe
eines Punktes "Range" in der Befehlsliste aufgeführt.

Ich hoffe es kann mir jemand weiterhelfen.

Für alle Tipps im Voraus besten Dank.

Viele Grüße
Marc
Thomas Gahler
2007-07-04 11:02:41 UTC
Permalink
Post by J***@web.de
Vermutlich kann der Befehl Range mein InlineShape Objekt nicht
adressieren. Allerdings wird für die Variable objInlnShp nach Eingabe
eines Punktes "Range" in der Befehlsliste aufgeführt.
Du hast das Problem erkannt, aber falsch interprtiert.

Die .Range-Eigenschaft, die du vom .InlineShale-Objekt siehst in ein
Wordobjekt (den Bereich, der das InlineShape abdeckt). Du suchst jedoch ein
.Range in einem ExcelArbeitsblatt.
--
Thomas Gahler
MVP für WordVBA
Co-Autor von »Microsoft Word-Programmierung.
Das Handbuch« (MS Press)


- Windows XP (SP2), Office XP (SP3)
J***@web.de
2007-07-04 11:28:06 UTC
Permalink
Post by Thomas Gahler
[...]
Die .Range-Eigenschaft, die du vom .InlineShale-Objekt siehst in ein
Wordobjekt (den Bereich, der das InlineShape abdeckt). Du suchst jedoch ein
.Range in einem ExcelArbeitsblatt.
[...]
Hallo Thomas,

vielen Dank für Deine Antwort.

Bitte hast Du eine Idee, wie ich dann den Zelleninhalt des Excel
Objekts noch ansprechen kann?

Für Deine Antwort im Voraus besten Dank,

Viele Grüße
Marc
Carsten Sekulla
2007-07-04 14:02:35 UTC
Permalink
Post by Thomas Gahler
[...]
Die .Range-Eigenschaft, die du vom .InlineShale-Objekt siehst in ein
Wordobjekt (den Bereich, der das InlineShape abdeckt). Du suchst jedoch ein
.Range in einem ExcelArbeitsblatt.
[...]
Hi Marc,
Post by Thomas Gahler
Bitte hast Du eine Idee, wie ich dann den Zelleninhalt des Excel
Objekts noch ansprechen kann?
strOrgn = CStr(Range(strClAddrss).FormulaLocal)
Range(strClAddrss).FormulaLocal = strOrgn

sind die Übeltäter und nicht sehr schön. Immer Objekte vollständig und exakt
ansprechen.

Hie muss der Verweis auf das InlineExcel davorstehen.
etwa so:
Dim XL as Object
Dim xlRange as Object
Set xlWB = objInlnShp.OLEFormat.Object
set xlRange= xlWB.ActiveSheet.Range(strClAddrss)

strOrgn = CStr(xlRange.FormulaLocal)
usw.

(ngetestet)

cu CS
Marc Legler
2007-07-11 08:13:34 UTC
Permalink
On 4 Jul., 16:02, "Carsten Sekulla"
Post by J***@web.de
strOrgn = CStr(Range(strClAddrss).FormulaLocal)
Range(strClAddrss).FormulaLocal = strOrgn
sind die Übeltäter und nicht sehr schön. Immer Objekte vollständig und exakt
ansprechen.
Hie muss der Verweis auf das InlineExcel davorstehen.
Dim XL as Object
Dim xlRange as Object
Set xlWB = objInlnShp.OLEFormat.Object
set xlRange= xlWB.ActiveSheet.Range(strClAddrss)
strOrgn = CStr(xlRange.FormulaLocal)
usw.
Hallo Carsten,

vielen Dank für Deine Antwort.

Entspricht in Deinen Zeilen der Parameter xlWB dem Objekt XL? Leider
klappt es immer noch nicht. Eingebunden in meine Schleife (die ganze
Routine soll auf mehrere Excel Objekte nacheinander angewendet werden)
Post by J***@web.de
Mein Code Anfang ------------------------------------
Dim strFnd As String 'Text that has to be searched and replaced
Dim strPst As String 'Text that has to be put in
Dim objInlnShp As InlineShape 'Object to go through all the Excel
objects from the word file

[...]

'SubEdtPth() goes through all Excel objects in the word file and
replaces
'a part of the paths, which shows up in the Excel formulas.
Sub SubEdtPth()

Dim strOrgn As String 'Original value from the addressed
cell in an excel object.
Dim intCl As Integer 'Counter for indexing the columns
in an Excel object
Dim intRw As Integer 'Counter for indexing the rows in
an Excel object
Dim strClAddrss As String 'Cell address in an Excel object

'Den Parametern werden entsprechende Werte zugewiesen...
[...]

For Each objInlnShp In ActiveDocument.InlineShapes
Dim XL As Object
Dim xlRange As Object
Set XL = objInlnShp.OLEFormat.Object

For intCl = 1 To 20 Step 1
For intRw = 1 To 35 Step 1
strClAddrss = Chr(intCl) + CStr(intRw)
Set xlRange = XL.ActiveSheet.Range(strClAddrss)
strOrgn = CStr(xlRange.FormulaLocal)
strOrgn = Replace(strOrgn, strFnd, strPst, 1, -1,
vbTextCompare)
xlRange.FormulaLocal = strOrgn
Next
Next
Next

[...]
End Sub
Post by J***@web.de
Mein Code Ende ------------------------------------
Die Zeile Set XL = objInlnShp.OLEFormat.Object schmeißt nun folgende
Fehlermeldung: "Laufzeitfehler '430': Klasse unterstützt keine
Automatisierung oder unterstützt erwartete Schnittstelle nicht"

Ich meine Deine Zeilen an den richtigen Stellen implementiert zu
haben.
???

Viele Grüße
Marc
Carsten Sekulla
2007-07-11 10:58:34 UTC
Permalink
Hi Marc
Post by J***@web.de
vielen Dank für Deine Antwort.
Entspricht in Deinen Zeilen der Parameter xlWB dem Objekt XL? Leider
oh oh , solte ich doch besser testen...
Post by J***@web.de
strClAddrss = Chr(intCl) + CStr(intRw)
Set xlRange = XL.ActiveSheet.Range(strClAddrss)
quark? Chr() liefert sicher keine Range
Post by J***@web.de
Die Zeile Set XL = objInlnShp.OLEFormat.Object schmeißt nun folgende
Fehlermeldung: "Laufzeitfehler '430': Klasse unterstützt keine
Automatisierung oder unterstützt erwartete Schnittstelle nicht"
ich wusste, da war noch was (grübel)
objInlnShp.OLEFormat.Activate
oder s.u.

und da ist noch mehr:
- Word schliesst (manchmal) XL nicht richtig
- xlWB.Close deaktiviert das IS nicht immer

bei mir läuft der Code (Office XP)

cu CS

Public Sub XL_IS_Edit()
Dim strOrgn As String 'Original value from the addressed cell
in an excel object.
Dim intCl As Integer 'Counter for indexing the columns in an
Excel object
Dim intRw As Integer 'Counter for indexing the rows in an
Excel object
Dim strClAddrss As String 'Cell address in an Excel object
Dim objInlnShp As Word.InlineShape
Dim strFnd As String
Dim strPst As String
Dim xlWB As Object
Dim xlRange As Object
Dim xlApp As Object

Dim lError As Long
'Den Parametern werden entsprechende Werte zugewiesen...
' [...]
strFnd = InputBox("Alt")
strPst = InputBox("Neu")
For Each objInlnShp In ActiveDocument.InlineShapes
objInlnShp.OLEFormat.DoVerb Word.WdOLEVerb.wdOLEVerbHide
Set xlWB = objInlnShp.OLEFormat.Object

For intCl = 1 To 20 Step 1
For intRw = 1 To 35 Step 1
' strClAddrss = Chr(intCl) + CStr(intRw)
' Set xlRange = XL.ActiveSheet.Range(strClAddrss)
If xlWB.ActiveSheet.Type = -4167 Then
Set xlRange = xlWB.ActiveSheet.Cells(intRw, intCl)
strOrgn = CStr(xlRange.FormulaLocal)
strOrgn = Replace(strOrgn, strFnd, strPst, 1, -1,
vbTextCompare)
xlRange.FormulaLocal = strOrgn
End If
Set xlRange = Nothing
Next
Debug.Print ".";
Next
Debug.Print xlWB.ActiveSheet.Name
Set xlApp = xlWB.Parent
xlWB.Close
Set xlWB = Nothing
xlApp.Quit
Set xlApp = Nothing
Next


' [...]
End Sub
Carsten Sekulla
2007-07-11 12:03:22 UTC
Permalink
"Carsten Sekulla" <***@Spam.medizin.uni-halle.de> schrieb im
Newsbeitrag news:umez%
Post by Carsten Sekulla
objInlnShp.OLEFormat.DoVerb Word.WdOLEVerb.wdOLEVerbHide
ps. hier ggf. Word.WdOLEVerb.wdOLEVerbOpen
cu CS

Loading...