Moin, ich habe schon diverse seiten durchforstet, und nichts passendes gefunden. Ich möchte gerne bei via VBA (Visual Studio 2017/ Windows frame App(.NET Framework))) einen Zufallsgenerator erstellen, der mir aus einer langen Liste (erstellt bei Excel) zufällige werte ausgibt. Kann ich die Datei anhängen, und VBA drauf zugreifen lassen oder die Zellen in den code schnell Kopieren? (Es sind mehrer Hundert Wörter)
VBA ist normalerweise Visual Basic Code innerhalb des Offices-Paketes. Visual Studio unterstützt Visual Basic. Es ist ziemlich unklar, was Du eigentlich willst. Was genau sind "mehrere hundert Wörter"?
Ja, Zufaelliges auswaehlen geht. irgendwas mit Random().. schau mal ins Sprachmanual
Ich habe einige Listen mit ziemlich vielen Begriffen, wie zum beispiel:
Tisch
Stuhl
Tür
Schrank
Computer
etc.
und er soll mir daraus in einem Label einen zufälligen (bzw. mehrer
begriffe aus mehrern tabellen) anzeigen.
Hab sowas gefunden, aber ich habe nicht nur 5 oder 20 begriffe sondern
über 10 Tausend, alle in excel tabellen:
Public Class Form1
Private Const Words() As String = { "Baum", "Hund", "Katze", "Haus" }
'dies ist mega umständlich
Private Rndm As New Random
Public Function GetRandomWord()
Return Rndm.Next(0, Words.Length)
End Function
Public Sub Button1_Click(ByVal Sender As Object, ByVal e As EventArgs)
Handles Button1.Click
TextBox1.Text = GetRandomWord()
End Sub
End Class
Skippy schrieb: > Hab sowas gefunden, aber ich habe nicht nur 5 oder 20 begriffe sondern > über 10 Tausend, alle in excel tabellen: Ist dort wo das Programm laufen soll Excel installiert? Falls ja: https://docs.microsoft.com/de-de/dotnet/csharp/programming-guide/interop/how-to-access-office-onterop-objects Falls nein: https://github.com/OfficeDev/Open-XML-SDK Ansonsten: Daten in Excel als CSV exportieren und z.B. https://msdn.microsoft.com/en-us/library/microsoft.visualbasic.fileio.textfieldparser.aspx benutzen und einlesen
Ja excel ist installiert
hab jetzt das in meinem code:
Imports Microsoft.Office.Interop
Public Class Form1
Private Structure ExcelRows
Dim C1 As String
Dim C2 As String
Dim C3 As String
Dim C4 As String
Dim C5 As String
Dim C6 As String
Dim C7 As String
Dim C8 As String
Dim C9 As String
End Structure
Private ExcelRowList As List(Of ExcelRows) = New List(Of ExcelRows)
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles
Button1.Click
Me.OpenFileDialog1.FileName = Nothing
If Me.OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK
Then
Me.TextBox1.Text = Me.OpenFileDialog1.FileName
End If
If getinfo() = True Then
For Each xitem In ExcelRowList
Dim lvitem As ListViewItem
lvitem = Me.ListView1.Items.Add(xitem.C1)
lvitem.SubItems.AddRange(New String() {xitem.C2,
xitem.C3, xitem.C4, xitem.C5, xitem.C6, xitem.C7, xitem.C8, xitem.C9})
Next
End If
End Sub
Private Function getinfo() As Boolean
Dim completet As Boolean = False
Dim myexcel As New Excel.Application
myexcel.Workbooks.Open(Me.TextBox1.Text)
myexcel.Sheets("sheet1").activate()
myexcel.Range("A2").Activate()
Dim thisrow As New ExcelRows
Do
If myexcel.ActiveCell.Value > Nothing Or
myexcel.ActiveCell.Text > Nothing Then
thisrow.C1 = myexcel.ActiveCell.Value
myexcel.ActiveCell.Offset(0, 1).Activate()
thisrow.C2 = myexcel.ActiveCell.Value
myexcel.ActiveCell.Offset(0, 1).Activate()
thisrow.C3 = myexcel.ActiveCell.Value
myexcel.ActiveCell.Offset(0, 1).Activate()
thisrow.C4 = myexcel.ActiveCell.Value
myexcel.ActiveCell.Offset(0, 1).Activate()
thisrow.C5 = myexcel.ActiveCell.Value
myexcel.ActiveCell.Offset(0, 1).Activate()
thisrow.C6 = myexcel.ActiveCell.Value
myexcel.ActiveCell.Offset(0, 1).Activate()
thisrow.C7 = myexcel.ActiveCell.Value
myexcel.ActiveCell.Offset(0, 1).Activate()
thisrow.C8 = myexcel.ActiveCell.Value
myexcel.ActiveCell.Offset(0, 1).Activate()
thisrow.C9 = myexcel.ActiveCell.Value()
ExcelRowList.Add(thisrow)
myexcel.ActiveCell.Offset(1, -8).Activate()
Else
completet = True
Exit Do
End If
Loop
myexcel.Workbooks.Close()
myexcel = Nothing
Return completet
End Function
End Class
Dabei läd er mir die tabellen in eine ListView. kann diese verdeckt laufen lassen, und mir auf einer anderen seite mit einer massagebox oder label ein bestimmte zeile anzeigen lassen?
Möchtest Du in Visual Basic 2017 Deine Wortliste benutzen, die in einer Exceldatei steckt?
Peter M. schrieb: > Möchtest Du in Visual Basic 2017 Deine Wortliste benutzen, die in > einer > Exceldatei steckt? Ja, ich möchte, dass er mir auf knopfdruck je ein wort aus jeder spalte anzeigt und zusammenbaut
Die gesammte tabelle soll nicht angezeigtg werden, sondern nur die zufällige auswahl
das ist zum beispiel eine kleine tabelle, die ich zum test angelegt habe
Lösungsvorschlag: Die Wortliste in Excel per VBA-Prozedur in eine Datei wegschreiben. Die Exceldatei kann dann entfallen. In VB2017 die Wortliste in eine Collection einlesen. Die Zufallswortfunktion eine ganze Zufallszahl x von 1 bis (Länge der Collection) erzeugen lassen und dann das zugehörige wort(x) zurückgeben. Zu Beginn Deines VB-Programms müsstest Du nur die Namensliste einmal in die Collection einlesen.
Skippy schrieb: > Das klingt recht gut, was für eine Datei meinst du? Bei dem Vorgang entsteht eine Textdatei, die Du auch mit einem Editor betrachten kannst. Skippy schrieb: > Könntest du vlt einen kleinen beispiel code schicken? Schau Dir die VBA-Hilfe zu dem Wort "Print #-Anweisung" an. Vorsicht, die VBA-Hilfe ist die Hilfe im VBA-Editor und nicht die in Excel auf den Tabellenblättern. Da gibt es auch ein Stück Beispielcode. Mit Hilfe dieses Befehls schreibst Du Deine Daten Stück für Stück sequentiell weg. Du musst lediglich den Inhalt Deiner Excel-Tabelle(n) komplett durchlaufen. In VB ist es noch einfacher, da musst Du nur die Wörter Stück für Stück einlesen.
> Schau Dir die VBA-Hilfe zu dem Wort "Print #-Anweisung" an. > Vorsicht, die VBA-Hilfe ist die Hilfe im VBA-Editor und nicht die in > Excel auf den Tabellenblättern. > Da gibt es auch ein Stück Beispielcode. ok, danke, werde ich mir nachher mal anschauen.
Peter M. schrieb > In VB ist es noch einfacher, da musst Du nur die Wörter Stück für Stück > einlesen. Wo einlesen?
Willst Du jetzt das ganze in Excel (VBA) machen oder doch in .NET (VB oder C#)? Laut Deinem Code oben willst Du das in .NET machen... Außerdem liest du scheinbar alle Zellen aus Excel zeilenweise aus und pumpst die dann hintereinander in eine Sammlung ( lvitem.SubItems.AddRange()...) Dann sind die ja erstmal durcheinander... soll das so sein?
Skippy schrieb: > Peter M. schrieb > >> In VB ist es noch einfacher, da musst Du nur die Wörter Stück für Stück >> einlesen. > > Wo einlesen? In die Collection. Dein Problem besteht doch darin, Deine Wörtersammlung aus der Exceldatei Deiner Zufallsroutine in VB2017 verfügbar zu machen.
Mein Plan ist: Ich möchte Verschiedene Button machen, wo sich verschiedene Fenster mit den jeweiligen Themen öffnet. dann klickt man auf einen knopf "berechnen", der einem dann jeder spalte einer tabelle einen wert zufällig raussucht und hintereinander anzeigt. Wie zum beispiel in der "schmiede" tabelle, dass er "Spezialist - Heimatschmiede - Wurfwaffen - 3 - groß - Hochwertig - reichlich" anzeigt. und wenn man nochmal auf "berechnen" klickt, dass er dann eine neue auswahl zusammenstellt. ich habe die Listen mit den Verschiedenen Themen (unter spalten unterteilungen) bereichen als einzelne Excel tabellen Mit welchem Programm das geschieht ist mir relativ egal, da vorher fast keine programmier erfahrungen habe, und mir durch diverse Toturials und Internet seiten versucht habe in die Thematik reinzukommen
Skippy schrieb: > Mein Plan ist: > > Ich möchte Verschiedene Button machen, wo sich verschiedene Fenster mit > den jeweiligen Themen öffnet. dann klickt man auf einen knopf > "berechnen", der einem dann jeder spalte einer tabelle einen wert > zufällig raussucht und hintereinander anzeigt. Wie zum beispiel in der > "schmiede" tabelle, dass er "Spezialist - Heimatschmiede - Wurfwaffen - > 3 - groß - Hochwertig - reichlich" anzeigt. und wenn man nochmal auf > "berechnen" klickt, dass er dann eine neue auswahl zusammenstellt. > ich habe die Listen mit den Verschiedenen Themen (unter spalten > unterteilungen) bereichen als einzelne Excel tabellen Verstanden! > Mit welchem Programm das geschieht ist mir relativ egal, da vorher fast > keine programmier erfahrungen habe, und mir durch diverse Toturials und > Internet seiten versucht habe in die Thematik reinzukommen Dann kannst Du das Problem innerhalb von Excel lösen, und zwar mit der "Visual Basic"-Variante, die in jedem aktuellen Excel drinsteckt: Visual Basic for Applications (VBA) => bei Internetrecherchen drauf achten, weil in VBA nicht alles aus der reinen Programmiersprache VB machbar ist. Dein Problem ist simpel, für einen Anfänger ist es aber schon eine ordentliche Aufgabe. Schau' Dir mal an, was eine Prozedur ist wie man eine Zufallszahl zwischen 1 und n generiert, wie der Befehl MSGBOX funktioniert, wie man auf den Inhalt einer Zelle aus VBA zugreift, wie man Zeichenketten verknüpft, wie man Schleifen programmiert.
Oder anders herum... Neues VB-Projekt im Studio. Per Designer eine LocalDB erstellen. Daten aus Excel importieren so wie hier: https://msdn.microsoft.com/de-de/library/cc464080%28v=vs.71%29.aspx Naja... und dann irgendwas mit den daten machen. Somit wäre die ganze sache auch speicher und ladbar...
Wolfgang H. schrieb: > Oder anders herum... > Neues VB-Projekt im Studio. Per Designer eine LocalDB erstellen. Daten > aus Excel importieren so wie hier: > https://msdn.microsoft.com/de-de/library/cc464080%... > > Naja... und dann irgendwas mit den daten machen. Somit wäre die ganze > sache auch speicher und ladbar... Nach sowas habe ich gesucht, danke. Ich dachte VBA würde für VB stehen... deswegen kam mir das zwischendurch komisch vor ? Aus einem dataset kann man ja recht einfach einen zufälligen wert anzeigen lassen.
ja werde nachher mal ein bisschen probieren, wie würde hier das dataset
heissen, bzw. wie kann ich da wieder drauf zu greifen?
Dim DS As System.Data.DataSet
Dim MyCommand As System.Data.OleDb.OleDbDataAdapter
Dim MyConnection As System.Data.OleDb.OleDbConnection
MyConnection = New System.Data.OleDb.OleDbConnection( _
"provider=Microsoft.Jet.OLEDB.4.0; " & _
"data source=C:\myData.XLS; " & _
"Extended Properties=Excel 8.0;")
' Select the data from Sheet1 of the workbook.
MyCommand = New System.Data.OleDb.OleDbDataAdapter( _
"select * from [Sheet1$]", MyConnection)
DS = New System.Data.DataSet()
MyCommand.Fill(DS)
MyConnection.Close()
das ist das beispiel von der msn seite
Achja... Und wenn du schon dabei bist dann lern es gleich richtig so wir hier erklärt: http://www.vb-paradise.de/index.php/Thread/94955-die-vier-Views-auf-Video/
Wolfgang H. schrieb: > Achja... Und wenn du schon dabei bist dann lern es gleich richtig > so wir hier erklärt: > http://www.vb-paradise.de/index.php/Thread/94955-d... Das hatte ich auch vor, wollte schon lange wissen wie es geht, habe nur nie einen anreiz gefunden mir sowas anzuschauen
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.