Visual Basic 2010

  • VB.NET

Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von Schamash.

    Visual Basic 2010

    Hallo Leute,
    ich bin neu hier und hoffe zum einen das ich hier richtig bin und zum anderen natürlich das mir jemand von euch helfen kann?!
    gleich zu anfang möchte ich noch sagen das ich absoluter neuling in sachen Visual Basic 2010 bin.

    Zu meinem Problem,

    Ich möchte über ein kleines Programm was ich mir gebastelt habe auf ein Excel blatt eine Bestimmte Zelle bearbeiten bzw. Füllen.

    Ich habe im Internet schon einiges gelesen und auch dabei etwas gelernt, ich kann nun daten von dem besagten Blatt auslesen und ich kann auch daten schreiben allerdings nicht in eine von mir gewählte Zelle sondern immer nur von A1 in richtung b,c,d . außerdem schreibt mir mein Programm wenn ich es öfter aufrufe auch sauber von oben nach unten.
    AAAAAAber ich will ja einen Text aus einer TextBox in eine Bestimmte Zelle schreiben zb G12.
    Vielleicht ist es für euch sehr sehr einfach und ich habe mich da in den letzten drei tagen einfach nur festgefahren aber ich bin mit meinen Nerven fast am ende. ?(


    Verschoben nach Datenbankprogrammierung
    -Artentus

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

    ok danke erstmahl ich schau mal nach ob ich dadurch schlauer werde
    ich zeige dann auch mahl mein code den ich entsprechend ändern möchte
    Vielleicht hat ja jemand eine Idee befor ich schlauer geworden bin.

    Imports System.Data.OleDb
    Public Class Form1

    Dim cn As New OleDbConnection
    Dim cm As New OleDbCommand


    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load

    End Sub

    Private Sub BSave_Click(sender As System.Object, e As System.EventArgs) Handles BSave.Click
    cn.ConnectionString = "provider=microsoft.jet.oledb.4.0;data source = C:\Conect to Exel\Agen.xls;extended properties =excel 8.0;"
    cn.Open()
    With cm
    .Connection = cn
    .CommandText = "insert into [Data Agen$] values('" & TBID.Text & "','" & TBName.Text & "')"
    .ExecuteNonQuery()
    End With
    cn.Close()
    MsgBox("erfolgreich")
    End Sub

    Private Sub BClose_Click(sender As System.Object, e As System.EventArgs) Handles BClose.Click

    End Sub
    End Class
    danke an Rainman,
    ich wünschte ich könnte sagen ich habe es hin bekommen, leider bin ich aber kein Stück weiter.
    ich habe zwar einiges gefunden jadoch passt das alles nicht mit meinem Code zusammen und ich habe auch nicht genug informationen gefunden um einen anderen Code zu verstehen.
    Ich habe ja auch scho sehr viel ausprobiert und ich bin mir sicher ich muss es in "CommandText" irgendwie und irgendwo festlegen wo die Informationen hin geschrieben werden sollen.
    Vielleicht kann mir noch jemand Helfen?!
    Du sprichst Excel wie eine Datenbank an.
    Du hast also keine Zellstruktur, sondern eine DB-Tabelle
    In einer Datenbank würdest du eine bestimmte Zelle auch ändern per Update-Befehl

    SQL-Abfrage

    1. UPDATE table Set field=value WHERE ...

    Lade dir die Excel-Tabelle mal in eine DataTable, dann siehst du am besten, wie dein UPDATE-Befehl aussehen müsste

    Verwende am besten nicht den Jet-Provider, falls du Excel 2007 oder neuer verwendest

    Visual Basic-Quellcode

    1. cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Conect to Exel\Agen.xls;Extended Properties=""Excel 12.0 Xml;HDR=YES"";"

    Hat deine Tabelle Spaltenköpfe?

    Wenn du die Zellen nach Excel-Syntax adressieren willst, musst du sie auch über Excel ansprechen

    Visual Basic-Quellcode

    1. Dim Excel As New Microsoft.Office.Interop.Excel.Application
    2. Dim wb = Excel.Workbooks.Open("C:\Conect to Exel\Agen.xls")
    3. wb.Sheets("Data Agen").Range("A25").Value = 12345
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    @petaod Vielen dank und oooohhhhh man,
    ich hatte gehoft jemand sagt mir ich muss einen Punkt an einer Stelle machen und dann geht's und dann kommt das ;)

    Die Aufgabe die am ende bewergstelligt werden soll ist folgende:
    der Rechner auf dem es später laufen soll hat kein Excel sondern Libre Open office,
    das Datenblatt (die Tabelle) ist über Open office als .xls gespeichert. ich möchte nun das sich jemand über seinen Acound in das Programm anmeldet und schritt für schritt seine Daten in erscheinende Textboxen eingibt, und die Daten sollen dann in den Rechnungsbogen sprich dem .xls blatt an die Entsprechenden Stellen eingetragen werden.

    Vielleicht sehe ich dass falsch aber wenn ich das mit demExcel Syntax mache benötige ich dann nicht Excel auf meinem Rechner?
    ich habe versucht Ecxel zu importieren aber nach "Import Microsoft. " kommt schon keine Office mehr, oder muss ich die Irgendwo in Visual Basic nachistallieren?

    Park Martin schrieb:

    wenn ich das mit demExcel Syntax mache benötige ich dann nicht Excel auf meinem Rechner?
    Doch.
    Auf Rechnern ohne installiertes Excel geht das nicht.

    Park Martin schrieb:

    ich habe versucht Ecxel zu importieren aber nach "Import Microsoft. " kommt schon keine Office mehr
    Du musst die entsprechende DLL zu deinen Verweisen hinzufügen.
    Aber wegen obigem Einwand geht das ja eh nicht.

    Wenn's nur um Datenaustausch geht, kannst du dir auch überlegen, ob du mit dem CSV-Format arbeiten kannst.
    Ansonsten mit ExcelWriter.
    Oder so ein Ansatz: codeproject.com/Articles/33850…out-using-Microsoft-Excel
    Es gibt bestimmt noch massenhaft weitere Tools.

    Oder du bleibst bei deinem DB-Ansatz und fängst mit dem an, was ich oben vorschlug:

    petaod schrieb:

    Lade dir die Excel-Tabelle mal in eine DataTable, dann siehst du am besten, wie dein UPDATE-Befehl aussehen müsste
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    also wenns dir möglich ist, das Datenformat selbst zu bestimmen, verabschiede dich von Excel oder OpenOffice-Worksheet-Programm.
    Worksheet-Programme sind keine Datenbanken, und wenn du eine Datenbank-artige Anwendung entwickeln willst, dann baus von Grund auf richtig auf.
    Datenbank-Funktionalität auf Excel-Dateien draufsetzen zu wollen ist immer Krampf, und häufig genug gehts auch gar nicht.

    Alternativ könntest du gucken, ob dieses OpenOffice-Dingens nicht auch eine eigene Makro-Sprache mit Formularen und Pipapo hat - so wie Excel.
    Das wird immer noch leichter zu erlernen sein als Vb.Net, und ist v.a. auch stabiler als der Vb.net-Excel-CrossOver.
    der grund warum ich versuche das mit Visual Basic zu machen ist das ich nach und nach ein Umfangreiches Programm geschrieben habe womit ich einiges auf einem Blick habe was ich vorher über verschiedene Windows Anwendungen gemacht habe, daher hätte ich mich sehr gefreut wenn ich auch das letzte noch externe mit in mein Programm integrieren könnte.
    Es währe mir auch möglich den Vordruck in eine Tabelle direckt in Visual Basic nach zu bauen allerdings bin ich erst jetzt darauf gekommen und versuche raus zu bekommen ob und wie ich , wenn die Tabelle gefüllt wurde, dies auch Ausdrucken kann.

    Ich danke allen die mir so viel Informationen gegeben haben, ich denke mitlerweile ich gerade versuche den 8. schritt vor dem 5. zu machen. Das Problem ist das mich ziemlich schnell das Fiber gepackt, hat und aus ursprünglich nur ein wenig rumprobieren jetzt ein echter zwang geworden ist.
    Ich werde mir jetzt zuerst alle Ratschläge durch den Kopf gehen lassen und damit etwas rumprobieren. Wie sagt man so schön learning by doing
    Also wie gesagt: Für eine "reine" Lösung ohne CrossOver bringt das Framework enorm mächtige Unterstützung, allerdings ist auch ein Riesen-Batzen zu lernen.
    Mit Learning by Doing fällst du auf die Nase, denn ganz wesentliche Konzepte sind völlig genial, aber nicht auf den ersten Blick erkenntlich.
    Es ist ganz ausgeschlossen, dass man mit Learning by Doing überhaupt damit in Berührung kommt, sondern ein LbD-Progger wurstelt drauflos, und kommt erst nach vlt. 1000 Zeilen Code zur Besinnung, wenn er in den Sackgassen, die er sich geschaffen hat, ans Ende gekommen ist.
    Und dann ists extrem schwierig, diesen Leuten nahezubringen, dass sie ihre 1000 Zeilen in die Tonne, und komplett neu anfangen, diesmal unter Berücksichtigung zB. des allgemeinen Datentyp-Konzeptes, und mit Einsatz von Datenmodellierung, typisiertem Dataset, Databinding.
    Ich hab hier mal aufgeschrieben, was man eiglich alles braucht, um eine brauchbare Datenverarbeitung zu produzieren: Datenverarbeitungs-Vorraussetzungen
    Beachte, dass man zwar relational konzipieren können muss, aber der tatsächliche Einsatz einer relationalen Datenbank ist meist nicht nötig, und wenn doch, lässt sich dieses Problem am besten abgetrennt und ganz als letztes lösen.
    Noch ein Ansatz:
    Oben beschreibst du, dass es dir gelingt, bestimmte Zellen zu füllen, nur die Adressierung irgendwo im Sheet kriegst du nicht hin.

    Fülle die Daten in ein gesondertes Sheet und im Hauptsheet trägst du einen Link auf diese Parameterzellen ein.
    Ist eine Quick&Dirty-Lösung, aber wenn du Zeitdruck hast oder nicht weiter kommst...
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Ich habe es nach langem hin und her probieren nun entlich geschafft das ich das machen kann was ich möchte.
    Der Fehler lag bereits im Ansatz den ich habe versuch das mit dem CommandText Insert into zu machen dabei ist es mit CommandText update eigentlich ziemlich einfach.
    Aber wie soll es auch anders sein, nun wo ich es hin getüftelt habe die Zellen mit Informationen zu füllen wo ich möchte gibt es natürlich das nächste Problem.
    Ich kann die Zellen zwar füllen und beim erneuten Aufruf des Programms die beschriebenden Zellen Überschreiben, aber leider stecke ich fest bei dem Gedanken mit nur einem Butten, den Inhalt einer Gruppe von Zellen die nicht zwangsläufig zusammen hängen zu löschen.
    Ich könnte mir natürlich den Weg vorstellen die Entsprechenden Zellen auszuwählun und mit nichts zu füllen, was auch gut funktionier wenn es sich um eine Zelle Handelt aber ich habe ein Problemm in dem Command Text eine Kette von Zellen einzubauen. Ich habe natürlich schon an den Verschiedensten Stellen gesucht aber irgend wie funktionieren die sachen bei mir nicht.
    Vielleicht kann sich jemand meinen Code anschauen und mir sagen wie ich den Code abendern muss


    Imports System.Data.OleDb


    Public Class MP_Büro

    Dim cn As New OleDbConnection
    Dim cm As New OleDbCommand
    Dim da As OleDbDataAdapter
    Dim dt As New DataTable

    Private Sub MP_Büro_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    cn.ConnectionString = "provider= Microsoft.jet.oledb.4.0; Data Source=C:\Conect to Exel\Test.xls;Extended properties=Excel 8.0;"
    cn.Open()

    End Sub

    Private Sub BRechnung_schreiben_Click(sender As System.Object, e As System.EventArgs) Handles BRechnung_schreiben.Click

    Try
    With cm
    .Connection = cn
    .CommandText = "update [Test$] set [SB]='',[SC]='',[SD]='' where Id= 16"
    .Parameters.Clear()
    .ExecuteNonQuery()
    End With
    Catch ex As Exception
    Return
    End Try


    Close()


    End Sub


    Mit diesem Code kann ich mehrere Zellen die in der selben Zeile stehen löschen aber eben keine die wo anders auf dem Blatt stehen
    vielleicht hat jemand eine Idee?!

    Park Martin schrieb:

    ich habe ein Problemm in dem Command Text eine Kette von Zellen einzubauen
    Natürlich musst du im SQL-Befehl jede einzelne Spalte ansprechen.

    SQL-Abfrage

    1. UPDATE [Test$] SET [SB]='',[SC]='',[SD]='' WHERE Id=16 OR Id=28
    Du kannst höchstens die Zeile gruppieren.

    SQL-Abfrage

    1. UPDATE [Test$] SET [SB]='',[SC]='',[SD]='' WHERE Id BETWEEN 52 AND 64
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Vielen dank petaod
    ich habe es gerade ausprobiert und es funktioniert Super!
    ich habe so viel gelesen und versucht aber ''Where Id=16 Or'' oder ''Wehre Id Between '' da habe ich nichts der Gleichen gelesen.
    Ich danke dir noch einmahl !!
    @p@'Park Martin'

    Dann interessiert die bestimmt W3Schools-SQL
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."