Live-Forum - Die aktuellen Beiträge
Datum
Titel
17.04.2024 18:57:33
17.04.2024 16:56:58
Anzeige
Archiv - Navigation
784to788
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
784to788
784to788
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Code geändert - Wo liegt der Fehler?

Code geändert - Wo liegt der Fehler?
21.07.2006 20:07:53
Fritz
Hallo Forumsbesucher,
den Code der UserForm zum Verschieben, Kopieren, Löschen und Drucken aller Tabellen innerhalb der Arbeitsmappe, die als Tabellennamen eine Zahl haben, habe ich aus einer anderen Datei übernommen und an die "etwas veränderte" neue Datei (Beispieldatei!) angepasst.
Da ich den Code aber nur "in Ansätzen verstehe", habe ich wohl etwas falsch gemacht, denn beim Ablauf des Makros (über die Schaltfläche) in der Tabelle "Übersicht" erhalte beim Verschieben sowie Kopieren oder Löschen eine Fehlermeldung.
Worauf ist diese Fehlermeldung zurückzuführen? Was muss geändert werden, dass das Makro fehlerfrei läuft?
Vorab vielen Dank für eure Hilfe!
Mfg
Fritz

Die Datei https://www.herber.de/bbs/user/35281.xls wurde aus Datenschutzgründen gelöscht

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Code geändert - Wo liegt der Fehler?
21.07.2006 23:54:36
Luschi
Hallo Fritz,
habe mir mal Dein Problem angeschaut und hier ist die lösung:
https://www.herber.de/bbs/user/35283.xls
Um die ausgewählten Tabellennamen aus der Listbox an Excel zu übergeben, wird 1 Array (vList()) erstellt. Bei Dir standen im Array die Namen (z.B. Walter Meier).
Solch eine Tabelle gibt es aber garnicht, daß ist ja die Tabelle mit dem Namen '2'.
Also habe ich die Listbox um 1 Spalte erweitert, damit der tatsächliche Tabellenname auch in der Listbox steht. Doch diese Spalte hat die Breite 0Pt und ist deshalb unsichtbar, aber man kann den Wert auslesen.
Hier liegt nun aber nun ein weiteres Problem. Wenn Excel eine Zahl als Tabellennamen hat, dann wird diese Zahl in Vba nicht als Tabellenname sondern als Tabellenindex interpretiert. Der Tabellenindex gibt die Position der Tabelle im Tabellenreiter von Excel wieder.
Im Vba-Code habe ich an dieser Stelle 1 Kommentar gesetzt und die Umrechnung durchgeführt.
Jetzt müßte Alles klappen.
Gruß von Luschi
aus klein-Paris
Anzeige
Dank den beiden Helfern
22.07.2006 09:07:15
Fritz
Hallo ihr netten Helfer,
jetzt funktioniert das Ganze.
Ich danke euch beiden für eure Unterstützung, insbesondere für die Kommentare im Code bzw. den Erläuterungen.
Ich werde mich gleich intensiver mit euren Lösungsansätzen beschäftigen um auch - die wohl unterschiedlichen Lösungsansätze - zu vergleichen und hoffe, dass ich etwas an Verständnis dazugewinne. In vielen Bereichen ist VBA für mich nach wie vor "ein Buch mit sieben Siegeln".
Deshalb noch eine Frage an euch Experten:
Beim Einsatz dieser UserForm bietet sich häufig an, wenn einzelne Tabellen aus der Datei entfernt werden, also "verschieben" oder "löschen" gewählt wurde (nur in diesen beiden Fällen), ein zusätzliches Makro einzusetzen.
Ich hoffe dass das möglich ist, ohne den Code "völlig" umzukrempeln, habe da aber meine Zweifel?
Mfg
Fritz
Anzeige
AW: Dank den beiden Helfern
22.07.2006 09:17:12
Josef
Hallo Fritz!
Wenn ich dich richtig verstehe, dann so
Private Sub cmdOk_Click()
Dim intC As Integer, intI As Integer
Dim vList() As Variant

If optMove Or optCopy Then
  If TextBox1 = "" Then
    MsgBox "Bitte zuerst ein Verzeichnis auswählen!", 64, "Hinweis"
    Exit Sub
  End If
  
  If TextBox2 = "" Then
    MsgBox "Bitte zuerst einen Dateinamen angeben!", 64, "Hinweis"
    Exit Sub
  End If
End If

For intC = 0 To ListBox1.ListCount - 1
  If ListBox1.Selected(intC) Then
    Redim Preserve vList(intI)
    vList(intI) = ListBox1.List(intC, 0) 'Wir lesen die erste Spalte (Tabellnname) aus
    intI = intI + 1
  End If
Next

If intI > 0 Then
  If optMove Then
    With ComboBox1
      If .ListIndex = 0 Then
        Sheets(vList).Move
      Else
        Sheets(vList).Move after:=Workbooks(.Text).Sheets(Workbooks(.Text).Sheets.Count)
      End If
    End With
  ElseIf optCopy Then
    With ComboBox1
      If .ListIndex = 0 Then
        Sheets(vList).Copy
      Else
        Sheets(vList).Copy after:=Workbooks(.Text).Sheets(Workbooks(.Text).Sheets.Count)
      End If
    End With
  ElseIf optPrint Then
    Sheets(vList).PrintOut
    Exit Sub
  Else
    If MsgBox("Wollen Sie die ausgewählten Tabellen" & Space(25) & vbLf & _
      "wirklich endgültig löschen?", 36, "Bestätigung") = 6 Then
      With Application
        .DisplayAlerts = False
        .ScreenUpdating = False
      End With
      Sheets(vList).Delete
      With Application
        .DisplayAlerts = True
        .ScreenUpdating = True
      End With
      Exit Sub
    End If
  End If
  
  If ComboBox1.ListIndex = 0 Then
    If Right(TextBox1.Text, 1) <> "\" Then TextBox1.Text = TextBox1.Text & "\"
    With ActiveWorkbook
      .SaveAs TextBox1.Text & TextBox2.Text
      .Close
    End With
  Else
    ThisWorkbook.Activate
  End If
  
  'Wenn Verschieben oder Löschen
  If optMove Or optDelete Then
    Call deinMakro
  End If
  
Else
  MsgBox "Keine Tabellen ausgewählt!", 64, "Hinweis"
  Exit Sub
End If

Unload Me
End Sub


Gruß Sepp

Anzeige
AW: Dank den beiden Helfern
22.07.2006 10:56:55
Fritz
Hallo Sepp,
das ging wieder fix!
Und meine Reaktion lässt so lange auf sich warten:
Natürlich hatte ich wieder einige Probleme mit dem "Anpassen". Anfängerfehler halt.
Da das aufgerufene Makro wird jetzt nicht mehr aus der aktivierten Tabelle aufgerufen wird, hatte es zunächst nicht funktioniert. Aber so lernt man (in kleinsten Schritten) dazu.
Dein Code funktioniert auf jeden Fall genau so wie ich das wollte.
Vielen Dank!!
Mit Lobeshymnen auf Deine Arbeit und vor Deiner Leistung für so viele Excelfreunde kann ich mich jedes Mal nur wiederholen!
Bei solch kompetenter Hilfe eröffne ich gleich noch einen Thread mit einem Problem (besser: Wunsch), das (der) mir schon einiger Zeit am Herzen liegt.
Gruß
Fritz
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige