VBA Verständnissproblem (bin wohl langsam zu alt)

Moderator: ModerationP

VBA Verständnissproblem (bin wohl langsam zu alt)

Beitragvon casca » 24. Sep 2021, 08:42

Hallo zusammen,
versuch jetzt schon ne ganze Weile was zu basteln. Gestern gings mal, heut wieder nicht. Bin sicher dass das mit dem Workbooks/worksheets/sheets gelumpe zusammenhäng das ich noch nie so richtig kapiert hab.

Seht Ihr hier auf Anhieb nen Fehler? Im Moment scheiterts an der Prüfung ob bereits ein ListObjekt vorhanden ist...
Code: Alles auswählen
Private Sub Workbook_Open()

Application.ScreenUpdating = False

Workbooks.Open Filename:= _
        "c:\test.xlsx"


If Worksheet("Beispiel").ListObjects.Count = 0 Then


    Active.Sheet.ListObjects.Add(xlSrcRange, Range("A1").CurrentRegion, , xlYes).Name = "Tabelle1"

    Cells.EntireColumn.AutoFit
    Columns("C:C").ColumnWidth = 30
    Active.Sheet.ListObjects("Tabelle1").Range.AutoFilter Field:=22, Criteria1:= _
        Array("aaa", "bbb", "ccc"), Operator:=xlFilterValues
    Active.Sheet.ListObjects("Tabelle1").Sort.SortFields.Clear
    Active.Sheet.ListObjects("Tabelle1").Sort.SortFields.Add2 Key:=Range("Tabelle1[[#All],[Akte erfasst]]" _
        ), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
   
    With Active.Sheet.ListObjects("Tabelle1").Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
   
Else

MsgBox ("Tabelle bereits aufbereitet!")

End If
   
   
'ActiveWorkbook.Close savechanges:=True

Application.ScreenUpdating = True

Application.DisplayAlerts = False
Application.Quit


End Sub
casca
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 5
Registriert: 24. Sep 2021, 08:34

Re: VBA Verständnissproblem (bin wohl langsam zu alt)

Beitragvon HKindler » 24. Sep 2021, 09:59

Hi,

teste mal
If Worksheets("Beispiel").ListObjects.Count = 0 Then
Gruß,
Helmut

----------------------------
Windows 10 Enterprise (64 Bit) / Office 365 ProPlus (32 Bit)
Benutzeravatar
HKindler
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 6280
Registriert: 04. Jul 2013, 09:02
Wohnort: Schwarzwald

Re: VBA Verständnissproblem (bin wohl langsam zu alt)

Beitragvon @Mase » 24. Sep 2021, 10:45

Workbooks/worksheets/sheets gelumpe

super ... :lol:

Worksheets ist eine Auflistung(Collection)
=beinhaltet alle Arbeitsblätter der Arbeitsmappe

Achte stets auf den Plural.
Workbooks, Worksheets, Sheets => ne Auflistung der Elemente
Workbook, Worksheet, Sheet => ein einzelnes Element

Sheets kann viele Elemente vom Typ Sheet, aber auch viele Elemente vom Typ Worksheet beherbergen
Worksheets nur Elemente vom Typ Worksheet.

Worksheet = Arbeitsblätter (quasi Deine Tabellen)
Sheet = Diagrammblatt

ActiveSheet, könnte also entweder ein Diagrammblatt oder ein Arbeitsblatt sein.
Warum ist das wichtig ?
Wenn Du auf Elemente von einem Worksheet(Arbeitsblatt) zugreifen möchtest, aber Du Dich auf einem Sheet(Diagrammblatt) befindest, erzeugst Du damit einen Fehler zur Laufzeit.
(Beispielsweise: Range.Value gibt es auf einem Diagrammblatt nicht)

Active.Sheet gibt es gar nicht. Achte auf den Punkt den Du in Deinem Code hast.

ActiveSheet hingegen schon. Aber auch da behutsam mit Zugriffen.
ActiveSheet kann sowohl Arbeitsblatt als auch Diagrammblatt sein.
=Wie der Name vermuten lässt, ist das das aktive Sheet.

In beiden Fällen sind das <durchstreichen>Elemente</durchstreichen> Mitglieder einer Klasse.

Welche Klasse welche Mitglieder hat, findest Du über den Objektkatalog raus.
Alt+F11 und dann F2

bzw. im VB-Editor Menüleiste | Ansicht | Objektkatalog

Hoffe Ich konnten zu diesem Gelumpe Dir etwas gewinnbringendes dazu beitragen :)
@Mase
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 17
Registriert: 08. Sep 2021, 06:51

Re: VBA Verständnissproblem (bin wohl langsam zu alt)

Beitragvon @Mase » 24. Sep 2021, 10:52

casca, ich bins nochmal.

Dieser eine Satz hat mich heute herzhaft zum Lächeln gebracht. Vielen Dank dafür.
@Mase
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 17
Registriert: 08. Sep 2021, 06:51

Re: VBA Verständnissproblem (bin wohl langsam zu alt)

Beitragvon snb » 24. Sep 2021, 11:23

Eichtig referenzieren ist auch wichtig: kein Object ohne Punkt:

Code: Alles auswählen
Private Sub Workbook_Open()
  Application.ScreenUpdating = False

  With Workbooks.Open("c:\test.xlsx")
    With .Sheets("Beispiel")
      If .ListObjects.Count = 0 Then
        .Columns.AutoFit
        .Columns(3).ColumnWidth = 30
        With .ListObjects.Add(1, .Range("A1").CurrentRegion, , 1)
          .Range.AutoFilter 22, Array("aaa", "bbb", "ccc"), 7
          .Range.Sort .Range("Tabelle1[[#All],[Akte erfasst]]"), 2
        End With
      End If
    End With
  End With
End Sub
Zuletzt geändert von snb am 24. Sep 2021, 15:29, insgesamt 1-mal geändert.
snb
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 8711
Registriert: 25. Sep 2014, 16:37

Re: VBA Verständnissproblem (bin wohl langsam zu alt)

Beitragvon casca » 24. Sep 2021, 11:32

Danke Euch beiden!

Leider hat das "S" nix gebracht. Ich bekomme immer noch diesen Laufzeitfehler 9 Indexaußerhalb des gültigen Bereichs.
Die Datei hat den selben Namen wie das Register, also wenn ich richtig verstanden hab das workbook heißt wie das (einzige) worksheet...?

Hab aber glaub schon alle Laufzeitfehler durch ;)
casca
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 5
Registriert: 24. Sep 2021, 08:34

Re: VBA Verständnissproblem (bin wohl langsam zu alt)

Beitragvon Gast » 24. Sep 2021, 11:46

Der Code von snb ist ja wunderschön.
Leider bleibt er jetzt bei der sortierung hängen.

Geh ich Recht in der Annahme dass Du mit listobjekts.add die "Tabelle1" definierst und dann mit
Code: Alles auswählen
 .ListObjects("Tabelle1").Range.Sort .Range("Tabelle1[[#All],[Akte erfasst]]"), 2

die ganze schose sortierst?
Genau da bleibt er jetzt hängen mit Fehler 5
Gast
 

Re: VBA Verständnissproblem (bin wohl langsam zu alt)

Beitragvon casca » 24. Sep 2021, 12:35

kann es vielleicht daran liegen dass es ein Datumsfeld ist, und was bedeuten eigentlich immer diese Zahlen? In dem Fall die 2
casca
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 5
Registriert: 24. Sep 2021, 08:34

Re: VBA Verständnissproblem (bin wohl langsam zu alt)

Beitragvon 1Matthias » 24. Sep 2021, 12:39

