Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  [VBA] Auslesen von Zelle in Excel endet in Fehler 429

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS
  
On-Demand-Webinare zu SolidCAM (SolidCAM)
Autor Thema:  [VBA] Auslesen von Zelle in Excel endet in Fehler 429 (1191 / mal gelesen)
JulianVBA
Mitglied


Sehen Sie sich das Profil von JulianVBA an!   Senden Sie eine Private Message an JulianVBA  Schreiben Sie einen Gästebucheintrag für JulianVBA

Beiträge: 2
Registriert: 08.05.2020

erstellt am: 08. Mai. 2020 14:13    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Moin,

[QUOTE][/QUOTE]für folgende Aufgabenstellung schreibe ich derzeit ein Makro:


Ich möchte von dem Programm Solidworks auf eine zuvor erstellte Excel Datei(Zelle A1) zugreifen. Diese soll dann für einen Nummerngenerator herhalten und (um 1 erhöht) wieder zurückgeschrieben werden. Wenn ich nun das Makro starte kommt es sehr häufig vor, dass ich die Fehrlermeldung


Laufzeitfehler '429': ActiveX-Komponente konnte Objekt nicht erstellen


bekomme. Nach ein bisschen Recherche konnte ich den Fehler auf den Befehl "GetObject" festmachen aber hier komm ich nun nicht mehr weiter...

Brauche ich noch zusätzliche Verweise um auf Excel zuzugreifen oder wo dran liegt das?


Hier einmal der Code:

Code:

Const NMB_FORMAT As String = "00"


Option Explicit

    Dim swapp                  As SldWorks.SldWorks
    Dim swModel                As SldWorks.ModelDoc2
   
    Dim myD1            As SldWorks.Dimension
    Dim objSource      As Excel.Worksheet
    Dim xl              As Excel.Workbook
    Dim Errors          As Long
    Dim Warnings        As Long
    Dim Name1, Name2    As String

