Anzeige
Archiv - Navigation
1252to1256
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

VBA funktioniert nur im aktiven Arbeitsblatt

VBA funktioniert nur im aktiven Arbeitsblatt
kleinkatha
Hallo zusammen,
ich versuche mich gerade mal wieder an einem Makro und stoße dabei immer wierder auf das gleiche Problem.
Ich habe eine Arbeitsmappe mit 4 Arbeitsblättern. Über VBA lasse ich nun verschieden Formeln in den Blättern hinzufügen und Daten aus anderen Arbeitsblättern rauskopieren.
Ist das Arbeitsblatt aktiviert, in dem der Code Berechnungen machen soll läuft alles wunderbar. Steht der Cursor jedoch in einem anderen Arbeitsblatt läuft die Variable (s) in einen Fehler. Und ich komme nicht mehr weiter. Hier ein Beispiel:
Sub ZQM88_Bearbeiten()
Application.ScreenUpdating = False
z = Worksheets("ZQM88").UsedRange.Rows.Count
c = Worksheets("ZQM88").UsedRange.Columns.Count
s = 0
Set wks_ZQM88 = Worksheets("ZQM88")
Set wks_Teilefamilien = Worksheets("Teilefamilien")
Set wks_Overview = Worksheets("Overview")
Set wks_DC = Worksheets("DC")
'Spalte Kundenmaterial finden
s = wks_ZQM88.Application.Match("Kundenmat", Rows(1), 0)
'Leerzeichen in Kundenmaterial löschen
wks_ZQM88.Columns(s).Select
Selection.Replace What:=" ", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False
End Sub

Wie funkioniert es, dass das Tabellenblatt "Overview" aktiv ist und trotzdem die Befehle in "ZQM88" laufen?
Vielen Dank schon mal.
Gruß,
Katharina

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: VBA funktioniert nur im aktiven Arbeitsblatt
29.02.2012 11:07:06
Beverly
Hi Katharina,
wenn ein tabellenblatt nicht aktiv ist, kann auch nichts selektiert werden - da liegt der Hase im Pffer begraben. Man muss also ohne Select arbeiten, was auch in 99% aller Fälle möglich ist. Versuche es einfach mal so (ungetestet):
wks_ZQM88.Columns(s).Replace What:=" ", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False



AW: VBA funktioniert nur im aktiven Arbeitsblatt
29.02.2012 11:16:24
kleinkatha
Danke erst mal, das ist ein guter Ansatz. Ich habe nämlich gestern erst versucht alles so umzuschreiben, dass ich kein select brauche. Die Stelle habe ich wohl übersehen. Habe die Änderung übernommen.
Aber warum gibt die Zeile
s = wks_ZQM88.Application.Match("Kundenmat", Rows(1), 0)
für s den "Wert" Fehler 2042 zurück?
Dann funktioniert natürlich auch die Folgezeile nicht.
Danke und Gruß
Anzeige
AW: VBA funktioniert nur im aktiven Arbeitsblatt
29.02.2012 11:09:48
ChrisL
Hi Katharina
'Spalte Kundenmaterial finden
s = wks_ZQM88.Application.Match("Kundenmat", wks_ZQM88.Rows(1), 0)
'Leerzeichen in Kundenmaterial löschen
wks_ZQM88.Columns(s).Replace What:=" ", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False
Bei Rows(1) fehlt der Bezug zum Tabellenblatt...
Gruss
Chris
AW: VBA funktioniert nur im aktiven Arbeitsblatt
29.02.2012 11:21:59
kleinkatha
Das wars.
Vielen Dank
AW: VBA funktioniert nur im aktiven Arbeitsblatt
29.02.2012 11:22:20
Rudi
Hallo,
so:
Sub ZQM88_Bearbeiten()
Dim wks_ZQM88 As Worksheet, wks_Teilefamilien As Worksheet
Dim wks_Overview As Worksheet, wks_Overview As Worksheet
Dim z As Long, s As Long, c As Long
Application.ScreenUpdating = False
Set wks_ZQM88 = Worksheets("ZQM88")
Set wks_Teilefamilien = Worksheets("Teilefamilien")
Set wks_Overview = Worksheets("Overview")
Set wks_DC = Worksheets("DC")
z = wks_ZQM88.UsedRange.Rows.Count
c = wks_ZQM88.UsedRange.Columns.Count
s = 0
'Spalte Kundenmaterial finden
s = Application.Match("Kundenmat", wks_ZQM88.Rows(1), 0)
'Leerzeichen in Kundenmaterial löschen
wks_ZQM88.Columns(s).Replace What:=" ", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False
End Sub

Gruß
Rudi
Anzeige
Korrektur
29.02.2012 11:23:47
Rudi
Tippfehler
Sub ZQM88_Bearbeiten()
Dim wks_ZQM88 As Worksheet, wks_Teilefamilien As Worksheet
Dim wks_Overview As Worksheet, wks_DC As Worksheet
Dim z As Long, s As Long, c As Long
Application.ScreenUpdating = False
Set wks_ZQM88 = Worksheets("ZQM88")
Set wks_Teilefamilien = Worksheets("Teilefamilien")
Set wks_Overview = Worksheets("Overview")
Set wks_DC = Worksheets("DC")
z = wks_ZQM88.UsedRange.Rows.Count
c = wks_ZQM88.UsedRange.Columns.Count
s = 0
'Spalte Kundenmaterial finden
s = Application.Match("Kundenmat", wks_ZQM88.Rows(1), 0)
'Leerzeichen in Kundenmaterial löschen
wks_ZQM88.Columns(s).Replace What:=" ", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False
End Sub

Gruß
Rudi
Anzeige
noch eine Variante
29.02.2012 11:31:25
Erich
Hi Katharina,
hier bietet sich auch "With" an:

Sub ZQM88_Bearbeiten()
Dim wks_ZQM88 As Worksheet, wks_Teile As Worksheet
'   Dim wks_Over As Worksheet, wks__DC As Worksheet
Dim Z As Long, c As Long, s As Variant
Set wks_ZQM88 = Worksheets("ZQM88")
'   Set wks_Teilefamilien = Worksheets("Teilefamilien")
'   Set wks_Overview = Worksheets("Overview")
'   Set wks_DC = Worksheets("DC")
Application.ScreenUpdating = False
With wks_ZQM88
Z = .UsedRange.Rows.Count
c = .UsedRange.Columns.Count
'      s = 0 ' ist überflüssig, wird ohnehin gleich belegt
'Spalte Kundenmaterial finden
s = Application.Match("Kundenmat", .Rows(1), 0)
If IsNumeric(s) Then       'Leerzeichen in Kundenmaterial löschen
.Columns(s).Replace What:=" ", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False
Else
MsgBox "'Kundenmat' wurde nicht gefunden in Zeile 1"
End If
End With
End Sub
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich
Anzeige
AW: noch eine Variante
29.02.2012 13:24:15
kleinkatha
Vielen Dank.
Da sind noch viele Anregungen drin.
(Aktuelles ;o)) Problem ist gelöst.
Gruß,
Katharina

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige