Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
864to868
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
864to868
864to868
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Code v. Sepp Ehrensb. an veränd Anforder. anpassen

Code v. Sepp Ehrensb. an veränd Anforder. anpassen
22.04.2007 16:14:38
Fritz_W
Hallo Forumsbesucher,
ich benötige die Hilfe der VBA-Experten um den nachfolgenden Code auf die geschilderten Anwendung "anzupassen.
Mit dem nachfolgenden Code, den ich vor einiger Zeit in diesem Forum von Sepp Ehrensberger erhalten habe, lassen sich Tabellen in eine neue Mappe kopieren bzw. verschieben.
Ich möchte nun diesen Code in einer anderen Arbeitsmappe einsetzen. Die nun zu kopierenden bzw. zu verschiebenden Tabellen enthalten auch Formeln und Hyperlinks, die beim Kopieren bzw. Verschieben nicht "übernommen" werden sollten. Die kopierten bzw. verschobenen Tabellen sollten also nur die Werte enthalten und die in diesen Tabellen enthaltenen Hyperlinks sollten entfernt werden.
Ich bedanke mich bereits an dieser Stelle für eure Unterstützung.
mfg
Fritz
Option Explicit

Private Sub cmdCancel_Click()
Unload Me
End Sub



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)
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
With ActiveWorkbook
.SaveAs TextBox1.Text & "\" & TextBox2.Text
.Close
End With
Else
ThisWorkbook.Activate
End If
Else
MsgBox "Keine Tabellen ausgewählt!", 64, "Hinweis"
Exit Sub
End If
Unload Me
End Sub



Private Sub Image1_Click()
TextBox1 = BrowseForFolder("Zielverzeichnis auswählen", TextBox1, 0, , , True, False)
End Sub



Private Sub optCopy_Change()
ComboBox1.Enabled = optMove Or optCopy
End Sub



Private Sub optMove_Change()
ComboBox1.Enabled = optMove Or optCopy
End Sub



Private Sub TextBox1_Change()
End Sub



Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If InStr(1, TextBox2, ".") = 0 Then
TextBox2 = TextBox2 & ".xls"
End If
End Sub



Private Sub UserForm_Activate()
Dim intC As Integer, intL As Integer
Dim objWb As Workbook
optMove = GetValue("Move", 0)
optCopy = GetValue("Copy", 0)
optPrint = GetValue("Print", 1)
optDelete = GetValue("Delete", 0)
TextBox1 = GetValue("Path", "C:\")
TextBox2 = GetValue("Datei", "neu.xls")
Sheets("Menu").Worksheet_Activate
intL = Sheets("Menu").Cells(Rows.Count, 13).End(xlUp).Row
If intL 



Private Function GetValue(ByVal sName As String, ByVal vValue As Variant) As Variant
Dim cdp As Object
On Error Resume Next
Set cdp = ThisWorkbook.CustomDocumentProperties(sName)
On Error GoTo 0
If Not cdp Is Nothing Then
GetValue = cdp.Value
Else
Set cdp = ThisWorkbook.CustomDocumentProperties.Add(sName, _
False, IIf(IsNumeric(vValue), msoPropertyTypeBoolean, msoPropertyTypeString), vValue)
GetValue = vValue
End If
End Function



Private Function SetValue(ByVal sName As String, ByVal vValue As Variant)
ThisWorkbook.CustomDocumentProperties(sName).Value = vValue
End Function



Private Sub UserForm_Terminate()
SetValue "Move", optMove
SetValue "Copy", optCopy
SetValue "Print", optPrint
SetValue "Delete", optDelete
SetValue "Path", TextBox1
SetValue "Datei", TextBox2

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

Betreff
Datum
Anwender
Anzeige
AW: Code v. Sepp Ehrensb. an veränd Anforder. anpa
22.04.2007 22:54:35
fcs
Hallo Fritz,
ändere die Prozedur cmdOK_Click() an den markierten stellen und füge zusätzlich die Prozedur TabellenBereinigen ein.
Warnung: Alles 100% ungetestet, aber ich hab ein gutes Gefühl. Bin mir halt nur nicht ganz sicher, ob des aus dem Formular heraus sauber funktioniert.
Gruß
Franz

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)
intI = intI + 1
End If
Next
If intI > 0 Then
If optMove Then
With ComboBox1
If .ListIndex = 0 Then
Sheets(vList).Move
Call TabellenBereinigen(ActiveSheet) '############
Else
Sheets(vList).Move after:=Workbooks(.Text).Sheets(Workbooks(.Text).Sheets.Count)
Call TabellenBereinigen(ActiveSheet) '############
End If
End With
ElseIf optCopy Then
With ComboBox1
If .ListIndex = 0 Then
Sheets(vList).Copy
Call TabellenBereinigen(ActiveSheet) '############
Else
Sheets(vList).Copy after:=Workbooks(.Text).Sheets(Workbooks(.Text).Sheets.Count)
Call TabellenBereinigen(ActiveSheet) '############
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
With ActiveWorkbook
.SaveAs TextBox1.Text & "\" & TextBox2.Text
.Close
End With
Else
ThisWorkbook.Activate
End If
Else
MsgBox "Keine Tabellen ausgewählt!", 64, "Hinweis"
Exit Sub
End If
Unload Me
End Sub
Sub TabellenBereinigen(wks As Worksheet)
'Ersetzt im Tabellenblatt Formeln durch Werte und entfernt Hyperlinks
Dim Zelle As Range
wks.UsedRange.Value = wks.UsedRange.Value
For Each Zelle In wks.UsedRange
If Zelle.Hyperlinks.Count > 0 Then
Zelle.Hyperlinks.Delete
End If
Next
End Sub