Sub Nummerngenerator()

    Dim Konstrukteur_K  As String
    Dim NMB_SRC_FILE_PATH As String
    Dim sName As String
    Dim sDate As String
    Set swapp = Application.SldWorks
    Set swModel = swapp.ActiveDoc
   
    sName = swModel.CustomInfo("3dCreatedBy")
   
        If sName = "" Then
            MsgBox ("Bitte Konstrukteur angeben!")
            Exit Sub
        End If
   
        If sName = "Beispiel1" Then
          Konstrukteur_K = "RA"
        ElseIf sName = "Beispiel9" Then
            Konstrukteur_K = "MC"
        ElseIf sName = "Beispiel8" Then
            Konstrukteur_K = "LH"
        ElseIf sName = "Beispiel7" Then
            Konstrukteur_K = "LL"
        ElseIf sName = "Beispiel6" Then
            Konstrukteur_K = "KM"
        ElseIf sName = "Beispiel5" Then
            Konstrukteur_K = "NE"
        ElseIf sName = "Beispiel21" Then
            Konstrukteur_K = "KO"
        ElseIf sName = "Beispiel4" Then
            Konstrukteur_K = "JW"
        ElseIf sName = "Beispiel2" Then
            Konstrukteur_K = "JZ"
        End If
       
    sDate = Format(Date, "yymmdd")
   
    If Dir("T:\Austauschordner\Test\" & Konstrukteur_K & sDate & ".xlsx") <> "" Then
   
    Else
      MsgBox ("Nummerngenerator nicht aktiv!")
      Exit Sub
    End If
     
   
    NMB_SRC_FILE_PATH = "T:\Austauschordner\Test\" & Konstrukteur_K & sDate & ".xlsx"
   
main NMB_SRC_FILE_PATH, Konstrukteur_K, sDate

End Sub

Sub main(NMB_SRC_FILE_PATH As String, Konstrukteur_K As String, sDate As String)

    Set swapp = Application.SldWorks
       
    Dim swModel As SldWorks.ModelDoc2
       
    Set swModel = swapp.ActiveDoc

    Dim lastNumber As Integer
   
    Dim Excel    As Excel.Application

  Dim x, y      As Integer
  Dim excel_NOK As Boolean
  Dim FileName As String
  Dim wb        As Excel.Workbook
 
 
    Set Excel = GetObject(, "Excel.Application")
  ' Wenn ein Fehler auftritt dann läuft Excel noch nicht

  If Err.number <> 0 Then excel_NOK = True
  Err.Clear
 
  ' Wenn Excel noch nicht läuft, dann wird es gestartet
  If excel_NOK = True Then
    Set Excel = CreateObject("excel.application")
   
  End If
 
FileName = swapp.GetCurrentMacroPathName
  Set wb = Excel.Workbooks.Open(NMB_SRC_FILE_PATH)

  x = 1
  y = 1

  lastNumber = Excel.ActiveSheet.Cells(y, x).Value
 
  wb.Save
  Excel.Quit
   
    Dim thisNumber As Integer
    thisNumber = lastNumber + 1
   
    swModel.CustomInfo("PartNo") = Konstrukteur_K & sDate & Format(thisNumber, NMB_FORMAT)
     
    StoreNumber NMB_SRC_FILE_PATH, thisNumber
   
End Sub

Sub StoreNumber(filePath As String, number As Integer)
   
    Dim Excel    As Excel.Application

  Dim x, y      As Integer
  Dim excel_NOK As Boolean
  Dim FileName As String
  Dim wb        As Excel.Workbook
 
 
    Set Excel = GetObject(, "Excel.Application")
   
  ' Wenn ein Fehler auftritt dann läuft Excel noch nicht
  If Err.number <> 0 Then excel_NOK = True
  Err.Clear
 
  ' Wenn Excel noch nicht läuft, dann wird es gestartet
  If excel_NOK = True Then
    Set Excel = CreateObject("excel.application")
  End If
 
 
 
FileName = swapp.GetCurrentMacroPathName
  Set wb = Excel.Workbooks.Open(filePath)

  x = 1
  y = 1
 
  Excel.ActiveSheet.Cells(y, x).Value = number
 
  wb.Save
  Excel.Quit
 
End Sub



Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

nahe
Ehrenmitglied



Sehen Sie sich das Profil von nahe an!   Senden Sie eine Private Message an nahe  Schreiben Sie einen Gästebucheintrag für nahe

Beiträge: 1747
Registriert: 18.01.2001

arbeite mit:
Dell Precision 7750
i7 2,6 GHz 6 Kerne
32GB RAM
512GB SSD
NVIDIA Quadro RTX 4000
------------------------
SWX-2020 SP5.0
EPDM
----------------
Windows 10
----------------
VB.net
VB
VBA
ein wenig Swift am Mac

erstellt am: 11. Mai. 2020 05:57    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für JulianVBA 10 Unities + Antwort hilfreich


Excel-Verweis.PNG

 
Hallo Julian,

ohne das getestet zu haben,
vermute ich mal, dass Du keinen Verweis auf das Excel Object Library
eingefügt hast

Im Makro Editor unter
Extras -> Verweise
den Verweis auf Excel einbinden

siehe auch screenshot anbei


------------------
Grüße
Heinz

[Diese Nachricht wurde von nahe am 11. Mai. 2020 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

JulianVBA
Mitglied


Sehen Sie sich das Profil von JulianVBA an!   Senden Sie eine Private Message an JulianVBA  Schreiben Sie einen Gästebucheintrag für JulianVBA

Beiträge: 2
Registriert: 08.05.2020

erstellt am: 11. Mai. 2020 07:49    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Moin,

das ist es leider nicht..die habe ich aktiviert.
Was mir noch aufgefallen ist:

Wenn ich eine andere Excel Datei auf habe, bzw kurz nach dem Schließen, funktioniert das Makro einwandfrei.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

nahe
Ehrenmitglied



Sehen Sie sich das Profil von nahe an!   Senden Sie eine Private Message an nahe  Schreiben Sie einen Gästebucheintrag für nahe

Beiträge: 1747
Registriert: 18.01.2001

arbeite mit:
Dell Precision 7750
i7 2,6 GHz 6 Kerne
32GB RAM
512GB SSD
NVIDIA Quadro RTX 4000
------------------------
SWX-2020 SP5.0
EPDM
----------------
Windows 10
----------------
VB.net
VB
VBA
ein wenig Swift am Mac

erstellt am: 11. Mai. 2020 10:00    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für JulianVBA 10 Unities + Antwort hilfreich

Hallo nochmals,

da habe ich dann leider auch keine Idee

Keine Ahnung ob das ein Problem ist,
aber hast Du von Office ev. die 64 Bit Version installiert?

bzw. versuch mal Excel von einem Word Makro aus zu starten
ob DU dort das gleiche Problem hast


------------------
Grüße
Heinz

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

MWN
Mitglied
Dipl.-Ing.


Sehen Sie sich das Profil von MWN an!   Senden Sie eine Private Message an MWN  Schreiben Sie einen Gästebucheintrag für MWN

Beiträge: 492
Registriert: 14.02.2007

erstellt am: 11. Mai. 2020 10:28    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für JulianVBA 10 Unities + Antwort hilfreich

Hey JulianVBA,

wenn ich deinen Code richtig gelesen habe, fehlt dir erst einmal eine richtige Fehlerbehandlung.
Diese sollte mit

Code:
OnError GoTo Fehlerbehandlung
stattfinden, da dein GetObject direkt einen Fehler wirft und den Compiler beendet.
https://docs.microsoft.com/de-de/office/vba/language/reference/user-interface-help/on-error-statement
Der geworfene Fehler wird dann mit dem o.g. Statement aufgefangen und zu einem Anweisungsblock umgeleitet.
In dieser Fehlerbehandlung solltest du dann dein Excel-Objekt erstellen und an der Stelle fortsetzen, aus der du in die Fehlerbehandlung gesprungen bist.

Vielleicht wäre es noch eine Alternative, auf GetObject zu verzichten und stattdessen:
- nur mit CreateObject zu arbeiten
- alternativ mit

Code:
Set xlApp = GetObject("Book2").Application
arbeiten, da ich vermute, dass dein Workbook immer denselben Namen hat

HTH
Tobias

------------------
G|P|E - Grützner Projektentwicklung

"...Kommunikation ist nur so gut wie ihr Ergebnis..." - frei nach Richard Bandler / John Grinder

"...Wenn du das tust, was du schon immer tust, wirst du auch nur das erhalten, was du schon immer erhalten hast..."

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2024 CAD.de | Impressum | Datenschutz