Moin!
Achte nochmal auf die richtige Beschreibunge der Objekte.
Dein
Active.Sheet
solle ein
activesheet
sein.
Ob noch mehr Fehler drin sind kann ich aber grad nicht sagen. Schaue aber nochmal.
VG
1Matthias
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 963
Registriert: 15. Aug 2017, 18:36

Re: VBA Verständnissproblem (bin wohl langsam zu alt)

Beitragvon HKindler » 24. Sep 2021, 12:43

Hi,

als Hilfe zur Selbsthilfe: Wenn du solche Fragen hast, dann klicke im VBA-Editor das Objekt an, über das du etwas wissen willst und drücke F1.

OK, in dem Fall als kleine Abweichung (da man im Augenblick entweder auf das Sort-Objekt kommt oder auf eine Fehlermeldung), klickst du auf das Range bei .Range.Sort und landest auf der Hilfe-Seite zum Range-Objekt. dort wählst du Links unterhalb von Range Methoden dann dort Sort Hier findest du nun alles zur Sort-Methode.

Sonst noch Fragen?
Gruß,
Helmut

----------------------------
Windows 10 Enterprise (64 Bit) / Office 365 ProPlus (32 Bit)
Benutzeravatar
HKindler
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 6280
Registriert: 04. Jul 2013, 09:02
Wohnort: Schwarzwald

Re: VBA Verständnissproblem (bin wohl langsam zu alt)

Beitragvon casca » 24. Sep 2021, 13:16

bin ja inzwischen auf den Code von @snb ausgewichen, und das einzige was nicht klappt ist die og. Zeile :(

Ich denk ich muss ins Wochenende
casca
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 5
Registriert: 24. Sep 2021, 08:34

Re: VBA Verständnissproblem (bin wohl langsam zu alt)

Beitragvon snb » 24. Sep 2021, 15:29

Versuch mal (ich kenne deine Datei nicht...)

Code: Alles auswählen
Private Sub Workbook_Open()
  Application.ScreenUpdating = False

  With Workbooks.Open("c:\test.xlsx")
    With .Sheets("Beispiel")
      If .ListObjects.Count = 0 Then
        .Columns.AutoFit
        .Columns(3).ColumnWidth = 30
        With .ListObjects.Add(1, .Range("A1").CurrentRegion, , 1)
          .Range.AutoFilter 22, Array("aaa", "bbb", "ccc"), 7
          .Range.Sort .Range("Tabelle1[[#All],[Akte erfasst]]"), 2
        End With
      End If
    End With
  End With
End Sub
Zuletzt geändert von snb am 24. Sep 2021, 17:20, insgesamt 2-mal geändert.
snb
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 8711
Registriert: 25. Sep 2014, 16:37

Re: VBA Verständnissproblem (bin wohl langsam zu alt)

Beitragvon casca » 24. Sep 2021, 16:08

Danke snb!

Vielleicht der selbe Ansatz... ich hab die besagte Zeile unter das "End With" gesetzt, dann ging es auch ;)
casca
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 5
Registriert: 24. Sep 2021, 08:34

Re: VBA Verständnissproblem (bin wohl langsam zu alt)

Beitragvon snb » 24. Sep 2021, 17:24

Wass ich meine:

Private Sub Workbook_Open()
Application.ScreenUpdating = False

With Workbooks.Open("c:\test.xlsx")
With .Sheets("Beispiel")
If .ListObjects.Count = 0 Then
.Columns.AutoFit
.Columns(3).ColumnWidth = 30
With .ListObjects.Add(1, .Range("A1").CurrentRegion, , 1)
.Range.AutoFilter 22, Array("aaa", "bbb", "ccc"), 7
.Range.Sort .Range("Tabelle1[[#All],[Akte erfasst]]"), 2
End With
End If
End With
End With
End Sub
snb
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 8711
Registriert: 25. Sep 2014, 16:37


Zurück zu Excel Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 28 Gäste