Anzeige
AW: Code v. Sepp Ehrensb. an veränd Anforder. anpa
23.04.2007 05:16:00
Fritz_W
Hallo Franz,
vielen Dank für die Hilfe und die Arbeit, die Du für mich investierst.
Werde den Code heute abend testen, sollte ich Fragen haben, melde ich mich an dieser Stelle noch einmal.
Ansonsten nochmaligen Dank und schöne Grüße
Fritz

AW: Code v. Sepp Ehrensb. an veränd Anforder. anpa
23.04.2007 15:17:00
Fritz_W
Hallo Franz,
nach einigen Tests hab ich folgendes festgestellt:
Wenn ich (jeweils) nur eine (einzelne) Tabelle kopiere, funktioniert das Ganze wie gewünscht.
Werden (in der UF) mehrere Tabellen ausgewählt und kopiert, werden die in diesen Tabellen enthaltenen Formeln jeweils nur in der ersten kopierten Tabelle in Werte umgewandelt. Ebenso werden nur in der ersten der kopierten Tabellen die Hyperlinks entfernt.
Wenn Du das noch ändern kannst, wäre schön, ansonsten müsste ich jede Tabelle aus der UF (nacheinander) einzeln "aufrufen" und kopieren bzw. verschieben.
Auf jeden Fall danke ich nochmals für die Unterstützung und die für mich geopferte Zeit.
Schöne Grüße
Fritz

Anzeige
AW: Code v. Sepp Ehrensb. an veränd Anforder. anpa
23.04.2007 22:15:00
fcs
Hallo Fritz,
ich hatte beim Lesen deines ursprünglichen Codes nicht erkannt, das vlist eine Feldvariable ist mit potentiell mehr als einem Eintrag.
Folgende Anpassung arbeitet in der Zielarbeitsmappe die gesamte Liste der kopierten/verschobenen Blätter ab.
Gruß
Franz

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)
intI = intI + 1
End If
Next
If intI > 0 Then
If optMove Then
With ComboBox1
If .ListIndex = 0 Then
Sheets(vList).Move
Call TabellenBereinigen(ActiveWorkbook, vList) '############
Else
Sheets(vList).Move after:=Workbooks(.Text).Sheets(Workbooks(.Text).Sheets.Count)
Call TabellenBereinigen(ActiveWorkbook, vList) '############
End If
End With
ElseIf optCopy Then
With ComboBox1
If .ListIndex = 0 Then
Sheets(vList).Copy
Call TabellenBereinigen(ActiveWorkbook, vList) '############
Else
Sheets(vList).Copy after:=Workbooks(.Text).Sheets(Workbooks(.Text).Sheets.Count)
Call TabellenBereinigen(ActiveWorkbook, vList) '############
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
With ActiveWorkbook
.SaveAs TextBox1.Text & "\" & TextBox2.Text
.Close
End With
Else
ThisWorkbook.Activate
End If
Else
MsgBox "Keine Tabellen ausgewählt!", 64, "Hinweis"
Exit Sub
End If
Unload Me
End Sub
Sub TabellenBereinigen(wb As Workbook, vListe As Variant)
'Ersetzt in den kopierten/verschobenen Tabellenblättern Formeln durch Werte _
und entfernt Hyperlinks
Dim Zelle As Range, wks As Worksheet, iBlatt As Integer
For iBlatt = wb.Sheets.Count - (UBound(vListe) - LBound(vListe)) To wb.Sheets.Count
Set wks = wb.Worksheets(iBlatt)
wks.UsedRange.Value = wks.UsedRange.Value
For Each Zelle In wks.UsedRange
If Zelle.Hyperlinks.Count > 0 Then
Zelle.Hyperlinks.Delete
End If
Next
Next
End Sub


Anzeige
AW: Code v. Sepp Ehrensb. an veränd Anforder. anpa
24.04.2007 05:10:06
Fritz_W
Hallo Franz,
funktioniert jetzt super!!!
Vielen Dank!
Gruß
Fritz

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige