Tabellenblatt aufrufen aus VBA

  • #1
H

Hogl

Aktives Mitglied
Themenersteller
Dabei seit
05.07.2004
Beiträge
43
Reaktionspunkte
0
Hallo,

ich habe derzeit folgendes Makro :

[sup]Dim vorhanden As Boolean, n As Worksheet
For Each n In ThisWorkbook.Worksheets
If n.Name = Range(I4).Value Then
vorhanden = True
Exit For
End If
Next n

If vorhanden = False Then
ActiveSheet.Unprotect
Sheets(Nummernvergabe).Select
Range(I4).Select
nummer = Range(I4).Value
nummername = Range(J4).Value
prozent = Range(K5).Value
prozent2 = Range(L5).Value
blattname = Range(I4).Value
Sheets(Vorlage).Visible = True
Sheets(Vorlage).Copy Before:=Sheets(Vorlage)
ActiveSheet.Name = blattname
Else
MsgBox (Abrechnungsblatt bereits vorhanden)
Sheets(blattname).Activate

Exit Sub

End If[/sup]

Wie stell ich es jetzt an, das nach der MsgBox das blatt welches ja schon angelegt ist auch aufgerufen wird?

Danke Schonma


Hogl
 
  • #2
Hallo Hogl,

bei mir ist es keine Messagebox sondern eine Inputbox wenn ich die Datei öffne. Wenn ich den Mappennamen (bei mir Zahlen 1-31) eingebe wechselt er in die Mappe, wenn nix eingegeben wird, wird Mappe 31 geöffnet.
Vielleicht kannst du sie ja anpassen.

Private Sub Workbook_Open()

Dim s_str As String, l_str As Long

->Default
l_str = 1

Do
NOCHMAL:
s_str = InputBox( _
Text
s_str)
If s_str = Then l_str = 31: Exit Do
On Error Resume Next
l_str = s_str
If Err.Number <> 0 Then
Err.Clear: On Error GoTo 0
MsgBox (Eingabe unzulässig. Bitte korrigieren.)
GoTo NOCHMAL
End If
If 0 < l_str And l_str < ActiveWorkbook.Worksheets.Count Then Exit Do
MsgBox (Eingabe ausserhalb Bereich 1 bis & ActiveWorkbook.Worksheets.Count)
Loop
BLATT_AKTIVIEREN:
ActiveWorkbook.Worksheets(l_str).Activate
End Sub
 
  • #3
Hallo joergi,

Inputbos ist leider bei mir aufgrund der gesamten tabelle nicht möglich. Wenn ich das blatt neu anlege, springt er ja auch drauf, allerdings nicht wenn es schon vorhanden ist. wenn ich jetzt z.b. blatt 6 anlege ( Bei mir sind es auch nummern ) und ändere den code von
Sheets(blattname).Activate
in
Sheets(6).Activate
funktioniert alles, sprich wenn ich blatt 6 nochmal anlegen will kommt die MsgBox und er springt auf blatt 6. jedoch macht er das nicht mit Sheets(blattname).Activate.
ich komm nich weider -.-

Hogl
 
  • #4
Hallo,
viel trennt Dich ja nicht von Deinem gewollten Ergebnis.
Tausche einfach die Zeile
Code:
 Sheets(n.Name).Activate
gegen
Code:
 Sheets(blattname).Activate

Deine Variable->blattname' ist leer. Daher der Fehler
 
  • #5
Hallo Hogl,

probier's doch mal so.

Gruß Matjes :)
Code:
Option Explicit

Sub xxx()

 Dim ws As Worksheet
 Dim blattname As String
 Dim nummer As Long   ->???? Typ definieren
 Dim nummername As String->???? Typ definieren
 Dim prozent As Double ->???? Typ definieren
 Dim prozent2 As Double ->???? Typ definieren
 
 blattname = Range(I4).Value
 
->schauen, ob Blatt schon vorhanden ist
 For Each ws In ThisWorkbook.Worksheets
  If ws.Name = blattname Then
   MsgBox (Abrechnungsblatt bereits vorhanden)
   ws.Activate
   GoTo AUFRAEUMEN
  End If
 Next

 ActiveSheet.Unprotect
 
 Sheets(Nummernvergabe).Activate
 Range(I4).Select
 nummer = Range(I4).Value
 nummername = Range(J4).Value
 prozent = Range(K5).Value
 prozent2 = Range(L5).Value
 
 Sheets(Vorlage).Visible = True
 Sheets(Vorlage).Copy Before:=Sheets(Vorlage)
 ActiveSheet.Name = blattname

AUFRAEUMEN:
 Set ws = Nothing
End Sub
 
  • #6
Fizbin schrieb:
Hallo,
viel trennt Dich ja nicht von Deinem gewollten Ergebnis.
Tausche einfach die Zeile
Code:
 Sheets(n.Name).Activate
gegen
Code:
 Sheets(blattname).Activate

Deine Variable->blattname' ist leer. Daher der Fehler

Vielen dank, da hätte ich dödel ja auch selber drauf kommen können -.-
 
Thema:

Tabellenblatt aufrufen aus VBA

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.838
Beiträge
707.961
Mitglieder
51.491
Neuestes Mitglied
haraldmuc
Oben