Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Verweis auf Solver.xla

Verweis auf Solver.xla
06.02.2005 11:48:31
Anya
Hallo,
ich habe ein Problem, dass ich zwar im Forum schon angesprochen gefunden habe, aber bisher ohne Lösung.
Ich möchte per Makro einen Verweis auf den Solver in VisualBasic unter Extras\Verweise aktivieren.
Dies ist nicht zu verwechseln mit der Einbindung des AddIns unter Excel mit AddIns.Add("Solver.xla").Installed=True - dies aktiviert leider nur den Solver im AddIn-Manager.
Das Makro soll also in VisualBasic unter Extras\Verweise nach dem Pfad von Solver.xla suchen (da auf verschiedenen Rechnern dieser unterschiedlich sein kann) und wenn er gefunden wurde, soll dieser Verweis aktiviert werden.

Falls jmd. weiss, wie man die Aktivierung realisiert, wäre ich sehr dankbar.
Viele Grüsse,
Anya
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Verweis auf Solver.xla
Ulf
Den Verweis setzen kannst du mit .References.AddFromFile
Die Datei ist normaler Weise unter:
c:\programme\microsoft office\office10\makro\solver\solver.xla
abgelegt. Wenn das nicht so ist, musst du halt die Festplatte durchsuchen.
Ulf
AW: Verweis auf Solver.xla
Anya
Danke schonmal für die schnelle Antwort. Doch leider funktioniert es noch nicht.
Wenn ich es mit
Application.VBE.ActiveVBProject.References.AddFromFile FileName:="c:\Programme\Microsoft Office\Office10\Makro\Solver\Solver.xla"
versuche, dann gibt mir der Compiler einen 'anwendungs- oder objektorientierent Fehler' zurück (der Pfad ist hier korrekt).
Der Eintrag 'Application.VBE' als Überwachungsausdruck gibt nur "Der programmatische Zugriff auf das Visual Basic-Projekt ist nicht sicher" aus. Was könnte hier das Problem sein? Was mach ich falsch?
Anzeige
AW: Verweis auf Solver.xla
Ulf
Du musst im Menü Extras|Makro|Sicherheit|Vertrauenswürdige Quellen den Haken bei
"Zugriff auf VB-Projekt vertrauen" setzen.
Ulf
AW: Verweis auf Solver.xla
Anya
Prima!!! Es Funktioniert!
Noch eine Frage: Ist diese Einstellung projektspezifisch, oder nicht?
Meine damit, wenn ich mein Projek jmd. anderen gebe, muss der dies Einstellung selbst (von Hand) aktivieren, so dass mein Makro läuft, oder ist dies Aktivierung nun für diese Arbeitsmappe fest gespeichert, oder gibt es eine Möglichkeit, wie ich dies per Code steuern kann?
Anzeige
AW: Verweis auf Solver.xla
Ulf
Das wird nicht mit der Mappe gespeichert, der user muss das einstellen.
Via VBA gehts auch, aber relativ unsicher mit SendKeys.

Sub Vertrauen()
SendKeys "%xksv {TAB 3} +~"
End Sub

Ulf
AW: Verweis auf Solver.xla
Anya
ja, gebe Dir recht - ist ziemlich unsicher, aber trotzdem danke!!!
Werde wohl den User lieber per MsgBox dazu auffordern selbst die Sicherheitseinstellungen anzupassen.
Anzeige
AW: Verweis auf Solver.xla
Anya
Danke Euch Beiden - hab das Thema Manipulation der Sicherheitseinstellungen nochmal oben neu aufgegriffen ...
Gruß Anya
AW: Verweis auf Solver.xla
Ramses
Hallo
probier mal das aus.
Ich hatte das mal für eine andere Datei geschrieben, ... sollte aber eigentlich funktionieren


Option Explicit
'Für Dateisuche
Private Declare Function GetDriveType Lib "kernel32" _
        Alias "GetDriveTypeA" (ByVal nDrive As String) _
        As Long
Private Declare Function GetLogicalDriveStrings Lib _
        "kernel32" Alias "GetLogicalDriveStringsA" _
        (ByVal nBufferLength As LongByVal lpBuffer _
        As StringAs Long
'Konstanten zur Dateisuche
Private Const DRIVE_REMOVABLE = 2
Private Const DRIVE_FIXED = 3
Private Const DRIVE_REMOTE = 4
Private Const DRIVE_CDROM = 5
Private Const DRIVE_RAMDISK = 6
'Anzahl lokaler laufwerke/Partitionen
Public LocDrivesCount As Byte
'Dateiname zur Prüfung zur angeben !!!
Public Const CheckRef As String = "SOLVER.XLA"
Sub Install_Solver_Reference()
Dim As Long, n As Long, totFiles As Long, GlobalFound As Boolean
Dim gefFile As String, dname As String, Qe As Integer
Dim Suchpfad As String
Dim oldStatus As Variant
'Zuerst im Installationspfad suchen
Suchpfad = Application.Path
If ResCheckReference = True Then
    MsgBox "Verweis ist bereits installiert"
    Exit Sub
End If
Application.ScreenUpdating = True
oldStatus = Application.StatusBar
With Application.FileSearch
    .LookIn = Suchpfad
    .SearchSubFolders = True
    'Datei aus Konstanten übernehmen
    .Filename = CheckRef
    If .Execute() > 0 Then
        totFiles = .FoundFiles.Count
        For i = 1 To .FoundFiles.Count
            gefFile = .FoundFiles(i)
            Application.VBE.ActiveVBProject.References.AddFromFile gefFile
            MsgBox "Referenz auf : " & gefFile & " wurde erstellt"
            Exit Sub
        Next i
    Else
        MsgBox "Datei SOLVER.XLA wurde nicht gefunden." & Chr$(13) & _
            "Soll der gesamte Rechner durchsucht werden ?", vbYesNo + vbQuestion, "Fehler"
        If Qe = vbNo Then
            Application.StatusBar = oldStatus
            Application.ScreenUpdating = True
            Exit Sub
        End If
    End If
End With
'Schleife für alle lokalen Laufwerke
'Keine USB, keine CD-ROM, keine Disketten, Keine Netzlaufwerke
For i = 1 To CountLocalDrives
    With Application.FileSearch
        Application.StatusBar = "Durchsucht wird Laufwerk: " & GetLocalDriveName(i)
        .LookIn = GetLocalDriveName(i)
        .SeachSubFolders = True
        .Filename = CheckRef
        If .Execute() > 0 Then
            totFiles = .FoundFiles.Count
            For n = 1 To .FoundFiles.Count
                gefFile = .FoundFiles(n)
                Application.VBE.ActiveVBProject.References.AddFromFile gefFile
                MsgBox "Referenz auf : " & gefFile & " wurde erstellt"
                GlobalFound = True
            Next n
        End If
    End With
Next i
If GlobalFound = False Then
    MsgBox "Datei: " & CheckRef & " wurde nicht gefunden." & Chr$(13) & _
        "Überprüfen Sie bitte Ihre Office-Installation"
End If
End Sub
Public Function ResCheckReference() As Boolean
Dim objRef As Object
For Each objRef In ActiveWorkbook.VBProject.References
    With objRef
        Debug.Print objRef.fullpath
        If InStr(1, objRef.fullpath, CheckRef) > 0 Then
            ResCheckReference = True
            Exit Function
        End If
    End With
Next
ResCheckReference = False
End Function
Private Function CountLocalDrives() As Byte
Dim DriveSpace As Byte, myDrives As String
Dim StringLen As String, DriveLen As String, x As Byte
Dim Laufwerk As String
StringLen = Space(32)
DriveSpace = 32
DriveLen = GetLogicalDriveStrings(DriveSpace, StringLen)
myDrives = Left(StringLen, DriveLen)
LocDrivesCount = 0
Do While x < Len(myDrives)
    'Nach ASCII Leer suchen
    x = InStr(myDrives, Chr$(0))
    If x > 0 Then
        Laufwerk = Left$(myDrives, x - 1)
        myDrives = Mid$(myDrives, x + 1, Len(myDrives))
        If GetDriveType(Laufwerk) = 3 Then
            LocDrivesCount = LocDrivesCount + 1
        End If
    Else
        Exit Do
    End If
Loop
CountLocalDrives = LocDrivesCount
End Function
Private Function GetLocalDriveName(ByVal getDrive As ByteAs String
Dim DriveSpace As Byte, myDrives As String
Dim StringLen As String, DriveLen As String
Dim Laufwerk As String
Dim As Byte, n As Byte
StringLen = Space(32)
DriveSpace = 32
DriveLen = GetLogicalDriveStrings(DriveSpace, StringLen)
myDrives = Left(StringLen, DriveLen)
n = 0
Do While x < Len(myDrives)
    x = InStr(myDrives, Chr$(0))
    If x > 0 Then
        Laufwerk = Left$(myDrives, x - 1)
        n = n + 1
        If n = getDrive Then
            GetLocalDriveName = Laufwerk
            Exit Function
        End If
        myDrives = Mid$(myDrives, x + 1, Len(myDrives))
    End If
Loop
End Function


Gruss Rainer
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Verweis auf Solver.xla in Excel aktivieren


Schritt-für-Schritt-Anleitung

  1. Zugriff auf das Visual Basic Editor (VBE) aktivieren:

    • Öffne Excel und gehe zu Datei > Optionen > Trust Center > Einstellungen für das Trust Center > Vertrauenswürdige Stammquellen.
    • Aktiviere die Option „Zugriff auf das VB-Projekt vertrauen“.
  2. Verweis auf Solver.xla setzen:

    • Öffne den VBE (drücke ALT + F11).
    • Gehe zu Extras > Verweise.
    • Klicke auf Durchsuchen und navigiere zum Excel Installationspfad, typischerweise C:\Programme\Microsoft Office\Office10\Makro\Solver\Solver.xla. Wähle die Datei aus und klicke auf Öffnen.
  3. Verweis im VBA-Code aktivieren:

    • Verwende den folgenden Code in deinem VBA-Projekt:
      Sub SetSolverReference()
       Dim solverPath As String
       solverPath = "C:\Programme\Microsoft Office\Office10\Makro\Solver\Solver.xla"
       Application.VBE.ActiveVBProject.References.AddFromFile solverPath
      End Sub
    • Achte darauf, den Pfad zu überprüfen, da er je nach Installation variieren kann.

Häufige Fehler und Lösungen

  • Fehler: "Der programmatische Zugriff auf das Visual Basic-Projekt ist nicht sicher":

    • Lösung: Stelle sicher, dass die Einstellung „Zugriff auf das VB-Projekt vertrauen“ aktiviert ist (siehe Schritt 1 der Anleitung).
  • Fehler: "Datei SOLVER.XLA wurde nicht gefunden":

    • Lösung: Überprüfe den Installationspfad von Excel und stelle sicher, dass die Datei tatsächlich vorhanden ist.

Alternative Methoden

  • Einhaltung des Excel Add-Ins:

    • Du kannst den Solver auch über das Add-In aktivieren. Verwende dazu den Code:
      AddIns.Add("Solver.xla").Installed = True
    • Beachte, dass dies den Solver nur im Add-In-Manager aktiviert und nicht als Referenz in deinem Projekt.
  • Automatisierte Pfadsuche:

    • Wenn der Installationspfad variieren kann, kannst du diesen VBA-Code verwenden, um den Pfad automatisch zu finden:
      Sub FindSolver()
      Dim found As Boolean
      found = False
      ' Hier kannst du die Logik zur Dateisuche implementieren
      ' Beispiel: Durchsuche alle Laufwerke nach Solver.xla
      End Sub

Praktische Beispiele

  • Überprüfung, ob der Solver bereits referenziert ist:

    Function IsSolverReferenced() As Boolean
      Dim ref As Object
      For Each ref In ActiveWorkbook.VBProject.References
          If InStr(ref.FullPath, "SOLVER.XLA") > 0 Then
              IsSolverReferenced = True
              Exit Function
          End If
      Next ref
      IsSolverReferenced = False
    End Function
  • Erstellen einer MsgBox zur Benutzeranweisung:

    Sub PromptUserToTrust()
      MsgBox "Bitte aktiviere den Zugriff auf das VB-Projekt unter 'Extras > Makro > Sicherheit'!", vbExclamation
    End Sub

Tipps für Profis

  • Verwende Error Handling: Implementiere eine Fehlerbehandlung in deinem VBA-Code, um sicherzustellen, dass der Benutzer über Probleme informiert wird, ohne dass das Makro abstürzt.
  • Dokumentation: Halte deinen Code gut dokumentiert, damit andere Benutzer oder du selbst in der Zukunft schnell verstehen, wie der Verweis auf solver.xla gesetzt wird.

FAQ: Häufige Fragen

1. Ist der Verweis auf den Solver projektspezifisch?
Nein, die Einstellung wird nicht mit der Arbeitsmappe gespeichert. Der Benutzer muss die Sicherheitsanpassung manuell vornehmen.

2. Was ist der Unterschied zwischen einem Verweis und einem Add-In?
Ein Verweis ermöglicht den Zugriff auf die Funktionen der solver.xla-Datei im VBA, während das Aktivieren des Add-Ins nur die Funktion im Excel-Interface aktiviert. Achte darauf, dass du beides nicht verwechselst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige