Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1292to1296
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
Inhaltsverzeichnis

Kopiertes Makro läuft nicht in anderer Tabelle

Kopiertes Makro läuft nicht in anderer Tabelle
09.01.2013 15:49:01
Reiner
Hallo zusammen,
ich habe ein lauffähiges VBA Makro in einer betehenden Tabelle und habe (wie so oft) den Code 1:1 in eine andere Tabelle kopiert.
Egal ob ich es in den Bereich "VBAProject-Diese Arbeitsmappe" oder "VBAProject-Tabelle2 (Export)" kopiere kann ich das Makro nicht ausführen.
Teilweise bekam ich den Fehler 400 bzw. 1004 aber auch wenn ich den Blattschutz ausschalte und sogar die Zellenformatierung entferne funktioniert dieses Makro nicht.
Alle anderen Makros laufen problemlos.
Ich hoffe, daß von euch jemand eine Idee hat wo es klemmt denn ich lese jetzt schon lange (Stunden) alle möglichen Infos und komme nicht weiter.
Ich habe von A1:AE4 Kopfzeilen mit Beschriftungen und ab A5:AEn werden Werte eingetragen.
Das Makro soll leere Spalten inkl. den Kopfzeilen ausblenden und das andere Makro wieder einblenden.
Da das Makro in der alten Ursprungsdatei sollte es ja nicht daran liegen aber ich hänge es _
trotzdem mal an.

Sub Leere_Spalten_ausblenden()
Dim lngLast As Long, rng As Range
Application.ScreenUpdating = False
lngLast = Cells(1, 1).CurrentRegion.Rows.Count
If lngLast > 4 Then
For Each rng In Range("A1:AE1") ' Endzelle eintragen
'    For Each rng In Range(Cells(1, 1), Cells(1, 1).End(xlToRight)) ' Sucht die erste leere  _
Zelle
rng.EntireColumn.Hidden = _
Application.CountA(rng.Offset(4).Resize(lngLast - 4)) = 0
Next
End If
End Sub

Sub Alle_Spalten_einblenden()
Cells.EntireColumn.Hidden = False
End Sub

Vielen Dank, daß ihr euch ein paar Gedanken macht.
Reiner

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Kopiertes Makro läuft nicht in anderer Tabelle
09.01.2013 15:51:58
Hajo_Zi
Das Makro gehört in ein Modul.

AW: Kopiertes Makro läuft nicht in anderer Tabelle
09.01.2013 15:57:17
Reiner
Leider funktioniert das als Modul auch nicht.
Komisch ist auch, daß egal welches Makro ich aufrufe immer nur die Spalten eingeblendet werden.

AW: Kopiertes Makro läuft nicht in anderer Tabelle
09.01.2013 16:02:06
Hajo_Zi
beide Makros laufen Fehlerfrei durch. Das Sie nicht machen was Du willst, hängt vielleicht damit zusammen das Du nicht das richtige Makro hast?
Gruß Hajo

AW: Kopiertes Makro läuft nicht in anderer Tabelle
09.01.2013 16:42:09
Reiner
Das Makro ist schon richtig da es in der anderen Tabelle auch funktioniert.
Ich habe jatzt mal alle anderen Makros rausgelöscht - gleicher Fehler.
Ich habe dann das erste Tabellenblatt gelöscht und dann funktioniert es.
Im VBA Editor unter "DieseArbeitsmappe" habbe ich zwei Makros die Tabellenblätter schützen.

