Benutzer mit den meisten Antworten
per VBA von einer Datei die mehrere Datenblätter enthält, von einem Blatt zu einem anderen Daten zu kopieren

Frage
-
Hallo
Ich hätte mal wieder eine Hilfe nötig
Ich habe eine Excel-Datei "Jahr.xlsx", die 13 Sheets enthält. Januar bis Dezember plus Stammdaten.
Bis jetzt kann ich meine Datei fehlerfrei öffnen, in der fetten Zeile durch eintragen des Sheet-Namen dort Werte eintragen, und das kleine Test_Programm ohne Fehler beenden. Was ich einfach nicht hinbekomme, das ich von Januar Daten nach Februar kopieren kann.
Über jede Hilfe bin ich dankbar, bostic
Public Class Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load UP_1() End End Sub Public Function UP_1() As Boolean Dim Exceldatei2 As Object = CreateObject("Excel.Application") Exceldatei2.Application.Workbooks.Open("M:\Test\Jahr.xlsx") ' File aus dem gelesen werden soll öffnen Exceldatei2.Application.Sheets("Oktober" ).Select(1) Exceldatei2.Cells(10, 20).Value = 17 Exceldatei2.Cells(10, 22).Value = "NEUER INHALT" Exceldatei2.ActiveWorkbook.Save() Exceldatei2.ActiveWorkbook.Close() Exceldatei2.Workbooks.Close() Exceldatei2.Quit() Exceldatei2 = Nothing Return True End Function End Class
Hobby Programmierer aus Butzbach, Hessen
Antworten
-
Hallo bostic,
so sollte es funktionieren:
Dim xlsApp As Microsoft.Office.Interop.Excel.Application = CreateObject("Excel.Application") Dim wsQuelle As Microsoft.Office.Interop.Excel.Worksheet Dim wsZiel As Microsoft.Office.Interop.Excel.Worksheet Dim wb As Microsoft.Office.Interop.Excel.Workbook wb = xlsApp.Workbooks.Open("M:\Test\Jahr.xlsx") ' File aus dem gelesen werden soll öffnen wsQuelle = wb.Sheets("Januar") wsZiel = wb.Sheets("Februar") wsZiel.Cells(1, 1) = wsQuelle.Cells(1, 1) . . . .
Ich verwende hier übrigens die frühe Bindung, d.h. Du musst vorher die Verweise auf Excel im Visual-Studio eintragen.
Grüße
Roland
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Montag, 28. Mai 2018 05:49
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Dienstag, 5. Juni 2018 13:22
-
Hi,
im Betreff der Frage schreibst Du von VBA. Das Forum betrifft aber Fragen zu VB.NET. VBA nutzt VB6 als Sprach-Version.Die Antwort von Roland bezieht sich auf VB.NET, nicht auf VBA. Damit das in VB.NET funktioniert, muss natürlich auf die Excel-PIA referenziert werden. Das kannst Du im Visual Studio 2017 über rechte Maustaste über dem markierten Objekt -> Add -> Reference -> Com -> Microsoft Excel 16.0 Object Library machen. Da wird die PIA-dll automatisch generiert und referenziert. In der Code kannst Du dann Imports für den Excel-Namensraum nutzen.
--
Viele Grüsse
Peter Fleischer (ehem. MVP)
Meine Homepage mit Tipps und Tricks- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Montag, 28. Mai 2018 05:49
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Dienstag, 5. Juni 2018 13:23
-
Hallo bostic,
wie Peter schon geschrieben hat ist mein Antwortbeispiel natürlich in VB.NET, das habe ich so gewählt weil Dein Codeauschnitt ja ebenfalls in VB.NET geschrieben war.
Falls Du lieber nicht die frühe Bindung wie in Deinem Beispiel verwenden willst (weshalb auch immer) kannst Du über die späte Bindung die Variablen auch vom Typ Object deklarieren.
Mein Beispiel sieht dann so aus:
. . . Dim xlsApp As Object = CreateObject("Excel.Application") Dim wsQuelle As Object Dim wsZiel As Object Dim wb As Object wb = xlsApp.Workbooks.Open("m:\test\Jahr.xlsx") ' File aus dem gelesen werden soll öffnen wsQuelle = wb.Sheets("Januar") wsZiel = wb.Sheets("Februar") wsZiel.Cells(1, 1).value2 = wsQuelle.Cells(1, 1).value2 . . .
Grüße
Roland
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Montag, 28. Mai 2018 05:50
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Dienstag, 5. Juni 2018 13:23
Alle Antworten
-
Hallo bostic,
so sollte es funktionieren:
Dim xlsApp As Microsoft.Office.Interop.Excel.Application = CreateObject("Excel.Application") Dim wsQuelle As Microsoft.Office.Interop.Excel.Worksheet Dim wsZiel As Microsoft.Office.Interop.Excel.Worksheet Dim wb As Microsoft.Office.Interop.Excel.Workbook wb = xlsApp.Workbooks.Open("M:\Test\Jahr.xlsx") ' File aus dem gelesen werden soll öffnen wsQuelle = wb.Sheets("Januar") wsZiel = wb.Sheets("Februar") wsZiel.Cells(1, 1) = wsQuelle.Cells(1, 1) . . . .
Ich verwende hier übrigens die frühe Bindung, d.h. Du musst vorher die Verweise auf Excel im Visual-Studio eintragen.
Grüße
Roland
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Montag, 28. Mai 2018 05:49
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Dienstag, 5. Juni 2018 13:22
-
Hallo Roland
Erstmal Danke für Deinen Vorschlag, leider bkomme ich Fehlermeldungen.
Ich habe UP_1() einfach mal weggelassen und habe Deinen Code eingetragen.
Als Fehlermeldung bekomme ich für alle 4 DIM Anweisungen folgende Fehlermeldung:
Der Typ "Microsoft.Office.Interop.Excel.Worksheet" ist nicht definiert.
Vieleicht könntest Du nochmal drüberschauen woran es liegen könnte.
Gruss bostic
Hobby Programmierer aus Butzbach, Hessen
-
Hi,
im Betreff der Frage schreibst Du von VBA. Das Forum betrifft aber Fragen zu VB.NET. VBA nutzt VB6 als Sprach-Version.Die Antwort von Roland bezieht sich auf VB.NET, nicht auf VBA. Damit das in VB.NET funktioniert, muss natürlich auf die Excel-PIA referenziert werden. Das kannst Du im Visual Studio 2017 über rechte Maustaste über dem markierten Objekt -> Add -> Reference -> Com -> Microsoft Excel 16.0 Object Library machen. Da wird die PIA-dll automatisch generiert und referenziert. In der Code kannst Du dann Imports für den Excel-Namensraum nutzen.
--
Viele Grüsse
Peter Fleischer (ehem. MVP)
Meine Homepage mit Tipps und Tricks- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Montag, 28. Mai 2018 05:49
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Dienstag, 5. Juni 2018 13:23
-
Hallo bostic,
wie Peter schon geschrieben hat ist mein Antwortbeispiel natürlich in VB.NET, das habe ich so gewählt weil Dein Codeauschnitt ja ebenfalls in VB.NET geschrieben war.
Falls Du lieber nicht die frühe Bindung wie in Deinem Beispiel verwenden willst (weshalb auch immer) kannst Du über die späte Bindung die Variablen auch vom Typ Object deklarieren.
Mein Beispiel sieht dann so aus:
. . . Dim xlsApp As Object = CreateObject("Excel.Application") Dim wsQuelle As Object Dim wsZiel As Object Dim wb As Object wb = xlsApp.Workbooks.Open("m:\test\Jahr.xlsx") ' File aus dem gelesen werden soll öffnen wsQuelle = wb.Sheets("Januar") wsZiel = wb.Sheets("Februar") wsZiel.Cells(1, 1).value2 = wsQuelle.Cells(1, 1).value2 . . .
Grüße
Roland
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Montag, 28. Mai 2018 05:50
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Dienstag, 5. Juni 2018 13:23
-
Hi Roland und bostic,
wichtig ist, bei später Bindung nicht das Option Strict Off vergessen!--
Viele Grüsse
Peter Fleischer (ehem. MVP)
Meine Homepage mit Tipps und Tricks