| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Excel Daten in .idw Textfeld importieren (1883 mal gelesen)
|
The doctor123 Mitglied
Beiträge: 12 Registriert: 04.12.2010 Inventor 2015
|
erstellt am: 19. Nov. 2014 14:12 <-- editieren / zitieren --> Unities abgeben:
Hallo liebes Forum, ich möchte gerne aus einem Excelsheet mehrere untereinander stehende Zellen kopieren und mit Hilfe eines Makros in ein Textfeld (Textfeld liegt in einer bestehenden Skizze) einfügen. Ich habe Erfahrungen mit VBA im Allgemeinen, weiß aber nicht, wie ich die kopierten Zellen nun in Inventor einfügen kann. Kann mir hier vielleicht jemand einen Ansatz liefern? Vielen Dank und viele Grüße Lars [Diese Nachricht wurde von The doctor123 am 22. Nov. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2166 Registriert: 15.11.2006 Windows 10 x64, AIP 2022
|
erstellt am: 19. Nov. 2014 22:23 <-- editieren / zitieren --> Unities abgeben: Nur für The doctor123
Hallo Hast du die 5 Zellinhalte in 5 Strings zwischengespeichert? Ich unterstell das jetzt mal. Hier ein Beispiel das mehrere Arten der Erzeugung von Textboxen in einer Zeichnung demonstriert. Code: Public Sub SketchTextAdd() ' Set a reference to the drawing document. ' This assumes a drawing document is active. Dim oDrawDoc As DrawingDocument Set oDrawDoc = ThisApplication.ActiveDocument ' Create a new sketch on the active sheet. Dim oSketch As DrawingSketch Set oSketch = oDrawDoc.ActiveSheet.Sketches.Add ' Open the sketch for edit so the text boxes can be created. ' This is only required for drawing sketches, not part. oSketch.Edit Dim oTG As TransientGeometry Set oTG = ThisApplication.TransientGeometry ' Create text with simple string as input. Since this doesn't use ' any text overrides, it will default to the active text style. Dim sText As String sText = "Drawing Notes" Dim oTextBox As TextBox Set oTextBox = oSketch.TextBoxes.AddFitted(oTG.CreatePoint2d(3, 18), sText) ' Create text using various overrides. sText = "Notice: All holes larger than 0.500 n are to be lubricated." Set oTextBox = oSketch.TextBoxes.AddFitted(oTG.CreatePoint2d(3, 16), sText) ' Create a set of notes that are numbered and aligned along the left. Dim dYCoord As Double dYCoord = 14 Dim dYOffset As Double Dim oStyle As TextStyle Set oStyle = oSketch.TextBoxes.Item(1).Style dYOffset = oStyle.FontSize * 1.5 ' Simple single line text. Set oTextBox = oSketch.TextBoxes.AddFitted(oTG.CreatePoint2d(3, dYCoord), "1.") sText = "This is note 1." Set oTextBox = oSketch.TextBoxes.AddFitted(oTG.CreatePoint2d(4, dYCoord), sText) ' Two line text. The two lines are defined using the tag within the text string. dYCoord = dYCoord - (oTextBox.FittedTextHeight + 0.5) Set oTextBox = oSketch.TextBoxes.AddFitted(oTG.CreatePoint2d(3, dYCoord), "2.") sText = "This is note 2, which contains two lines." Set oTextBox = oSketch.TextBoxes.AddFitted(oTG.CreatePoint2d(4, dYCoord), sText) ' Single line of text. dYCoord = dYCoord - (oTextBox.FittedTextHeight + 0.5) Set oTextBox = oSketch.TextBoxes.AddFitted(oTG.CreatePoint2d(3, dYCoord), "3.") sText = "This is note 3." Set oTextBox = oSketch.TextBoxes.AddFitted(oTG.CreatePoint2d(4, dYCoord), sText) ' Three lines of text. dYCoord = dYCoord - (oTextBox.FittedTextHeight + 0.5) Set oTextBox = oSketch.TextBoxes.AddFitted(oTG.CreatePoint2d(3, dYCoord), "4.") sText = "This is note 4, which contains several lines." Set oTextBox = oSketch.TextBoxes.AddFitted(oTG.CreatePoint2d(4, dYCoord), sText) sText = "Here is the last and final line of text." Set oTextBox = oSketch.TextBoxes.AddFitted(oTG.CreatePoint2d(4, dYCoord), sText) ' Exit the sketch from the edit environment. oSketch.ExitEdit End Sub ' Function to determine the top left corner of the input text box. Private Sub GetCorner(TextBox As TextBox, Left As Double, Top As Double) ' Determine the top left corner of the text box by accounting ' for the justifications. Select Case TextBox.HorizontalJustification Case kAlignTextLeft Left = TextBox.Origin.X Case kAlignTextCenter Left = TextBox.Origin.X - (TextBox.Width / 2) Case kAlignTextRight Left = TextBox.Origin.X - TextBox.Width End Select
Select Case TextBox.VerticalJustification Case kAlignTextUpper Top = TextBox.Origin.Y Case kAlignTextMiddle Top = TextBox.Origin.Y + (TextBox.height / 2) Case kAlignTextLower Top = TextBox.Origin.Y + TextBox.height End Select End Sub
------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
The doctor123 Mitglied
Beiträge: 12 Registriert: 04.12.2010 Inventor 2015
|
erstellt am: 20. Nov. 2014 07:37 <-- editieren / zitieren --> Unities abgeben:
Hallo Ralf, vielen Dank für die schnelle Antwort. Das hilft mir schon mal weiter. Eine Frage hätte ich noch. Kann man an dieser Stelle: Set oSketch = oDrawDoc.ActiveSheet.Sketches.Add etwas ändern, damit keine neue Skizze erstellt wird, sondern das Textfeld immer in eine Skizze mit Namen "Skizze1" erstellt wird? Viele Grüße Lars
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2166 Registriert: 15.11.2006 Windows 10 x64, AIP 2022
|
erstellt am: 20. Nov. 2014 19:18 <-- editieren / zitieren --> Unities abgeben: Nur für The doctor123
|
The doctor123 Mitglied
Beiträge: 12 Registriert: 04.12.2010 Inventor 2015
|
erstellt am: 21. Nov. 2014 12:19 <-- editieren / zitieren --> Unities abgeben:
Hallo Ralf, auch das klappt so wunderbar (Vielen Dank für deine Hilfe!!). Ich kann jetzt ohne Probleme aus einer Excel Datei Zellen kopieren und in eine Inventor Skizze einfügen. Jetzt kommt es allerdings manchmal vor, das es bis zu zwanzig Werte sind, die kopiert werden sollen. Gibt es eine elegantere Möglichkeit diese Zellen zu kopieren und einzufügen, ohne für jede Zelle eine neue Variable zu vergeben? Anbei mal mein Code! Sub Tabletest() ' Make Inventor be aware of excel file Dim oExclApp As Excel.Application Set oExclApp = New Excel.Application oExclApp.Visible = False 'decides wether to open or not the excel file 'Give path of used excel file Dim ExclPath As String ExclPath = "C:\Users\...\Desktop\test.xlsx" 'InputBox(" Bitte geben Sie den vollständigen Pfad" & vbCrLf & _ '"der zu importierenden Exceldatei ein!", "Eingabe") 'Copy cell from excel file Dim oExclDoc As Workbook Set oExclDoc = oExclApp.Workbooks.Open(ExclPath) Dim test As String test = Range("A2") MsgBox (test) ' Set a reference to the drawing document. ' This assumes a drawing document is active. Dim oDrawDoc As DrawingDocument Set oDrawDoc = ThisApplication.ActiveDocument ' Create a new sketch on the active sheet. Dim oSketch As DrawingSketch Set oSketch = oDrawDoc.ActiveSheet.Sketches.Item("Skizze1") ' Open the sketch for edit so the text boxes can be created. ' This is only required for drawing sketches, not part. oSketch.Edit Dim oTG As TransientGeometry Set oTG = ThisApplication.TransientGeometry ' Create text with simple string as input. Since this doesn't use ' any text overrides, it will default to the active text style. Dim sText As String sText = test Dim oTextBox As TextBox Set oTextBox = oSketch.TextBoxes.AddFitted(oTG.CreatePoint2d(3, 18), sText) ' Exit the sketch from the edit environment. oSketch.ExitEdit End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Chris 31 Mitglied Konstrukteur und Mädchen für alles
Beiträge: 575 Registriert: 23.04.2013 Inventor 2013/2015 Windows 7 64 bit 16GB RAM nVidia Quadro 600
|
erstellt am: 21. Nov. 2014 13:57 <-- editieren / zitieren --> Unities abgeben: Nur für The doctor123
Zitat: Original erstellt von The doctor123: Gibt es eine elegantere Möglichkeit diese Zellen zu kopieren und einzufügen, ohne für jede Zelle eine neue Variable zu vergeben?
Code: Dim test As String test = Range("A2") MsgBox (test)
Hallo Doctor, mach doch einfach aus der Range("A2") eine Variable. Mal gesetzt den Fall, du bleibst immer in der Spalte A, dann könnte das ganze so aussehen: Code:
dim i as integer=1 test = Range("A" & i)
Das ganze dann mit ner Loop-Schleife durchlaufen, bis die Zelle nichts mehr enthält. Gleiches funktioniert natürlich auch mit ("Skizze" & i) Gruß Chris Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
The doctor123 Mitglied
Beiträge: 12 Registriert: 04.12.2010 Inventor 2015
|
erstellt am: 22. Nov. 2014 08:33 <-- editieren / zitieren --> Unities abgeben:
|
The doctor123 Mitglied
Beiträge: 12 Registriert: 04.12.2010 Inventor 2015
|
erstellt am: 24. Nov. 2014 17:27 <-- editieren / zitieren --> Unities abgeben:
Ich habe nun das Programm soweit fertig und es funktioniert so, wie ich es mir vorgestellt habe. Mit Hilfe eines Userforms kann man den Pfad einer Exceldatei auswählen und zwischen zwei Spalten, die dann aus der Excel Datei importiert werden, unterscheiden. Der Code kopiert die Werte anschließend in einzelne Textboxen und fügt Sie in eine Skizze in der Zeichnung (.idw) ein. Falls jemand Interesse an dem Code haben sollte, kann er/ sie sich gerne melden! Noch mal vielen Dank an Ralf und Chris für die Hilfe! Viele Grüße Lars [Diese Nachricht wurde von The doctor123 am 24. Nov. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Chris 31 Mitglied Konstrukteur und Mädchen für alles
Beiträge: 575 Registriert: 23.04.2013 Inventor 2013/2015 Windows 7 64 bit 16GB RAM nVidia Quadro 600
|
erstellt am: 25. Nov. 2014 07:16 <-- editieren / zitieren --> Unities abgeben: Nur für The doctor123
|