Private Sub Workbook_Open()
'   alle Fenster schützen und ein-/ausblenden (zur Sicherheit)
Worksheets("Ordersheet").Activate
ActiveSheet.Protect "MeinPW"
ActiveSheet.Visible = True
Worksheets("Export").Activate
ActiveSheet.Protect "MeinPW"
ActiveSheet.Visible = True
Worksheets("Start").Activate
ActiveSheet.Protect "MeinPW"
ActiveSheet.Visible = False
Worksheets("Ordersheet").Activate
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Cancel = False
'   alle Fenster schützen und ein-/ausblenden (zur Sicherheit)
Worksheets("Ordersheet").Activate
ActiveSheet.Protect "MeinPW"
ActiveSheet.Visible = True
Worksheets("Export").Activate
ActiveSheet.Protect "MeinPW"
ActiveSheet.Visible = True
Worksheets("Start").Activate
ActiveSheet.Protect "MeinPW"
ActiveSheet.Visible = True
Worksheets("Start").Activate
End Sub
In der Tabelle1 steht ein Makro das bei einer Zelländerung ein anderes Makro aufruft:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("F24:F24")) Is Nothing Then
Call PingHost_Hostname
End If
If Not Intersect(Target, Range("F39:F39")) Is Nothing Then
Call PingHost_Incoming
End If
End Sub
Sub PingHost_Hostname()
' Abfragen ob der Druckerhostname erreichbar ist
ActiveSheet.Unprotect "MeinPW"
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\.\root\cimv2")
With Tabelle1 'Tabelle anpassen
Z = 24  'Zeilennummer des Hostnamen
S = 6   'Spaltennummer des Hostnamen
W = 24  'Ausgabezeile für IP
A = 13  'Ausgabespalte für IP
.Cells(W, A).Interior.ColorIndex = 0 'Ausgabezelle IP leeren und ohne Farbe
.Cells(W, A).Value = "" 'Ausgabezelle IP leeren und ohne Farbe
.Cells(W + 1, A).Interior.ColorIndex = 0 'Ausgabezelle ms leeren und ohne Farbe
.Cells(W + 1, A).Value = ""   'Ausgabezelle ms leeren und ohne Farbe
If .Cells(Z, S).Text  "" Then   'Wenn Hostname nicht leer
Set colPings = objWMIService.ExecQuery _
("Select * From Win32_PingStatus where Address = '" & .Cells(Z, S).Text & "'")
For Each objPing In colPings
If objPing.StatusCode = 0 Then
.Cells(W, A).Value = objPing.ProtocolAddress 'IP-Adresse
.Cells(W + 1, A).Value = objPing.ResponseTime & " ms" 'Antwortzeit in ms
.Cells(W, A).Interior.ColorIndex = 4  'erreichbar = grün
Else
.Cells(W, A).Value = "not reachable"
.Cells(W, A).Interior.ColorIndex = 3  'nicht erreichbar = rot
End If
Next
End If
End With
ActiveSheet.Protect "MeinPW"
End Sub
'
Ich ging immer davon aus, daß ein (nicht aufgerufenes) Makro anderes Tabellenblatt keine Auswirkungen habt.
Wenn es Sinn macht könnte ich auch ein neutralisiertes File erstellen und hochladen aber ich möchte euch auch nicht mit dem Thema zu sehr belasten.
Ich bin auf dem besten Weg in die Psychiatrie denn so ein widerspenstiges Excel hatte ich noch nie.
Viele Grüße
Reiner

Anzeige
AW: Kopiertes Makro läuft nicht in anderer Tabelle
09.01.2013 19:29:03
Luschi
Hallo Reiner,
dieses Durcheinander entsteht, wenn man 'ActiveSheet' benutzt statt Objektbezüge auf eine bestimmte Tabelle. In diesem geposteten Vba-Code geht z.B. nicht hervor, wofür der interne Vba-Tabellenname 'Tabelle1' steht. Ist das "Ordersheet", "Export", "Start" oder noch eine ganz andere Tabelle.
Übergib den Proceduren 'PingHost_Hostname' & 'PingHost_Incoming' die Tabelle die Du meinst und laß nicht Excel bestimmen, welche Tabelle gerade die aktive (sichtbare) Tabelle ist.
Außerdem reagieren auch Tabellen, wenn man per vba-Code Zellinhalte ändert, also sollte man mit 'Application.EnableEvents = False' dafür sorgen, daß Vba die Tabellen/Workbook-Ereignisroutinen in den Schlafzustand versetzt, während Deine Module am Wirken sind und Werte in Tabellenzellen schreiben.
Gruß von Luschi
aus klein-paris

Anzeige
AW: Kopiertes Makro läuft nicht in anderer Tabelle
10.01.2013 11:47:39
Reiner
Hallo zusammen,
vielen Dank für die Tipps aber leider auch die direkte Addressierung hat nichts gebracht.
Über schrittweises löschen von Elementen "try and error" habe ich festgestellt, daß es nicht am Makro sondern am Zellinhalt liegt.
Die Zellen werden durch Formeln aus einem anderem Tabellenblatt gefüllt.
Damit das Makro leere Zellen erkennen kann habe ich den Bereich kopiert und mit "Inhalte einfügen" "Werte" "Leerzellen überspringen" wieder eingefügt.
So wie es aussieht sind die leeren Zellen für das Makro nicht leer und deshalb funktioniert es nicht.
Wenn ich die (optisch) leeren Zellen mit "Entfernen" lösche dann funktioniert alles.
Gibt es eine Möglichkeit das Makro so zu ändern, daß es auch nur optisch leere Zellen ausblendet?
Dann könnte ich mir das Kopieren - Werte einfügen ersparen.
Sub Leere_Spalten_ausblenden()
Dim lngLast As Long, rng As Range
Application.ScreenUpdating = False
lngLast = Cells(1, 1).CurrentRegion.Rows.Count
If lngLast > 4 Then
For Each rng In Range("A1:AE1") ' Endzelle eintragen
'    For Each rng In Range(Cells(1, 1), Cells(1, 1).End(xlToRight)) ' Sucht die erste leere  _
Zelle
rng.EntireColumn.Hidden = _
Application.CountA(rng.Offset(4).Resize(lngLast - 4)) = 0
Next
End If
End Sub
Sub Alle_Spalten_einblenden()
Cells.EntireColumn.Hidden = False
End Sub
Alternativ wäre ein Tipp wie ich beim Werte einfügen etwas anders machen kann auch OK.
Vielen Grüße aus Hessen
Reiner

Anzeige
Geschlossen - separates Thema eröffnet
10.01.2013 13:04:01
Reiner
Da die neue Fragestellung ja erheblich vom ursprünglichen Thema abweicht habe ich mich entschlossen einen neuen Faden/Thread zu eröffnen.
Ich danke allen für ihre Hilfe.

305 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige