Juergens-Workshops.de Forum
Inhalte von Excel-Tabelle in Listfeld - Druckversion

+- Juergens-Workshops.de Forum (https://forum.juergens-workshops.de)
+-- Forum: Corel Grafik Forum (https://forum.juergens-workshops.de/forumdisplay.php?fid=65)
+--- Forum: Corel Draw (https://forum.juergens-workshops.de/forumdisplay.php?fid=93)
+--- Thema: Inhalte von Excel-Tabelle in Listfeld (/showthread.php?tid=38335)

Seiten: 1 2 3


Inhalte von Excel-Tabelle in Listfeld - StefanA1987 - 09.02.2022

Ein freundliches Hallo hier ins Forum!

ich versuche gerade ein Listfeld im vba Formular(Corel Draw) über eine Excel Tabelle zu füllen.
Im Prinzip: Excel Datei auslesen und aus Tabellenblatt 1 direkt die Spalte A in ein Listfeld einlesen.

Kann mir hierbei jemand auf die Sprünge helfen?

Danke euch vorab und viele Grüße
Stefan


RE: Inhalte von Excel-Tabelle in Listfeld - Piet - 10.02.2022

Moin,

"auf die Sprünge" ..... Seriendruck in die Suche eingeben  Wink

Hier ein paar Beispiele:

https://forum.juergens-workshops.de/showthread.php?tid=37371&highlight=seriendruck

https://forum.juergens-workshops.de/showthread.php?tid=37516&highlight=seriendruck

https://forum.juergens-workshops.de/showthread.php?tid=24702&highlight=seriendruck


RE: Inhalte von Excel-Tabelle in Listfeld - koter - 11.02.2022

Hallo Stefan,

Ich habe aus Piets Links eine GMS zusammenkopiert und als ZIP angehängt:

[Bild: xlcdrh8kx9.gif]

Excel muss laufen, sonst klappt es nicht.

Gruß

Koter


RE: Inhalte von Excel-Tabelle in Listfeld - koter - 14.02.2022

Hallo Stefan,

die Frage aus der PN beantworte lieber hier.
Ich sehe keinen Grund das Thema vertraulich zu behandeln.

Du hast mir diesen Code gesendet und mich gebeten das in ein Excel-Makro zu „übersetzen“.

Code:
Dim ea As Rect
Filter As ExportFilter
Set ea = CreateRect(ActivePage.LeftX, ActivePage.BottomY, ActivePage.SizeWidth, ActivePage.SizeHeight)
sp = "C:\Test\Test"
Set Filter = ActiveDocument.ExportBitmap(sp + ".jpg", cdrJPEG, cdrCurrentPage, cdrRGBColorImage, 1600, 1600, 300, 300, Transparent:=False, ExportArea:=ea)
Filter.Finish

Das Excel-Makro könnte so aussehen:

Code:
Option Explicit

Sub Coreltest()
   Const cdrCurrentPage As Long = 1
   Const cdrRGBColorImage As Long = 4
   Const cdrJPEG As Long = 774
   
   Dim CDraw As Object, CDDoc As Object, CDSeite As Object, CDFilter As Object, se As Object
   Dim sp As String

   Set CDraw = GetObject("", "CorelDraw.Application.17")
   
   If CDraw.Visible Then
       CDraw.InitializeVBA
   Else
       MsgBox "CorelDraw läuft nicht!", vbCritical, "Fehler"
       Exit Sub
   End If
   
   Set CDDoc = CDraw.ActiveDocument
   Set CDSeite = CDraw.ActivePage
   
   sp = "C:\Test\Test"
   
   Set se = CDraw.CreateStructExportOptions
   With se
       .ImageType = cdrRGBColorImage
       .Transparent = False
       .SizeX = 1600
       .SizeY = 1600
       .ResolutionX = 300
       .ResolutionY = 300
       Set .ExportArea = CDraw.CreateRect(CDSeite.LeftX, CDSeite.BottomY, CDSeite.SizeWidth, CDSeite.SizeHeight)
   End With

   Set CDFilter = CDDoc.ExportEx(sp & ".jpg", cdrJPEG, cdrCurrentPage, se, Nothing)
   CDFilter.Finish
   
   Set CDraw = Nothing
End Sub

Bei „GetObject“ musst Du die Nummer Deiner Version eintragen. Die 17 steht für X7.
Die Definition der Konstanten am Anfang des Makros kannst Du auch weglassen und nur die Werte verwenden.
Excel kennt natürlich keine Corel-Konstanten.

Ich rate Dir möglichst viele Programmteile in CorelDraw zu erstellen und in Excel nur das nötigste zu machen.
Wie Du am Codebeispiel sehen kannst ist es aufwändiger, CorelDraw von Excel aus zu programmieren.
Das gilt natürlich auch umgekehrt.

Viel Spaß und viel Erfolg beim Programmieren!

Gruß

Koter

Nachtrag: Wenn Du auf die Frage in der zweiten PN noch eine Antwort brauchst melde Dich bitte hier noch einmal.


RE: Inhalte von Excel-Tabelle in Listfeld - StefanA1987 - 16.02.2022

Das mit dem Export funktioniert genau so, wie ich es mir vorgestellt habe! Vielen Herzlichen Dank an Koter!

Ich würde mich tierisch über eine solch ähnliche Prozedur auch für den Import von Cdr-Dateien freuen, bitte ebenfalls aus Excel heraus :-)


RE: Inhalte von Excel-Tabelle in Listfeld - koter - 16.02.2022

Hallo Stefan,

der Code für den Import könnte so aussehen:

Code:
Sub ImportCDR()
   Dim CDraw As Object, CDFilter As Object
   
   Set CDraw = GetObject("", "CorelDraw.Application.17")
   
   If CDraw.Visible Then
       CDraw.InitializeVBA
   Else
       MsgBox "CorelDraw läuft nicht!", vbCritical, "Fehler"
       Exit Sub
   End If
   
   Set CDFilter = CDraw.ActiveDocument.ActiveLayer.ImportEx("C:\Test\Test.cdr", 0, Nothing)
   CDFilter.Finish
   
   Set CDraw = Nothing
End Sub

Gruß

Koter


RE: Inhalte von Excel-Tabelle in Listfeld - StefanA1987 - 18.02.2022

Ich habe eben mal den Import ausprobiert, leider kommt ständig der Fehler: '-2147467259 (80004005)

Automatisierungsfehler
Unbekannter Fehler

Ganz komisch... bitte nochmal um Hilfe! Danke Koter!


RE: Inhalte von Excel-Tabelle in Listfeld - koter - 18.02.2022

Hallo Stefan,

mit X7 und Excel 2013 klappt es. Deshalb kann ich leider nicht sagen, warum es bei Dir nicht geht.

Du kannst versuchen die Importprozedur in CorelDraw zu schreiben und von Excel starten.

Wenn Du z.B in CorelDraw eine GMS namens „Excel1“ anlegst, dort ein Modul namens „ImportModul“ erstellst und die Prozedur „import1“ einfügst kannst Du diese von Excel starten:

CorelDraw:
Code:
Public Sub import1(Dateiname As String)
   Dim impFilter As ImportFilter
   Set impFilter = ActiveDocument.ActiveLayer.ImportEx(Dateiname, 0)
   impFilter.Finish
End Sub

Excel:
Code:
Sub ImportCDR2()
  Dim CDraw As Object
 
  Set CDraw = GetObject("", "CorelDraw.Application.17")
 
  If CDraw.Visible Then
      CDraw.InitializeVBA
  Else
      MsgBox "CorelDraw läuft nicht!", vbCritical, "Fehler"
      Exit Sub
  End If
 
  Call CDraw.GMSManager.RunMacro("Excel1", "ImportModul.import1", "C:\Test\Test.cdr")
 
  Set CDraw = Nothing
End Sub

Teste zuerst, ob die Prozedur in CorelDraw funktioniert indem Du sie von dort aufrufst.
Ich hoffe es funktioniert auf diesem Wege.

Du solltest vielleicht Deine CorelDraw-Version mit in die Signatur schreiben.


RE: Inhalte von Excel-Tabelle in Listfeld - StefanA1987 - 18.02.2022

Ich habe es hingekriegt mit dem zuerst mitgeteilten Code, aber ich habe aus ImportEx nur Import gemacht und ich musste ein "On Error Resume Next" drüber schreiben. Jetzt geht es aber wunderbar! Ich benutzt Corel Draw 2018 (Version 20) und Excel 2016.

Vielen herzlichen Dank und bestimmt bis bald :-)


RE: Inhalte von Excel-Tabelle in Listfeld - koter - 18.02.2022

Hallo Stefan,

(18.02.2022, 18:19)StefanA1987 schrieb: ...ich musste ein "On Error Resume Next" drüber schreiben...

Wenn Du Import statt ImportEx verwendest brauchst Du den Filter nicht.
Wahrscheinlich löst CDFilter.Finish den Fehler aus.

Ich vermute, dass Du Dir „On Error“ sparen kannst, wenn Du den Befehl so aufrufst:
Code:
Call CDraw.ActiveDocument.ActiveLayer.Import("C:\Test\Test.cdr", 0, Nothing)
Set CDraw = Nothing

Gruß

Koter