VBA zu exe wie?

  • VB.NET
  • .NET (FX) 4.0

Es gibt 38 Antworten in diesem Thema. Der letzte Beitrag () ist von Engelchen.

    Engelchen schrieb:

    wie das geht - hab ich keine Ahnung leider
    In dem oben verlinkten Beitrag ist es gut beschrieben. Zieh es dir rein. Das ist das A&O zum Fehlerfinden.

    Engelchen schrieb:

    MyExcel.Workbooks.Open("\\xxx_StartJJJJMMTT_EndJJJJMMTT.xlsx")
    Ist das modifiziert oder steht das tatsächlich so drin?
    Der Pfad kommt mir äußerst merkwürdig vor.

    Engelchen schrieb:

    Dim DestinationFolder = "\\xxx\
    Kann auch nicht stimmen.

    Engelchen schrieb:

    Dim DestinationFile = $"123_{StartDatum.ToString("YYYYMMDD")}_{EndDatum.ToString("YYYYMMDD")}.xlsx"
    Achtung:
    Im Gegensatz zu Excel-VBA, wo Groß- und Kleinschreibung egal ist, solltest du die von mir verwendete Schreibweise nehmen!
    .ToString("yyyyMMdd")
    .Net hat nämlich wesentlich vielseitigere Formate.
    Info: docs.microsoft.com/de-de/dotne…e-and-time-format-strings
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    VB.NET-Quellcode

    1. Class MainWindow
    2. Private Sub Button_Click(sender As Object, e As RoutedEventArgs)
    3. Dim MyExcel As New Microsoft.Office.Interop.Excel.Application
    4. MyExcel.Workbooks.Open("\\XXX\YYYY_StartJJJJMMTT_EndJJJJMMTT.xlsx")
    5. MyExcel.Visible = True
    6. Dim StartDatum As String
    7. Dim EndDatum As String
    8. StartDatum = InputBox("Start-Datum:", "Eingabe", Format(Now, "YYYYMMDD"))
    9. EndDatum = InputBox("End-Datum:", "Eingabe", Format(Now, "YYYYMMDD"))
    10. MyExcel.Range("D:D").Replace(("Startdatum im Format JJJJMMTT"), StartDatum)
    11. MyExcel.Range("E:E").Replace(("Enddatum im Format JJJJMMTT"), EndDatum)
    12. MyExcel.Range("F:F").Replace(("_*"), "")
    13. Dim loLetzte As Long
    14. With MyExcel.Worksheets("Sheet1")
    15. loLetzte = .Cells(.Rows.Count, "A").End(-4162).Row
    16. If MyExcel.WorksheetFunction.CountBlank(.Range("H2:H" & loLetzte)) > 0 Then
    17. .Range("H2:H" & loLetzte).SpecialCells(4) = 0
    18. End If
    19. End With
    20. MyExcel.Range("A:AZ").Replace(("Keine Eintragung..."), "")
    21. MyExcel.Range("A:AZ").Replace(("Keine Ei"), "")
    22. Dim DestinationFolder = "\\XXXYYY"
    23. Dim DestinationFile = $"A_B_C_{StartDatum.ToString("yyyyMMdd")}_{EndDatum.ToString("yyyyMMdd")}.xlsx"
    24. MyExcel.SaveAs(IO.Path.Combine(DestinationFolder, DestinationFile), Microsoft.Office.Interop.Excel.XlFileFormat.xlOpenXMLWorkbook)
    25. End Sub
    26. End Class

    CodeTags gesetzt ~VaporiZed
    <Insert funny signature here>

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    Ich versuche gerade den Code wieder zu finden und habe eine ältere Backupdatei gefunden allerdings wirft er mir Fehler auf, obwohl die Datei funktioniert hatte, weißt du wie das geht, dass ich den Code ausführbar mache? Er sagt mir, dass es zu viele Fehler sind.
    Bilder
    • Screenshot 2021-10-11 112924.png

      10,95 kB, 503×120, 123 mal angesehen
    <Insert funny signature here>
    Hier sind die Fehler.


    Ich versuche es wenn es nicht klappen sollte einfach diesen Code zu lassen, die Exe hab ich ja. Und eine neue Exe zu machen, die mir einen Teil einer Exceltabelle kopiert und diesen in eine neue Excel einfügt. Dann werde ich beide Exe Dateien kombinieren mittels Batch datei.
    Allerdings habe ich das mit dem Makrorekorder versucht zu machen und ich komme nicht an das Ende der Exceltabelle ran, hatten wir das damals nicht gefunden, wie dieser Code heißt?
    Bilder
    • Screenshot 2021-10-11 140254.png

      23,27 kB, 743×209, 120 mal angesehen
    <Insert funny signature here>

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Engelchen“ ()

    Wie soll das gehen?

    Ich könnte ja auch drauf verzichten, da ich die Exe ja habe und sonst nicht weiß wie ich die Sache restauriert bekomme.
    Kannst du mir denn bei der neuen Exe helfen, die ich versuche zu erstellen?
    Da möchte ich eine Exceltabelle öffnen, STRG+A drücken, kopieren und dann eine zweite öffnen und dort dann die ganz unten einfügen, bzw. dabei drauf achten, dass die erste Zeile nicht kopiert wird, denn die zwei Tabellen haben gleiche kopfzeilen
    <Insert funny signature here>

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Engelchen“ ()

    Engelchen schrieb:

    Ich könnte ja auch drauf verzichten, da ich die Exe ja habe


    Wenn du eine funktionierende Exe hast kannst du Jetbrains dotpeek benutzen, ist kostenlos. Da kannste den Quellcode deiner (.net) Exe in großen Teilen ansehen.


    Meine Website:
    www.renebischof.de

    Meine erste App (Android):
    PartyPalooza
    Ist leider nicht da.

    Hab jetzt mal ein neues erstellt und den Code der oben ist eingefügt. allerdings unterringelt er mir bei Dim MyExcel as New das Microsoft.Office.Interop.Excel.Application,

    weiß da einer was ich machen muss?

    Import hat nichts gebracht.
    Bilder
    • Screenshot 2021-10-11 151359.png

      34,43 kB, 669×373, 106 mal angesehen
    <Insert funny signature here>

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Engelchen“ ()

    Habs glaub ich gefunden, geht über Verweis - hinzufügen

    Danke jetzt hab ich's.


    Nun zu der Frage von vorhin könntest du mir erklären, wie ich den Code, den ich per Makrorekorder habe wieder umschreibe?
    Beispielsweise suche ich wieder die letzte Zeile einer Tabelle, von da aus soll dann eine andere Tabelle iengefügt werden, wobei die erste Kopfzeile nicht mitkopiert werden soll..
    Wolte das erstmal im Makrorekorder durchspielen, aber weiß nicht wie das gehen soll, da er mir die "nr" der Zeile ausgibt und diese sich variabel verhält.

    Glaube es war die hier:

    Quellcode

    1. Dim loLetzte As Long
    2. With MyExcel.Worksheets("Sheet1")
    3. loLetzte = .Cells(.Rows.Count, "A").End(-4162).Row
    4. If MyExcel.WorksheetFunction.CountBlank(.Range("H2:H" & loLetzte)) > 0 Then
    5. .Range("H2:H" & loLetzte).SpecialCells(4) = 0
    6. End If
    7. End With


    Nur passt die hier ja nicht rein..

    Hätte das jetzt so aufgezeichnet:

    Quellcode

    1. MyExcel.Range("A1").Select()
    2. Selection.End(xlDown).Select
    3. Selection.End(xlDown).Select

    Aber das muss ja noch umgewandelt werden in die andere Programmiersprache.
    Wie geht das?

    Hab jetzt bisschen rumgespielt und das hier gefunden...

    Wie kann ich den Code noch bearbeiten?


    Quellcode

    1. Dim MyExcel As New Microsoft.Office.Interop.Excel.Application
    2. MyExcel.Visible = True
    3. Dim wk1, wk2 As Workbook
    4. Dim row1, row2 As Integer
    5. Dim path1, path2 As String
    6. path1 = "\\Liste1.xlsx"
    7. path2 = "\\Liste2.xlsx"
    8. wk1 = MyExcel.Workbooks.Open(path1)
    9. wk2 = MyExcel.Workbooks.Open(path2)
    10. MyExcel.Visible = True
    11. row1 = wk1.Sheets(1).Cells(wk1.Sheets(1).Rows.Count, 1).End(-4162).Row
    12. row2 = wk2.Sheets(1).Cells(wk2.Sheets(1).Rows.Count, 1).End(-4162).Row + 1
    13. wk1.Sheets(1).Rows("2:" & row1).Copy
    14. MyExcel.Workbooks.Open("\\Liste1undListe2_StartJJJJMMTT_EndJJJJMMTT.xlsx")
    15. MyExcel.Visible = True

    Muss jetzt nur noch herausfinden wie ich einfüge.. in die letzte Zeile.
    <Insert funny signature here>

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „Engelchen“ ()