Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
400to404
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
400to404
400to404
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Grundsatzfrage Add-In

Grundsatzfrage Add-In
ChrisL
Liebe Kollegen/innen
Ich habe eine spezielle Speicher-Prozedur per Makro programmiert. Diese möchte ich gerne über einen neuen Menupunkt mehreren Usern zur Verfügung stellen.
Mit Add-Ins kenne ich mich leider schlecht aus und wäre deshalb um einen grundsätzlichen Wegbeschrieb dankbar.
Soviel ist mir mal klar. Zusätzlich muss ich den Menu-Punkt programmieren und vermutlich per Workbook_Open Ereignis in die Applikation einfügen. Die Datei wäre dann wohl als *.xla zu benennen.
Nun spricht ja der neu kreierte Menu-Punkt das Makro an (OnAction). Aber wo liegt das Makro bzw. wie bringe ich es auf den Computer der jeweiligen User. Hätte nötigenfalls auch ein gemeinsames Server-Laufwerk zur Verfügung, wo ich den Code zentral ablegen kann.
Oder studiere ich vielleicht zu weit bzw. habe ich allenfalls die Funktion von Add-Ins fehlinterpretiert.
Im Voraus besten Dank und Gruss
Chris
Hier übrigens noch das Makro...
Option Explicit

Sub CSVExport()
Dim sFile As Variant, msgAntwort As Variant
Dim Daten As Range, Zeile As Object, Zelle As Object
Dim strTemp As String
With ActiveSheet
sFile = Application.GetSaveAsFilename(InitialFilename:="Location Management " & .Range("A2") & ".csv", _
FileFilter:="CSV-Datei (*.csv), *.csv")
If sFile = False Then Exit Sub
If Dir(sFile) <> "" Then
msgAntwort = MsgBox("Die Datei '" & sFile & "' besteht bereits. Möchten Sie die bestehende Datei ersetzen?", _
vbQuestion + vbYesNo, "Warnung")
If msgAntwort = vbNo Then Exit Sub
End If
Set Daten = .UsedRange
Close
Open sFile For Output As #1
For Each Zeile In Daten.Rows
If Zeile.Row > .Range("A65536").End(xlUp).Row Then Exit Sub
For Each Zelle In Zeile.Cells
If (Zelle.Column = 4 Or Zelle.Column = 5) And Zelle <> "" Then
strTemp = strTemp & CStr(Format(Zelle, "DD") & "/" & Format(Zelle, "MM") _
& "/" & Format(Zelle, "YY")) & ";"
Else
If Zelle.Column >= 22 And Zelle.Column <= 38 And Zelle <> "" Then
strTemp = strTemp & CStr(Format(Zelle, "0")) & ";"
Else
strTemp = strTemp & CStr(Zelle.Text) & ";"
End If
End If
Next Zelle
Print #1, strTemp
strTemp = ""
Next Zeile
Close #1
End With
End Sub

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Grundsatzfrage Add-In
Russi
Hallo Chris!
Du sprichst in Deinem Makro das ActiveSheet an. Das ist völlig korrekt, da damit immer das aktuelle Tabellenblatt angesprochen wird. Das Tabellenblatt eines Addins ist unsichtbar.
Das Makro musst Du in einem neu eingefügten Modul unterbringen. Dann sollte es funktionieren.
Wenn nicht - sag Bescheid.
Viele Grüße
Russi
AW: Grundsatzfrage Add-In
ChrisL
Hallo Russi
Vielen Dank. Es hat alles perfekt funktioniert.
Nachstehend noch den vollständigen Code fürs Archiv.
Gruss
Chris

Private Sub Workbook_Open()
Dim cbmCommandBarMenu As CommandBar
Dim cbmDemoMenu As CommandBarPopup
Dim cbmCommandBarMenuCascade As CommandBarPopup
' Clear the way for new menu.
On Error Resume Next
Application.CommandBars("Worksheet Menu Bar") _
.Controls("&Location Management").Delete
' Identify built-in menu bar to work with.
Set cbmCommandBarMenu = Application _
.CommandBars("Worksheet Menu Bar")
' Add the new menu.
With cbmCommandBarMenu.Controls
Set cbmDemoMenu = _
.Add(Type:=msoControlPopup)
' Set caption for new menu.
With cbmDemoMenu
.Caption = "&Location Management"
.Visible = True
' Add single menu item and set properties.
With .Controls.Add(msoControlButton)
.OnAction = "CSVExport"
.Caption = "&CSV Export"
.Visible = True
End With
End With
End With
End Sub

Option Explicit
Sub CSVExport()
Dim sFile As Variant, msgAntwort As Variant
Dim Daten As Range, Zeile As Object, Zelle As Object
Dim strTemp As String
On Error GoTo errorhandler
With ActiveSheet
sFile = Application.GetSaveAsFilename(InitialFilename:="Location Management " & .Range("A2") & ".csv", _
FileFilter:="CSV-Datei (*.csv), *.csv")
If sFile = False Then Exit Sub
If Dir(sFile) > "" Then
msgAntwort = MsgBox("Die Datei '" & sFile & "' besteht bereits. Möchten Sie die bestehende Datei ersetzen?", _
vbQuestion + vbYesNo, "Warnung")
If msgAntwort = vbNo Then Exit Sub
End If
Set Daten = .UsedRange
Close
Open sFile For Output As #1

For Each Zeile In Daten.Rows

If Zeile.Row > .Range("A65536").End(xlUp).Row Then
MsgBox "Die Datei wurde erfolgreich exportiert.", vbInformation, "Export erfolgreich"
Exit Sub
End If

For Each Zelle In Zeile.Cells
If (Zelle.Column = 4 Or Zelle.Column = 5) And Zelle > "" Then
strTemp = strTemp & CStr(Format(Zelle, "DD") & "/" & Format(Zelle, "MM") _
& "/" & Format(Zelle, "YY")) & ";"
Else
If Zelle.Column >= 22 And Zelle.Column = 38 And Zelle > "" Then
strTemp = strTemp & CStr(Format(Zelle, "0")) & ";"
Else
strTemp = strTemp & CStr(Zelle.Text) & ";"
End If
End If
Next Zelle

Print #1, strTemp
strTemp = ""

Next Zeile
Close #1
End With
MsgBox "Die Datei wurde erfolgreich exportiert.", vbInformation, "Export erfolgreich"
Exit Sub
errorhandler:
MsgBox "Es ist ein Fehler aufgetreten. Die Datei konnte nicht vollständig exportiert werden.", vbCritical, "Fehlermeldung"
End Sub
Anzeige
AW: Grundsatzfrage Add-In
Bernhard
Ich würde das in der personl.xla unterbringen. Makro zentral speichern, von jedem Arbeitsplatz aus in die personl.xla importieren.
Falls diese nicht vorhanden ist:
Extras, Makros aufzeichnen.... Speichern in: Persönliche Arbeitsmappe
irgendwas aufzeichenen, Makrorecorder beenden. Nu steht die personl.xla zur Verfügung und wird bei jedem Start geladen. Aber das musst Du halt bei jedem Arbeitsplatz (User) einmal machen.
Bernhard
AW: Grundsatzfrage Add-In
ChrisL
Hallo Bernhard
Danke auch Dir. Inzwischen habe ich den Code schon fertig gestellt (siehe anderer Thread) und es funktioniert, weshalb ich jetzt nicht mehr ändere.
Dein Input finde ich aber trotzdem gut und ich bin sicher dass ich dies in einem anderen Zusammenhang wieder verwenden kann.
Gruss
Chris
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige