Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1808to1812
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

Dim vom Variablen

Dim vom Variablen
04.02.2021 08:58:36
JoS
Hallo,
ich habe eine einfache Frage
Ich habe ein Makro geschrieben, und als Fehler kommt, dass eine Variable nicht definiert ist.
Ich habe habe ein Sub. Hier definiere ich die Variable WB_Problemliste. Dann rufe ich später ein SuB BlattschutzAusProblemliste auf, und dort ist die Variable plötzlich nicht mehr definiert. Warum? Ich bin doch im selben Modul.

Sub Problemliste_kopieren()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim lEintrUebersicht As Integer
Dim lEintragProblemliste As Integer
lEintrUebersicht = ThisWorkbook.Sheets("Übersicht").Cells(Rows.Count, 2).End(xlUp).Row - 1
Dim WB_Problemliste
Set WB_Problemliste = Workbooks.Open("O:\Produktion\QS\Fehlerliste\Problemliste.xlsx")
lEintragProblemliste = WB_Problemliste.Sheets("Übersicht").Cells(Rows.Count, 2).End(xlUp). _
Row - 1
If lEintragProblemliste = lEintrUebersicht Then
WB_Problemliste.Close
With ThisWorkbook
.Sheets("Übersicht").Activate
.Sheets("Übersicht").Cells(lEintrUebersicht + 1, 2).Select
End With
MsgBox ("Keine neuen Einträge vorhanden")
Exit Sub
End If
WB_Problemliste.Sheets("Übersicht").Activate
Dim WS As Worksheet
Dim lng_Zaehler As Long
Dim Spalte As String
Call BlattschutzAusProblemliste  '  Hier bleibt das Makro stehen. BEI AUFRUF DIESES SUBS  _
WIRD DIE VARIABLE WB_PROBLEMLISTE nicht mehr definiert. Warum?
lng_Zaehler = 1
Dim Anz As Integer ' Anzahl der Reihen die Kopiert werden sollen
Anz = 10
For lng_Zaehler = 1 To 10
Select Case lng_Zaehler
Case 1             'In der Übersicht ist die Nr. In Spalte B und gibt es mehr  _
Spalten zu kopieren
lEintrUebersicht = WB_Problemliste.Worksheets(lng_Zaehler).Cells(Rows.Count, 2). _
End(xlUp).Row
If lEintrUebersicht >= 10 Then
Anz = lEintrUebersicht - Anz
Else
Anz = 2
End If
Spalte = "M"
Case 2 To 10
lEintrUebersicht = WB_Problemliste.Worksheets(lng_Zaehler).Cells(Rows.Count, 1). _
End(xlUp).Row
If lEintrUebersicht >= 10 Then
Anz = lEintrUebersicht - Anz
Else
Anz = 2
End If
Spalte = "K"
Case Else
End Select
'ThisWorkbook.Worksheets(lng_Zaehler).Activate
Dim WsName As String
WsName = ActiveSheet.Name
Call WB_Problemliste.Worksheets(lng_Zaehler).Range("A" & Anz & ":" & Spalte &  _
lEintrUebersicht).Copy(Destination:=WB_Problemliste.Worksheets(lng_Zaehler).Cells(Anz, 1))
With ThisWorkbook
.Sheets(WsName).Activate
.Sheets(WsName).Cells(Anz, 1).PasteSpecial
End With
Next
Call BlattschutzProblemliste
WB_Problemliste.Close
ActiveWorkbook.Save
ThisWorkbook.Sheets("Übersicht").Activate
ThisWorkbook.Sheets("Übersicht").Cells(lEintrUebersicht + 1, 2).Selet
BlattschutzAus
Application.ScreenUpdating = True
End Sub
Sub BlattschutzProblemliste()
Dim Sheet As Worksheet
For Each Sheet In WB_Problemliste.Sheets
With Sheet
.Activate
.Protect Password:="Passwortname", UserInterfaceOnly:=True, DrawingObjects:=True,  _
Contents:=True, Scenarios:=True
'Worksheets(Bereich).Protect Password:="Passwortname", UserInterfaceOnly:=True,  _
DrawingObjects:=True, Contents:=True, Scenarios:=True
End With
Next
End Sub

Sub BlattschutzAusProblemliste()
Dim Sheet As Worksheet
For Each Sheet In WB_Problemliste.Sheets
With Sheet
.Activate
.Unprotect Password:="Passwortname"
End With
Next
End Sub

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

Betreff
Datum
Anwender
Anzeige
AW: Dim vom Variablen
04.02.2021 09:08:34
Nepumuk
Hallo,
Variablen die auf Prozedurebene deklariert sind, sind nur in der Prozedur gültig. Übergib die Variable beim Aufruf der anderen Prozedur:
Call BlattschutzAusProblemliste(WB_Problemliste)
Private Sub BlattschutzProblemliste(ByRef WB_Problemliste As Workbook)
    Dim objWorksheet As Worksheet
    For Each objWorksheet In WB_Problemliste.Worksheets
        objWorksheet.Protect Password:="Passwortname", UserInterfaceOnly:=True, _
            DrawingObjects:=True, Contents:=True, Scenarios:=True
    Next
End Sub

Private Sub BlattschutzAusProblemliste(ByRef WB_Problemliste As Workbook)
    Dim objWorksheet As Worksheet
    For Each objWorksheet In WB_Problemliste.Worksheets
        objWorksheet.Unprotect Password:="Passwortname"
    Next
End Sub

Gruß
Nepumuk
Anzeige
AW: Dim vom Variablen
04.02.2021 10:15:33
Daniel
Hi
Wenn du Variablen hast, die von mehreren Makros verwendet werden sollen, darf die Deklaration nicht innerhalb des Makros erfolgen, sondern muss außerhalb der Makros stehen, dh. direkt unter Option Explicit mit den Befehl "Public" statt "Dim".
Gruß Daniel

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige