kostenloser Webspace werbefrei: lima-city


VB2010 - Werte in Excel speichern und lesen?

lima-cityForumProgrammiersprachenBasic

  1. Autor dieses Themas

    philip-felder

    philip-felder hat kostenlosen Webspace.

    Hallo,

    habe in Visual Basic einen Button und eine Combo Box.

    Geht das, wenn ich auf dem Button1 drücke, soll der Text, der in der Combobox1 steht, in der Zelle A1 geschrieben wird und das was in A2 steht soll in ein Label anzeigt werden?

    Vielen Dank
    Philip
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. burgi

    Co-Admin Kostenloser Webspace von burgi

    burgi hat kostenlosen Webspace.

    Grundsätzlich ist das, was du vorhast, kein Problem:
    http://burgi.lima-city.de/forum/dingenskirchen.xls
    Das einzige Problem ist, dass du den Text des Bezeichnungsfeldes offensichtlich nicht ändern kannst, oder nur ich nicht :tongue:
    Ich finde dazu nicht die passende Eigenschaft, die nicht nur ReadOnly ist ...
    In User-Formularen spricht man diese Eigenschaft mit .Caption an
  4. Autor dieses Themas

    philip-felder

    philip-felder hat kostenlosen Webspace.

    @burgi Danke schon mal für deine Antwort, aber ich meinte die Buttons und die Combobox sind in eine Form1 (wenn man das so nennt.)
  5. burgi

    Co-Admin Kostenloser Webspace von burgi

    burgi hat kostenlosen Webspace.

    Um dir helfen zu können, wäre es interessant:
    - versuchst du von "außerhalb Excel" auf Excel zuzugreifen
    oder
    - hast du über die Entwicklertools eine "Userform" in Excel direkt angelegt?
  6. Autor dieses Themas

    philip-felder

    philip-felder hat kostenlosen Webspace.

    also ich habe eine excel tabelle ungefähr so:

    A B C D E
    Hier soll das programm immer wenn ich auf dem button drücke etwas "speichern" und beim nächsten mal eine neue spalte zum speichern benutzen. Also so:

    A B C D E
    1 das erste drücken
    2 das zweite drücken
    3 das dritte drücken


    ist das so möglich?
  7. burgi

    Co-Admin Kostenloser Webspace von burgi

    burgi hat kostenlosen Webspace.

    Sorry, wenn ich nochmal nachfrage:
    du hast eine Excel-Tabelle, in der du ein Formular hast, dort trägst du Werte ein, und immer, wenn du die Schaltfläche drückst, sollen in der Tabelle ganz unten die Werte angefügt werden. Sehe ich das richtig?
    Ich werde nämlich aus deinen Erklärungen noch nicht so richtig schlau ;-)
    Programmierst du jetzt mit VBA direkt in Excel, oder mit Visual Studio / Visual Basic?

    Edit: meinst du das so?
    http://burgi.lima-city.de/forum/anderes-dinges.xls

    Beitrag zuletzt geändert: 19.4.2011 23:18:47 von burgi
  8. Autor dieses Themas

    philip-felder

    philip-felder hat kostenlosen Webspace.

    das Formular ist in der Form1, siehe bilder

    http://s1.directupload.net/file/d/2499/j6qxhtlu_jpg.htm

    und

    http://s7.directupload.net/file/d/2499/cd8bqcpg_jpg.htm

    Vielen Dank schonmal
    Philip

    Edit:

    Edit: meinst du das so?
    http://burgi.lima-city.de/forum/anderes-dinges.xls


    Nein, siehe oben, könntes du mir zeigen wie du das gemacht hast, das meinte ich zwar nicht aber mich interessiert das schon.

    Beitrag zuletzt geändert: 19.4.2011 23:27:55 von philip-felder
  9. burgi

    Co-Admin Kostenloser Webspace von burgi

    burgi hat kostenlosen Webspace.

    Ich verstehe jetzt, was du willst :blah:
    Du willst aus Visual Basic mittels OLE-Automation Daten in Excel schreiben und dann speichern. Da ich kein VB installiert habe, schon gar nicht das 2010er, kann ich dir hier leider nicht weiterhelfen.
    Du solltest dich hiermit beschäftigen: http://www.exceltip.com/st/Basic_information_about_OLE_automation_using_VBA_in_Microsoft_Excel/462.html
    Es gibt noch wesenlich mehr hilfreiche Suchergebnisse bei Google, wenn man weiß, wonach man suchen muss ;-)
    Du kannst trotzdem den Code aus den Makros aus der letzten Excel-Datei anschauen, so oder so ähnlich wird das auch aus VB 2010 heraus funktionieren.
    Ich bin mir sicher, dass sich jemand hier im Forum finden wird, der dir weiterhelfen kann :thumb:
  10. Autor dieses Themas

    philip-felder

    philip-felder hat kostenlosen Webspace.

    Habe jetzt beschloßen es über excel zu machen (wie burgi es meinte) ....

    habe aber noch eine frage:

    kann man 4 zahlen der größe ordnen und die größte zahl bekommt eine 1 und die danach eine 2 dann 3 bis 4?


    Vielen Dank
    Philip
  11. burgi

    Co-Admin Kostenloser Webspace von burgi

    burgi hat kostenlosen Webspace.

    Wenn du das nun in Excel machst, und die in die Tabelle geschriebenen Werte sortieren willst, kannst du (da du ja den Zeilenindex für das hinschreibend er Daten hast) eine Selection (also eine Markierung) anlegen, und dann die Daten von Excel selbst sortieren lassen, so als würdest du selbst in der Menüleiste rumklicken. Am Einfachsten machst du das, indem du ein Makro aufzeichnest, und nur den Aufruf für die Markierung modifizierst :thumb:
  12. Hallo philip-felder,

    wenn die Zahlen in der Tabelle stehen, dann kannst Du sie mit der Range.Sort() Methode sortieren:
    Beispiel:
    Sub test()
    Dim wb As Excel.Workbook
    Dim ws As Excel.Worksheet
    Dim rg As Excel.Range
    Dim i As Long
    
    Set wb = ActiveWorkbook
    Set ws = wb.Worksheets("Tabelle1")
    
    ' Erzeuge ein Range-Objekt für den zu sortierenden Bereich.
    ' Hier ist es der Bereich B1 bis einschließlich B4.
    Set rg = Range(ws.Cells(1, 2), ws.Cells(4, 2))
    
    ' Sortieren:
    rg.Sort ws.Cells(1, 2)
    
    ' Schreibe die Zahlen 1 bis 4 in Spalte A
    For i = 1 To 4
        ws.Cells(i, 1).Value = i
    Next
    End Sub
  13. Autor dieses Themas

    philip-felder

    philip-felder hat kostenlosen Webspace.

    Die Werte stehen nicht in der Tabelle.

    Also: Ich habe in einem UserForm 4 Textboxen und natürlich auch nen Button zu abschicken, so solles dann aussehen:

    ......................................A ...............................................................................................B

    1 Die Zahl die in der Textbox steht (z.B. 1234).................. Hier soll der Platz stehen (z.B. 1)

    2 Die Zahl die in der Textbox steht (z.B. 1233)..................Hier soll der Platz stehen (z.B. 2)

    3 Die Zahl die in der Textbox steht (z.B. 121) ....................Hier soll der Platz stehen (z.B. 4)

    4 Die Zahl die in der Textbox steht (z.B. 133)...................... Hier soll der Platz stehen (z.B. 3)


    Ist das so möglich?

    Edit:

    (Punkte = Platzhalter)

    Beitrag zuletzt geändert: 22.4.2011 22:58:29 von philip-felder
  14. Hallo philip-felder,

    mit ein bisschen Tricksen ist das ganz einfach. Ich bin jetzt mal davon ausgegangen, dass die Textfelder txtNumber1bis txtNumber4 heißen.
    Private Sub btnRun_Click()
    Dim wb As Excel.Workbook
    Dim ws As Excel.Worksheet
    Dim rg As Excel.Range
    Dim i As Long
    
    Set wb = ActiveWorkbook
    Set ws = wb.Worksheets("Tabelle1")
    
    ' Kopiere die Werte in Spalte A
    ws.Cells(1, 1).Value = txtNumber1.Value
    ws.Cells(2, 1).Value = txtNumber2.Value
    ws.Cells(3, 1).Value = txtNumber3.Value
    ws.Cells(4, 1).Value = txtNumber4.Value
    
    ' Schreibe die Zahlen 1 bis 4 in Spalte C
    For i = 1 To 4
        ws.Cells(i, 3).Value = i
    Next
    
    ' Erzeuge ein Range-Objekt für den zu sortierenden Bereich.
    ' Hier ist es der Bereich A1 bis einschließlich C4.
    Set rg = Range(ws.Cells(1, 1), ws.Cells(4, 3))
    
    ' Sortieren nach den Zahlen:
    rg.Sort ws.Cells(1, 1)
    
    ' Schreibe die Zahlen 1 bis 4 in Spalte B:
    For i = 1 To 4
        ws.Cells(i, 2).Value = i
    Next
    
    ' Sortieren nach der ursprünglichen Reihenfolge:
    rg.Sort ws.Cells(1, 3)
    
    ' Lösche die Positionsangaben in Spalte C:
    For i = 1 To 4
        ws.Cells(i, 3).Value = Empty
    Next
    
    End Sub

  15. Autor dieses Themas

    philip-felder

    philip-felder hat kostenlosen Webspace.

    @darkpandemic

    Danke, geht das auch die größte Zahl bekommt ne 1?

    Oder geht das dann auch horizontal?

    Philip ;->

    Beitrag zuletzt geändert: 22.4.2011 23:25:52 von philip-felder
  16. Hallo philip-felder,

    wenn die Nummerierung umgekehrt sein soll, dann kannst Du entweder die Nummerierungsschleife ändern:
    ' Schreibe die Zahlen 1 bis 4 in Spalte B:
    For i = 1 To 4
        ws.Cells(i, 2).Value = 5 - i
    Next
    Oder Du sortierst absteigend:
    ' Sortieren nach den Zahlen:
    rg.Sort ws.Cells(1, 1), Order1:=xlDescending
    Wenn anstelle der Zeilen die Spalten sortiert werden sollen, dann kannst Du das fogendermaßen angeben:
    rg.Sort ws.Cells(1, 1), Orientation:=xlSortColumns




    Beitrag zuletzt geändert: 22.4.2011 23:37:15 von darkpandemic
  17. Autor dieses Themas

    philip-felder

    philip-felder hat kostenlosen Webspace.

    So klappt es ganz gut, aber es ist wichtig das texbox1 in a1 steht, textbox2 in a2, usw.

    und kann man den "Platz" von der Zahl auch in eine Variable speichern?

    Beitrag zuletzt geändert: 22.4.2011 23:48:29 von philip-felder
  18. Hallo philip-felder,

    dass in A1 der Wert aus Textbox 1 steht usw. ist dadurch gewährleistet, dass in Spalte C die ursprüngliche Position eingetragen wird und am Schluss danach sortiert wird.
    Wenn Du willst, dann kannst Du im Anschluss den Platz direkt aus der Tabelle lesen:
    Dim rank(1 To 4) As Long
    ...
    For i=1 To 4
        rank(i) = ws.Cells(i,2).value
    Next
    Dann stehen die Plätze in rank().
    Alternativ kannst Du auch alles in VBA machen:
    Option Explicit
    
    Private Type NumberDescriptor
        Number As Long
        Position As Long
        Rank As Long
    End Type
    
    Private Sub NumberDescriptor_SortByNumber(arr() As NumberDescriptor, _
      Optional ByVal start_idx As Long = -1, _
      Optional ByVal end_idx As Long = -1)
    Dim i As Long
    Dim j As Long
    Dim tmp As NumberDescriptor
    Dim pivot As NumberDescriptor
    
    If start_idx < 0 Then start_idx = LBound(arr)
    If end_idx < 0 Then end_idx = UBound(arr)
    
    i = start_idx
    j = end_idx
    pivot = arr((start_idx + end_idx) / 2)
     
    Do
        While arr(i).Number < pivot.Number
            i = i + 1
        Wend
        While arr(j).Number > pivot.Number
            j = j - 1
        Wend
    
        If i <= j Then
            tmp = arr(i)
            arr(i) = arr(j)
            arr(j) = tmp
            i = i + 1
            j = j - 1
        End If
    Loop Until i > j
    
    If start_idx < j Then
        NumberDescriptor_SortByNumber arr, start_idx, j
    End If
    
    If i < end_idx Then
        NumberDescriptor_SortByNumber arr, i, end_idx
    End If
    
    End Sub
    
    Private Sub NumberDescriptor_SortByPosition(arr() As NumberDescriptor, _
      Optional ByVal start_idx As Long = -1, _
      Optional ByVal end_idx As Long = -1)
    Dim i As Long
    Dim j As Long
    Dim tmp As NumberDescriptor
    Dim pivot As NumberDescriptor
    
    If start_idx < 0 Then start_idx = LBound(arr)
    If end_idx < 0 Then end_idx = UBound(arr)
    
    i = start_idx
    j = end_idx
    pivot = arr((start_idx + end_idx) / 2)
     
    Do
        While arr(i).Position < pivot.Position
            i = i + 1
        Wend
        While arr(j).Position > pivot.Position
            j = j - 1
        Wend
    
        If i <= j Then
            tmp = arr(i)
            arr(i) = arr(j)
            arr(j) = tmp
            i = i + 1
            j = j - 1
        End If
    Loop Until i > j
    
    If start_idx < j Then
        NumberDescriptor_SortByPosition arr, start_idx, j
    End If
    
    If i < end_idx Then
        NumberDescriptor_SortByPosition arr, i, end_idx
    End If
    
    End Sub
    
    Private Sub btnRun_Click()
    Dim wb As Excel.Workbook
    Dim ws As Excel.Worksheet
    Dim rg As Excel.Range
    Dim i As Long
    Dim numbers(1 To 4) As NumberDescriptor
    
    numbers(1).Number = txtNumber1.value
    numbers(1).Position = 1
    numbers(1).Rank = 0
    
    numbers(2).Number = txtNumber2.value
    numbers(2).Position = 2
    numbers(2).Rank = 0
    
    numbers(3).Number = txtNumber3.value
    numbers(3).Position = 3
    numbers(3).Rank = 0
    
    numbers(4).Number = txtNumber4.value
    numbers(4).Position = 4
    numbers(4).Rank = 0
    
    NumberDescriptor_SortByNumber numbers
    
    For i = 1 To 4
        numbers(i).Rank = i
    Next
    
    NumberDescriptor_SortByPosition numbers
    
    Set wb = ActiveWorkbook
    Set ws = wb.Worksheets("Tabelle1")
    
    For i = 1 To 4
        ws.Cells(i, 1).value = numbers(i).Number
        ws.Cells(i, 2).value = numbers(i).Rank
    Next
    
    End Sub
  19. Autor dieses Themas

    philip-felder

    philip-felder hat kostenlosen Webspace.

    Alternativ kannst Du auch alles in VBA machen:
    
    Option Explicit
    
    Private Type NumberDescriptor
        Number As Long
        Position As Long
        Rank As Long
    End Type
    
    Private Sub NumberDescriptor_SortByNumber(arr() As NumberDescriptor, _
      Optional ByVal start_idx As Long = -1, _
      Optional ByVal end_idx As Long = -1)
    Dim i As Long
    Dim j As Long
    Dim tmp As NumberDescriptor
    Dim pivot As NumberDescriptor
    
    If start_idx < 0 Then start_idx = LBound(arr)
    If end_idx < 0 Then end_idx = UBound(arr)
    
    i = start_idx
    j = end_idx
    pivot = arr((start_idx + end_idx) / 2)
     
    Do
        While arr(i).Number < pivot.Number
            i = i + 1
        Wend
        While arr(j).Number > pivot.Number
            j = j - 1
        Wend
    
        If i <= j Then
            tmp = arr(i)
            arr(i) = arr(j)
            arr(j) = tmp
            i = i + 1
            j = j - 1
        End If
    Loop Until i > j
    
    If start_idx < j Then
        NumberDescriptor_SortByNumber arr, start_idx, j
    End If
    
    If i < end_idx Then
        NumberDescriptor_SortByNumber arr, i, end_idx
    End If
    
    End Sub
    
    Private Sub NumberDescriptor_SortByPosition(arr() As NumberDescriptor, _
      Optional ByVal start_idx As Long = -1, _
      Optional ByVal end_idx As Long = -1)
    Dim i As Long
    Dim j As Long
    Dim tmp As NumberDescriptor
    Dim pivot As NumberDescriptor
    
    If start_idx < 0 Then start_idx = LBound(arr)
    If end_idx < 0 Then end_idx = UBound(arr)
    
    i = start_idx
    j = end_idx
    pivot = arr((start_idx + end_idx) / 2)
     
    Do
        While arr(i).Position < pivot.Position
            i = i + 1
        Wend
        While arr(j).Position > pivot.Position
            j = j - 1
        Wend
    
        If i <= j Then
            tmp = arr(i)
            arr(i) = arr(j)
            arr(j) = tmp
            i = i + 1
            j = j - 1
        End If
    Loop Until i > j
    
    If start_idx < j Then
        NumberDescriptor_SortByPosition arr, start_idx, j
    End If
    
    If i < end_idx Then
        NumberDescriptor_SortByPosition arr, i, end_idx
    End If
    
    End Sub
    
    Private Sub btnRun_Click()
    Dim wb As Excel.Workbook
    Dim ws As Excel.Worksheet
    Dim rg As Excel.Range
    Dim i As Long
    Dim numbers(1 To 4) As NumberDescriptor
    
    numbers(1).Number = txtNumber1.value
    numbers(1).Position = 1
    numbers(1).Rank = 0
    
    numbers(2).Number = txtNumber2.value
    numbers(2).Position = 2
    numbers(2).Rank = 0
    
    numbers(3).Number = txtNumber3.value
    numbers(3).Position = 3
    numbers(3).Rank = 0
    
    numbers(4).Number = txtNumber4.value
    numbers(4).Position = 4
    numbers(4).Rank = 0
    
    NumberDescriptor_SortByNumber numbers
    
    For i = 1 To 4
        numbers(i).Rank = i
    Next
    
    NumberDescriptor_SortByPosition numbers
    
    Set wb = ActiveWorkbook
    Set ws = wb.Worksheets("Tabelle1")
    
    For i = 1 To 4
        ws.Cells(i, 1).value = numbers(i).Number
        ws.Cells(i, 2).value = numbers(i).Rank
    Next
    
    End Sub


    Wieder das selbe problem, die größte Zahl muss 1 haben.

    Kann man das den auch in eine Variable speichern, ohne es in die Excel Tabelle zu schreiben ???

    Beitrag zuletzt geändert: 23.4.2011 0:49:12 von cbhp
  20. Hallo philip-felder,

    hier nochmal mit absteigender Sortierung:
    Option Explicit
    
    Private Type NumberDescriptor
        Number As Long
        Position As Long
        Rank As Long
    End Type
    
    Private Sub NumberDescriptor_SortByNumber(arr() As NumberDescriptor, _
      Optional ByVal start_idx As Long = -1, _
      Optional ByVal end_idx As Long = -1)
    Dim i As Long
    Dim j As Long
    Dim tmp As NumberDescriptor
    Dim pivot As NumberDescriptor
    
    If start_idx < 0 Then start_idx = LBound(arr)
    If end_idx < 0 Then end_idx = UBound(arr)
    
    i = start_idx
    j = end_idx
    pivot = arr((start_idx + end_idx) / 2)
     
    Do
        While arr(i).Number > pivot.Number
            i = i + 1
        Wend
        While arr(j).Number < pivot.Number
            j = j - 1
        Wend
    
        If i <= j Then
            tmp = arr(i)
            arr(i) = arr(j)
            arr(j) = tmp
            i = i + 1
            j = j - 1
        End If
    Loop Until i > j
    
    If start_idx < j Then
        NumberDescriptor_SortByNumber arr, start_idx, j
    End If
    
    If i < end_idx Then
        NumberDescriptor_SortByNumber arr, i, end_idx
    End If
    
    End Sub
    
    Private Sub NumberDescriptor_SortByPosition(arr() As NumberDescriptor, _
      Optional ByVal start_idx As Long = -1, _
      Optional ByVal end_idx As Long = -1)
    Dim i As Long
    Dim j As Long
    Dim tmp As NumberDescriptor
    Dim pivot As NumberDescriptor
    
    If start_idx < 0 Then start_idx = LBound(arr)
    If end_idx < 0 Then end_idx = UBound(arr)
    
    i = start_idx
    j = end_idx
    pivot = arr((start_idx + end_idx) / 2)
     
    Do
        While arr(i).Position < pivot.Position
            i = i + 1
        Wend
        While arr(j).Position > pivot.Position
            j = j - 1
        Wend
    
        If i <= j Then
            tmp = arr(i)
            arr(i) = arr(j)
            arr(j) = tmp
            i = i + 1
            j = j - 1
        End If
    Loop Until i > j
    
    If start_idx < j Then
        NumberDescriptor_SortByPosition arr, start_idx, j
    End If
    
    If i < end_idx Then
        NumberDescriptor_SortByPosition arr, i, end_idx
    End If
    
    End Sub
    
    Private Sub btnRun_Click()
    Dim wb As Excel.Workbook
    Dim ws As Excel.Worksheet
    Dim rg As Excel.Range
    Dim i As Long
    Dim numbers(1 To 4) As NumberDescriptor
    
    numbers(1).Number = txtNumber1.value
    numbers(1).Position = 1
    numbers(1).Rank = 0
    
    numbers(2).Number = txtNumber2.value
    numbers(2).Position = 2
    numbers(2).Rank = 0
    
    numbers(3).Number = txtNumber3.value
    numbers(3).Position = 3
    numbers(3).Rank = 0
    
    numbers(4).Number = txtNumber4.value
    numbers(4).Position = 4
    numbers(4).Rank = 0
    
    NumberDescriptor_SortByNumber numbers
    
    For i = 1 To 4
        numbers(i).Rank = i
    Next
    
    NumberDescriptor_SortByPosition numbers
    
    ' Wenn die Werte nicht in die Tabelle geschrieben werden sollen, dann
    ' kannst Du alles Folgende weglassen.
    ' Der Platz steht in numbers().Rank
    Set wb = ActiveWorkbook
    Set ws = wb.Worksheets("Tabelle1")
    
    For i = 1 To 4
        ws.Cells(i, 1).value = numbers(i).Number
        ws.Cells(i, 2).value = numbers(i).Rank
    Next
    
    End Sub

    In diesem Fall steht erstmal alles in Variablen. Genauer gesagt im Array numbers.
    Dabei ist numbers().Number die Zahl, numbers().Position die ursprüngliche Position bzw. die Nummer des Textfeldes und numbers().Rank der Platz.
    Zwischen die Klammern gehört natürlich immer der Index (1,2,3 oder 4). Und solange Du die Werte nicht in die Tabelle kopierst bleiben sie auch da und sind sonst nirgends:wink:
  21. Autor dieses Themas

    philip-felder

    philip-felder hat kostenlosen Webspace.

    Vielen Dank,
    so jetzt noch ein punkt, dann wäre alles geschaft:

    in "ws.Cells(i, 2).Value = numbers(i).Rank" stehen ALLE "Plätze" kann man auch z.B. nur einen oder zwei an verschieden Zellen reinschreiben lassen?
  22. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!