Benötige Hilfe bei VB in Excel

Liebe wer-weiß-was-Gemeinde,

mein Wunschkatalog ist groß und auch ein bisschen unverschämt. Unverschämt deshalb, weil ich von VB noch keine Ahnung habe, jedoch meine Ziele sehr groß sind.
Ich habe versucht zu googlen, bekam aber keine richtige Site, die mir VB von Grund auf beibrachte. Es gab immer nur Beispiele von Macros.

Was möchte ich? Und warum VB in Excel?

Die 2. Frage zuerst: Ich möchte innerhalb der Firma, wo ich arbeite, ein Pokerspiel (No limit Hold´em Texas Poker) verteilen, an dem sich die KollegInnen innerhalb ihrer Mittagspause erfreuen können. Mit fertigen Anwendungen komme ich nicht über die Firewall. Daher möchte ich gerne den Quellcode von VB als Textdatei mir in die Firma schicken und dort in die normale Excel-Anwendung integrieren. Dann lässt sich die Excel-Tabelle ganz normal als Attachement verteilen.

Zu Frage 1: Ich weiß von VB nichts. Was ich möchte ist, dass 1. nach dem Öffnen einer Exceltabelle sich das Macro automatisch startet. Es soll dann ein Begrüßungsschirm stehen. Dann, nach dem Lesen, soll man „Enter“ drücken und in den „Hauptbildschirm“ kommen. Und dort wird dann das Spiel passieren.

Noch eine Erläuterung: Es soll ein 1 zu 1 face-to-face-Turnier sein. Der virtuelle Gegner wird ein „Dr. Poker“ sein.

Mein Problem ist nicht: Die Programmierung der Reaktionen (halten, erhöhen, wegschmeißen) von „Dr. Poker“. Das ist für mich easy und eigentlich der Spaß an der Programmierung.

Mein Problem ist: Wie kriege ich das ganze visuell hin? Es soll eine schicke Anwendung werden. Ich muss es hinkriegen, dass die Leute gar nicht mal merken, dass sie eine Excel-Anwendung geöffnet haben. Es soll dann ein toller Eröffnungsbildschirm zu sehen sein. Dann nach einem „Klick“ oder „Enter“ soll der „Spielbildschirm“ erscheinen. Dieser Bildschirm wird natürlich Buttons enthalten für den Spieler für „halten“, „erhöhen“ (und dann auch für wieviel) oder wegschmeißen.
Nun ja, und wenn das rein spielerische und so geregelt ist, will ich das ganze auch noch optisch aufpoppen.

Und so meine Fragen: Wie eben gelesen… habt ihr konkrete Lösungen? Oder… kennt ihr sites, wo man ein bisschen VB lernt? Ich war leider beim googlen erfolglos bzw. ich habe die sites nicht verstanden.

Würde mich über eine Antwort sehr freuen.

Euer Stefan

Hallo Stefan,

ich fang mal mit Kritik an, Du willst mit VBA programmieren, nicht mit VB. Allerdings willst Du tatsächlich VBA als VB mißbrauchen.

Das war’s schon mit der Kritik. :smile: Die Probleme, die Du hast sind eigentlich keine, das ist einfach. Ich kenne mich mit VBA nicht gut aus, nur mit VB, aber dabei werde ich Dir helfen können.

Wie Du zum VBA kommst weißt Du schon? Dort gehst Du zu ‚Einfügen‘ und fügst dem Projekt eine ‚Userform‘ hinzu. Dann hast Du schon die Oberfläche, die Du suchst. Aud diese Form kannst Du dann mit der Maus Steuerelemente wie Bilder, Textfelder und Schaltknöpfe legen. Du kannst auch auf die Userform ein Bild legen, dann sieht die schon mal gut aus. Wie die Exceltabelle im Hintergrund unsichtbar wird, verrät uns Reinhard. :smile:

Wenn Du die Form hast und schon mal ein Steuerelement d’rauf hast, können wir über den Code reden. Da werden sicher Fragen auftauchen, auf die haben wir dann aber Antworten. :smile:

Gruß, Rainer

Hallo Rainer, Stefan,

Die Probleme, die Du hast
sind eigentlich keine, das ist einfach.
Ich kenne mich mit VBA
nicht gut aus, nur mit VB, aber dabei werde ich Dir helfen
können.

Sicher kannst du da gut helfen gut und besonders auch sehr viel, ich las den Satzteil: „…weil ich von VB noch keine Ahnung habe…“.

Ich finde das sehr wagemutig unter solchen Voraussetzungen so ein Projekt zu beginnen, aber bitteschön :smile:

Wie die Exceltabelle im Hintergrund unsichtbar wird, verrät uns
Reinhard. :smile:

Verschiedene Wege, Windows minimized u.a., oder so:
(tt() auf einen Button aus Formular legen, Editor schließen)

Sub tt()
Application.Visible = False
UserForm1.Show
Application.Visible = True
End Sub

Fertige Datei, es fehlen quasi nur die Karten und die Verteilungsroutine und und…:

http://www.hostarea.de/server-09/September-1c4f03352…

Gruß
Reinhard

Hallo Stefan.

Um den Anwedern Deines Spiels „vorzugaukeln“, sie hätten keine Excel-Datei vor Augen, reicht es eigentlich schon aus, die folgenden Maßnahmen zu ergreifen (hört sich blöd an, oder :smiley: ?):

  • Bildlaufleisten ausblenden
  • Blattregisterkarten ausblenden
  • Bearbeitungsleiste ausblenden
  • Statusleiste ausblenden
  • Symbolleisten ausblenden
  • Gitternetzlinien ausblenden
  • Zeilen- und Spaltenbeschriftung ausblenden
  • Zellen grau machen (RGB 224, 223, 227)
  • Blattschutz aktivieren und alle Optionen deaktivieren

Dann hast Du schon mal einen durchaus ansehnlichen „Startbildschirm“, auf dem Du bereits Steuerelemente aus der Steuerelement-Toolbox plazieren kannst; Buttons zum Spiel starten oder so.

Aber Du hast Dir in der Tat eine heilige Aufgabe aufgebürstet. Da steckt eine ganze Menge Arbeit drin, möcht’ ich mal so pauschal behaupten. Ich habe vor Jahren einmal „Mensch ärgere dich nicht“ in Excel mit VBA programmiert. Es war ganz toll und es war die Hölle.

Viele Grüße
Carsten

Hallo Reinhard,

Ich finde das sehr wagemutig unter solchen Voraussetzungen so
ein Projekt zu beginnen, aber bitteschön :smile:

ja, klar ist das etwas mutig. Aber so kompliziert ist Poker ja nicht … das wird schon gehen.

Wie die Exceltabelle im Hintergrund unsichtbar wird, verrät uns
Reinhard. :smile:

Verschiedene Wege, Windows minimized u.a., oder so:
(tt() auf einen Button aus Formular legen, Editor schließen)

Sub tt()
Application.Visible = False
UserForm1.Show
Application.Visible = True
End Sub

Fertige Datei, es fehlen quasi nur die Karten und die
Verteilungsroutine und und…:

http://www.hostarea.de/server-09/September-1c4f03352…

Danke für die Hilfe!

Gruß, Rainer

Hi Stefan,

ich habe Dir schon mal ein stückchen Code getippt …

Option Explicit '

... so etwa könnte der Anfang aussehen. :smile: Fragen dazu? Oder ist das alles klar?

Gruß, Rainer

Hallo Rainer, Stefan,

ja, klar ist das etwas mutig. Aber so kompliziert ist Poker ja
nicht … das wird schon gehen.

Naja, als Lehrling haben wir in den Pausen auch oft gepokert, irgendwie waren da die Regeln einfacher, siehe Hold’em Regeln im Anhang.

Gruß
Reinhard

Texas Hold’em
Bis zu 10 Spieler (plus ein virtueller Dealer) sitzen an einem Tisch. In der Seitenansicht sehen Sie grafische Stellvertreter der teilnehmenden Spieler, sogenannte Avatare. Vor einem der Spieler befindet sich ein kleiner runder Knopf, der mit einem „D“ gekennzeichnet ist. Diesen Knopf nennt man den Dealer Button. Der Dealer Button verschiebt sich vor jeder neuen Spielrunde um eine Position in Uhrzeigerrichtung. Der Dealer Button markiert die Position des Spielers, der an der Reihe ist die Karten zu geben. In unserem Pokerraum gibt es einen virtuellen Dealer, dessen alleinige Aufgabe es ist, die Karten zu verteilen. Er sitzt in der Mitte der linken Seite des Tisches hinter einer Kiste mit Spielchips und er nimmt nicht aktiv am Spielgeschehen teil.

Die Spielrunden
Ablauf der Spielrunden (am Beispiel für ein Pokerspiel mit Limit):

Blinds
Zuallererst müssen die beiden ersten Spieler, die direkt links neben dem Spieler mit dem Dealer Button (nicht der virtuelle Dealer) sitzen, einen Blind setzen. Diese Blinds werden gesetzt, noch bevor die ersten Karten verteilt werden. Diese Prozedur stellt sicher, dass jede gewinnende Hand Geld verdient. Jeder Spieler muss während eines Spieles zu einer gewissen Zeit Blinds setzen, da sich der Dealer Button mit jeder Spielrunde verschiebt. Der Spieler direkt links neben dem Dealer Button setzt den Small Blind, welcher der Hälfte des unteren Satzlimits entspricht (z.B. $2.5 für ein $5/$10 Spiel). Der Spieler links neben dem Small Blind setzt nun den Big Blind , welcher dem unteren Satzlimit entspricht (z.B. $5 für ein $5/$10 Spiel).

Pocket Cards
Nach den Blinds werden die ersten Karten verteilt. Jeder Spieler bekommt zwei verdeckte Karten. Diese Karten nennt man Pocket Cards oder Hole Cards.

  1. Satzrunde
    Die erste Satzrunde startet der links vom grossen Blind sitzende Spieler. Jeder Spieler kann nun entscheiden, ob er aussteigt (fold), mitgeht (call) oder sogar erhöht (raise). Die Höhe der Sätze ist gleich dem unteren Satzlimit. Zum Beispiel ist die Satzhöhe für die erste Wettrunde in einem 10/20 Texas Hold’em Spiel $10. Das Setzen wird weiter unten noch genauer erklärt.

Der Flop
Nach Ende der ersten Satzrunde, wird in der Mitte des Tisches der Flop (die ersten 3 Karten, die alle Spieler gemeinsam verwenden können) aufgedeckt. Diese sogenannten Community Cards sind für jeden Spieler gleich.

  1. Satzrunde
    Der erste verbliebende Spieler links vom Dealer Button startet die zweite Runde. Die 2. Satzrunde ist ebenfalls in der Wetthöhe auf das untere Limit begrenzt und funktioniert vom Prinzip her wie die 1. Satzrunde.

Der Turn
Eine weitere Karte mit Bild nach oben wird neben den Flop auf den Tisch gelegt. Damit befinden sich insgesamt 4 Community Cards mit Bild nach oben auf dem Tisch. Eine dritte Satzrunde findet statt, beginnend mit dem ersten verbliebenden Spieler links vom Button.

  1. Satzrunde
    Diese Satzrunde wird ebenso wie die erste und zweite Satzrunde durchgeführt, allerdings können die Einsätze und Erhöhungen jetzt jedoch im oberen Limit getätigt werden (in einem $10/20 Spiel kann jetzt 20 gesetzt werden).

Der River
Die letzte Karte wird mit dem Bild nach oben auf den Tisch gelegt. Dies erhöht die Anzahl der Community Cards auf den Tisch auf 5. Eine letzte Satzrunde erfolgt, beginnend mit dem ersten verbliebenden Spieler links vom Dealer Button.

  1. Satzrunde
    Die letzte Satzrunde wird genauso wie die 3. Satzrunde durchgeführt.

Showdown
Nachdem die Bietrunden abgeschlossen sind, erfolgt der Showdown. Der Gewinner ist, wer das beste Blatt bestehend aus den 5 Community Cards und seinen 2 Pocket Cards bilden kann. Spieler können sich den Pott auch teilen, wenn sie die gleichen Hands besitzen. In dem seltenen Falle, dass die beste Hand nur aus den Community Cards besteht, teilen sich alle noch im Spiel befindlichen Spieler den Pott. Wenn Sie feststellen, dass Sie verlieren und Ihre Karten nicht zeigen möchten, können Sie Ihre Karten auch ablegen ohne diese zu zeigen (muck). Ansonsten können Sie die Karten natürlich offenlegen, um Ihre Hand mit anderen zu vergleichen.

Auf ein Neues
Nachdem eine Hand gespielt wurde und der Pott gewonnen wurde, wird der Dealer Button eine Position weiter nach links im Uhrzeigersinn verschoben und die nächste Hand kann beginnen.

Grundlagen des Bietens
Die erste Aktion, nach dem Karten gegeben worden sind, wird vom Spieler links vom Big Blind ausgeführt. Jeder weitere Spieler entscheidet nun, was er aufgrund seiner Hand setzen möchte.

Fold (passen)
Wenn Sie Ihre Karten nicht mögen, haben Sie die Möglichkeit auszusteigen. In dem Falle, dass Sie bereits einen Blind gesetzt haben oder bereits mitgegangen sind, verlieren Sie den bereits gesetzten Betrag. Darüber hinaus werden Sie aber nicht mehr verlieren, denn bis zum Beginn der nächsten Hand sind Sie aus dem Spiel.

Check und Call (mitgehen)
Sie bleiben im Spiel, wenn Sie entweder checken oder callen (mitgehen). Wenn vor Ihnen nicht gesetzt wurde, dann können Sie checken, ohne Geld in Pott einzuzahlen. Checken bedeutet im Klartext, dass ein Spieler das Satzrecht an den nächsten Spieler abgibt, ohne selber einen Einsatz getätigt zu haben. Wenn allerdings vor Ihnen schon gesetzt wurde, dann können Sie mit dem vorherigen Spieler mitgehen, indem Sie den gleichen Geldbetrag in den Pott einzahlen.

Setzen und erhöhen (Bet/Raise/Re-raise)
Wenn Sie denken, dass Sie gute Karten auf der Hand halten, dann können Sie einen Geldbetrag setzen. Sie können ebendfalls erhöhen, falls vor Ihnen ein Spieler bereits gesetzt hat. Die Beträge, die Sie setzen können sind in der Satzstruktur der Tische festgelegt. Bei einem $5/$10 Tisch zum Beispiel können Sie $5 in den ersten beiden Runden und $10 in den letzten Beiden setzen. In jeder Runde kann ein Mal gesetzt und drei Mal erhöht werden (Bet, Raise, Re-Raise, Re-Raise). Nachdem drei Mal erhöht wurde, liegt ein sogenannter Cap vor. In diesem Falle wird die nächste Karte ausgeteilt oder, wenn es sich um die letzte Runde handelt, die beste Hand wird bestimmt.

All-In
Wenn ein Spieler nicht mehr genügend Chips hat aber trotzdem aufgrund seines guten Blattes im Spiel bleiben möchte, dann muss er nicht passen. Der Spieler kann nun wählen, dass er All-In ist. All-in bedeutet, dass der Spieler weiter im Spiel ist, aber keine Aktionen mehr tätigen kann. Das bis zu diesem Zeitpunkt einbezahlte Geld wird als Hauptpott angesehen, und der All-In Spieler hat nur die Möglichkeit diesen Pott zu gewinnen, er kann aber nicht das Geld, welches nach seiner All-In Wertung einbezahlt wurde, gewinnen. Dieses Geld wird in einem separaten Pott gelegt, auf den der All-In Spieler keinen Anspruch hat. Sollte nun der All-In Spieler beim Showdown die siegende Hand haben, dann bekommt er den Hauptpott. Den Nebenpott bekommt der Spieler mit der zweitbesten Hand. Falls nun mehere Spieler All-in gehen, dann werden auch mehere Nebenpotts erstellt. Diese werden nach den besten Blättern und der Reihenfolge, in der die Spieler All-In waren, verteilt. Der Spieler, der beim Showdown gewinnt und nicht All-in war, bekommt sowohl den Hauptpott, als auch alle Nebenpotts. Wenn ein Spieler gewinnt, der All-In ist, dann bekommt er den Pott, der gesammelt wurde bis er All-In gegangen ist. Jeder Spieler, der All-In ist, kann nur den Pott gewinnen, am dem er auch beteiligt war.

Eine Satzrunde wird solange gespielt, bis entweder alle Spieler gepasst haben oder das dritte Mal erhöht wurde oder alle Spieler mitgegangen sind (mit Ausnahme des Spielers, der den Bet gemacht hat), ohne das erhöht wurde.

Noch ein paar ergänzende Anmerkungen…
Hallo Reinhard, Rainer und Carsten,

erst einmal vielen Dank für eure Hilfe.

Ich möchte meine Probleme noch einmal konkretisieren.

Mit der eigentlichen Programmierung hätte ich kein Problem. In qbasic habe ich schon Simulationen geschrieben, die das Mitzählen beim Black Jack zeigen und dann halt auch den entsprechenden Erfolg. Wie gesagt, dass eigentliche Programmieren ist der eigentliche Spaß. Ich behaupte, dass man mein gewünschtes Hold´em Texas Poker-Programm von den Logiken her nur mit den Befehlen Gosub, if und = schreiben kann.
Mit den Regeln von Hold´em Texas Poker bin ich vertraut, spiele ich doch täglich ein paar Stunden Online-Poker.

Mein eigentliches Problem ist nur, einen Ausgabeschirm oder -fenster zu erstellen, wo ich aus dem Macro heraus Werte anzeigen lassen kann. Eine Möglichkeit wäre natürlich der Befehl Range(„A1“).Value = x , aber dann habe ich als Ausgabefenster ein Tabellenblett, was ich nicht möchte. Excel soll hier nur als Mittel zum Zweck dienen.

Also, hier ist meine Wunschliste:

  1. Ich möchte, wenn man Excel startet, dass sich nicht ein Tabellenblatt öffnet sondern ein bildschirmfüllendes Fenster, wo Text drin steht und man unten nach dem Lesen des Textes „OK“ anklicken kann.

  2. Dann soll das erste Fenster verschwinden und ein neues bildschirmfüllendes Fenster soll erscheinen. Wieder mit Text, und unten sollen mehrere Button zum Anklicken sein, die auf weitere Textfenster verweisen und schließlich auch auf das eigentliche Spiel.

  3. Für das eigentliche Spiel brauche ich ein bildschirmfüllendes Fenster, wo variabler Text (je nach Programmschritt des Macros) und eine Eingabemöglichkeit für Zahlen gegeben ist.

Sonst habe ich keine Schmerzen!

Viele Grüße

Stefan

Hallo Stefan,

Ich möchte meine Probleme noch einmal konkretisieren.

Mein eigentliches Problem ist nur, einen Ausgabeschirm oder
-fenster zu erstellen, wo ich aus dem Macro heraus Werte
anzeigen lassen kann.

So hatte ich das vesrtanden und Dir geschrieben, wie Du an die Userform kommst, das ist was Du suchst.

Also, hier ist meine Wunschliste:

  1. Ich möchte, wenn man Excel startet, dass sich nicht ein
    Tabellenblatt öffnet sondern ein bildschirmfüllendes Fenster,
    wo Text drin steht und man unten nach dem Lesen des Textes
    „OK“ anklicken kann.

OK, Userform.

  1. Dann soll das erste Fenster verschwinden und ein neues
    bildschirmfüllendes Fenster soll erscheinen. Wieder mit Text,
    und unten sollen mehrere Button zum Anklicken sein, die auf
    weitere Textfenster verweisen und schließlich auch auf das
    eigentliche Spiel.

OK, zweite Userform.

  1. Für das eigentliche Spiel brauche ich ein
    bildschirmfüllendes Fenster, wo variabler Text (je nach
    Programmschritt des Macros) und eine Eingabemöglichkeit für
    Zahlen gegeben ist.

Das ist ja nun superleicht. :smile: Damit es hübsch wird und Spaß macht, würde ich die Karten noch als Bild anzeigen, aber darauf kommt es erst mal nicht an.

Hast Du denn nun die Userform?

Übrigens … die Befehle Goto und Gosub vergiss bitte ganz schnell, die hast Du nie gesehen, nie gehört. So etwas braucht kein Mensch mehr, macht das Programm nur unübersichtlich und bringt Fehler.

Gruß, Rainer

Hallo Stefan,

Du kennst also schon ein paar Befehle aus QBasic, die Art, wie man damit programmiert, den Programmablauf …

Die Befehle und deren Syntax sind sehr ähnlich, den Rest musst du vergessen, mit VBA läuft das anders.

In QBasic läuft der Code beim Start los, tut was da steht und wenn etas eingeben werden soll, wenn der Code reagieren soll, muss das programmiert werden, der Code angehalten … Das ist in allen modernen Programmiersprachen anders.

Der Code wird gestartet, das Bild aufgebaut und dann steht der Code, tut gar nichts. Auf der Form, der sichtbaren Oberfläche werden Steuerelemente platziert, die jedes verschiedene Ereignisse kennen. Ein Button kennt unter anderen das Klick-Ereignis.

Diesem Ereignis ordnest Du einen Code zu, der immer dann abgearbeitet werden soll, wenn der Button angeklickt wird.

VBA ist Ereignisorientiert. Wenn Du versuchst, mit VBA einen Code zu schreiben, wie Du das bei QBasic verstanden hattest, wirst Du kein Programm fertig bekommen, unnötig viel Code schreiben, verschiedene Befehle vergeblich suchen, weil sie einfach nicht mehr benötigt werden … Es ist schon nötig, daß Du die Absicht hast, die Grundlagen von VB zu verstehen, sonst ist Dein Projekt zum Scheitern verurteilt und wir können Dir nicht helfen.

Gruß, Rainer

  1. Ich möchte, wenn man Excel startet, dass sich nicht ein
    Tabellenblatt öffnet sondern ein bildschirmfüllendes Fenster,
    wo Text drin steht und man unten nach dem Lesen des Textes
    „OK“ anklicken kann.

Hi Stefan,

bei bildschirmfüllender UF fängt es schon an. Komplett, oder soll
unten die Taskleiste stehen bleiben falls mal der Chef kommt?

Sollen die Befehlsschaltflächen gleich groß bleiben oder sich mit
verändern wenn die Bildschirmgröße sich ändert, da anderer PC, Laptop
usw.

Soll das Schließkreuz oben rechts bleiben?

Nachfolgend mal ein paar Codeschnipsel einer ähnlichen Anfrage zum
Thema Bildschrimgröße und UF-Größe.

Gruß
Reinhard

*********************************************************************

Hallo!
Probiere schon die längste Zeit herum mit der UserForm Anpassung.
Es wird immer blöder!

Ich habe ein Netzwerk mit ca. 10 Bildschirmen (Flachbettbildschirme 
von 17 u. 19 Zoll, Röhrenbildschirme von 15 Zoll bis 22 Zoll und 
Laptops.
Als Betriebssysteme habe ich WIN 2000 u. WIN XP.

Ich brauche für diese Situation für mein Excel Programm mit UsrFormen 
ein Zoom Tool dass mit diesen Bedingungen umgehen kann. Es soll 
einfach auf allen Bildschirmen die UserForm automatisch die richtige 
Grösse bekommen wenn möglich den ganzen Bildschirm ausfüllen. 

Kann mir da jemand von Euch helfen.

Bitte um Hilfe
Gerhard

Betrifft: AW: UserForm Grösse?
von: Ramses
Geschrieben am: 04.12.2005 00:04:57

Hallo

hier mal einen allgemeinen Code um die Bildschirmeinstellung 
auszulesen

Private Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long

Public Enum ScreenArgs
 HORIZONTAL
 VERTIKAL
End Enum

Public Function ScreenResolution(HV As ScreenArgs) As Long
 If HV = 0 Or HV = 1 Then ScreenResolution = GetSystemMetrics(HV)
End Function

Sub Set\_Zoom()
 'Die Werte hinter .Zoom den eigenen Bedürfnissen anpassen
 Select Case ScreenResolution(0)
 Case 1600
 ActiveWindow.Zoom = 75
 Case 1280
 ActiveWindow.Zoom = 75
 Case 1024
 ActiveWindow.Zoom = 75
 Case 800
 ActiveWindow.Zoom = 75
 Case 640
 ActiveWindow.Zoom = 75
 End Select
End Sub

Sub Choose\_Table\_depend\_from\_Screen()
 If ScreenResolution(0) = 1024 Then
 Worksheets("1024").Select
 Else
 Worksheets("800").Select
 End If
End Sub
Sub Zoom\_It()
 'Passt den Zoom an die aktuelle Auswahl an
 Range("A:b").Select
 ActiveWindow.Zoom = True
End Sub

Sub print\_Screeen()
 Debug.Print ScreenResolution(0)
 Debug.Print ScreenResolution(1)
End Sub


Ansonsten kannst du das mal ansehen

http://66.249.93.104/search?q=cache:2wgKUSSa3iAJ:forums.wugnet.com/office/-Placing-ftopict292611.html+Screenresolution+Pixel+EXCEL+VBA&hl=de

Dort steht eine exakte Lösung zu deinem Problem

Gruss Rainer


Betrifft: ...oder alternativ...
von: Ramses
Geschrieben am: 04.12.2005 00:09:02

Hallo

die einfachste Variante:

Option Explicit


Private Sub CommandButton1\_Click()
Application.WindowState = xlMaximized
With Me
 .Top = Application.Top
 .Left = Application.Left
 .Height = Application.Height
 .Width = Application.Width
End With
End Sub

... wenn sowieso alles im Vollbild laufen soll

Gruss Rainer


Betrifft: AW: ...oder alternativ...
von: Gerhard
Geschrieben am: 05.12.2005 10:09:35

Hallo Rainer!

Herzlicen Dank für deine Hilfe.

Funktioniert von allem was ich bis jetzt probiert habe am besten und 
ist am einfachsten geschrieben! Aber hat noch einen Schönheitsfehler!
Habe folgenden Code jetzt in der UserForm

Private Sub UserForm\_Activate()
 Select Case Application.WindowState
 Case xlMaximized
 Me.Height = Application.Height - 5 'Korrrektur für Taskleiste = 5
 Me.Width = Application.Width - 5 'Korrektur schmäler = 5
 Me.Left = 0
 Me.Top = 0
 End Select
End Sub

Das bringt die UserForm auf die Bildschirmgrösse aber die Elemente in 
der UserForm bleiben davon unberührt. Jetzt ist es so dass auf den 
meisten Bildschirmen die UserForm nach rechts vergrössert wird die 
Element wie Text od Listbox u. Schaltflächen bleiben gleich. ist das 
möglich dass die User Form nich nur recht grösser wird sonder links 
und rechts gleich, so das die Elemente in der UserForm in die 
Bildschirmmitte rücken.
Habe mir das auch auf den Link angeschaut denn Du mir mitgeschickt 
hast, funktioniert aber auch nicht anders.

Gruss
Gerhard


Betrifft: AW: ...oder alternativ...
von: Ramses
Geschrieben am: 05.12.2005 12:04:54

Hallo

Dann bleibt nur noch die ZOOM-Funktion für die UF.
Die musst du dann allerdings abhängig von der Bildschirmgrösse im 
Verhältnis zur normalen Grösse berechnen

Gruss Rainer
Betrifft: AW: ...oder alternativ...
von: Gerhard
Geschrieben am: 05.12.2005 17:13:22

Hallo Rainer!
Hab jetzt folgendes gemacht:


Private Sub UserForm\_Activate()
Dim LoWidth As Long ' Größe der Userform laut Programm
Dim LoHeight As Long ' der Userform laut Programm
Dim UserWidth As Long
Dim UserHeight As Long
 LoWidth = 1280
 LoHeight = 1024
 UserWidth = 768
 UserHeight = 570.6
 MsgBox "UserForm " & Me.Width
 MsgBox "UserForm " & Me.Height
 MsgBox "Width Erstellungsgrösse " & LoWidth
 MsgBox "Height Erstellungsgrösse " & LoHeight
 Dim SystemW As Long
 Dim SystemH As Long
 SystemW = GetSystemMetrics(SM\_CXSCREEN)
 SystemH = GetSystemMetrics(SM\_CYSCREEN)
 MsgBox "SWidth " & SystemW
 MsgBox "SHeight " & SystemH
Select Case Application.WindowState
Case xlMaximized
Me.Height = Application.Height - 5
Me.Width = Application.Width - 6
Me.Left = 0
Me.Top = 0
Me.Zoom = GetSystemMetrics(SM\_CXSCREEN) / (LoHeight) \* 100
End Select
End Sub

Funktioniert gut nur die Berechnung glaube ich ist noch nicht ganz ok.
Und das Problem mit den Elementen in der UserForm ist damit auch nicht gelöst 

Die werden nicht zentriert am Bildschirm angezeigt.
Gruss
Gerhard

Betrifft: AW: ...oder ganz anders!
von: Gerhard
Geschrieben am: 06.12.2005 10:45:32

Hallo Rainer!

Habe jetzt eine ganz andere Variante die super funktioniert bei jeder 
Auflösung.
Ganz einfach und passt genau; ganzer Bildschirm und alles in der 
Mitte!


Private Sub UserForm\_Initialize()
'Bildschirmanpassung der UserForm
Dim MyControl As Object
For Each MyControl In Controls
MyControl.Top = MyControl.Top \* Application.Height / UserForm1.Height
MyControl.Left = MyControl.Left \* Application.Width / UserForm1.Width
MyControl.Width = MyControl.Width \* Application.Width / UserForm1.Width
MyControl.Height = MyControl.Height \* Application.Height / UserForm1.Height
Next
With UserForm1
.Height = Application.Height - 3
.Width = Application.Width - 4
Me.Left = 0
Me.Top = 0
End With
End Sub

Danke nochmals für deine Bemühungen
Gruss
Gerhard

Hallo Rainer,

vielen Dank für die klaren Worte. Ich werde mich entsprechend deinen Enpfehlungen zunächst erst mal mit den Basics in VB und VBA beschäftigen. Dann sehen wir weiter.

Viele Grüße

Stefan

Hallo Reinhard,

auch dir vielen Dank für die klaren Worte sowie der Beispiele. Wie ich Rainer schon schrieb, werde ich zunächst erst einmal Grundlagen erwerben.

Viele Grüße

Stefan

Vba Poker Spielkarten verteilen umdrehen
Hallo Rainer, Stefan,

um das aufzupeppen, könnte man ja sowas benutzen:

http://www.hostarea.de/server-09/September-b5ae57c19…

Die Datei beinhaltet 52 Kartenvorderseiten und 13 Kartenrückseiten als Bmp aus Cards.dll bzw. Cards32.dll die per Zufall ausgewählt, auf dem Tisch verschoben und aufgedeckt werden.

Noch ohne Userform.

Entwickelt mit XL2000, dort und mit XL2002 getestet. Beim Testen fetgestellt, Code muß unbedingt der Geschwindigkeit des Rechners angepasst werden.

Nachfolgend der Code dazu in Modul1. Ich habe ihn jetzt nur so gechrieben daß es läuft, Tuning und Verbesserung fehlen noch, also bitte „Goto To“ u.ä. übersehen :smile:

Gruß
Reinhard

Option Explicit
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMillisecomds As Long)
Public Abbruch As Boolean


Sub test()
Dim Vorder As Integer, Rueck As Integer
Abbruch = False
With ActiveSheet
Endlos:
 Vorder = Int((52 \* Rnd) + 1)
 Rueck = Int((13 \* Rnd) + 1) + 52
 Call Geben(Rueck)
 Call Bewegen(Rueck, "zu", "nr")
 Call Bewegen(Vorder, "auf", "nr")
 Call Bewegen(Vorder, "zu", "nl")
 Call Bewegen(Rueck, "auf", "nl")
 Call Ablegen(Rueck)
 With .Shapes(Vorder)
 .Left = 500
 .Width = 0
 End With
 With .Shapes(Rueck)
 .Left = 400
 .Width = 0
 End With
DoEvents
If Abbruch = False Then GoTo Endlos
End With
End Sub


Sub Bewegen(Bildnummer, AufZu, linksrechts)
Dim N, X, W, L, S
S = 2
If (AufZu "auf" And AufZu "zu") Or linksrechts "nl" And linksrechts "nr" Then
 MsgBox "Parameter falsch"
 Exit Sub
End If
With ActiveSheet.Shapes("Picture " & Bildnummer)
If AufZu = "auf" Then
 If linksrechts = "nr" Then
 For N = 0 To 100 Step S
 .Width = N
 Sleep 1
 DoEvents
 Next N
 Else 'linksrechts = "nl"
 For N = 0 To 100 Step S
 .Width = N
 .Left = 500 - N
 Sleep 1
 DoEvents
 Next N
 End If
Else 'AufZu = "zu"
 If linksrechts = "nl" Then
 For N = 100 To 0 Step -S
 .Width = N
 Sleep 1
 DoEvents
 Next N
 Else 'linksrechts = "nr"
 For N = 0 To 100 Step S
 .Width = 100 - N
 .Left = 400 + N
 Sleep 1
 DoEvents
 Next N
 .Left = 400
 .Width = 0
 End If
End If
End With
End Sub


Sub BilderEinlesen()
Dim fs, N
Set fs = Application.FileSearch
With fs
 .LookIn = "f:\"
 .Filename = "\*.bmp"
 .Execute
 For N = 1 To .FoundFiles.Count
 ActiveSheet.Pictures.Insert(.FoundFiles(N)).Select
 With Selection
 .ShapeRange.LockAspectRatio = msoFalse
 .Top = 100
 .Left = 500
 .Height = 140
 .Width = 0
 If N \> 52 Then .Left = 400
 End With
 Next N
End With
End Sub


Sub AllesLöschen()
Dim sh
For Each sh In ActiveSheet.Shapes
 If sh.Name Like "Pict\*" Then sh.Delete
 'sh.Delete
Next sh
End Sub


Sub nn()
Dim sh
For Each sh In ActiveSheet.Shapes
MsgBox sh.Name
Next sh
End Sub


Sub Beenden()
Abbruch = True
End Sub


Sub Geben(Nr)
Dim N, S
S = 4
With ActiveSheet.Shapes("Picture " & Nr)
 .Left = 0
 .Width = 0
 For N = 0 To 100 Step S
 .Width = N
 Sleep 1
 DoEvents
 Next N
 For N = 0 To 400 Step S
 .Left = N
 Sleep 1
 DoEvents
 Next N
End With
End Sub


Sub Ablegen(Nr)
Dim N, S
S = 4
With ActiveSheet.Shapes("Picture " & Nr)
 .Width = 100
 For N = 400 To 0 Step -S
 .Left = N
 Sleep 1
 DoEvents
 Next N
 For N = 100 To 0 Step -S
 .Width = N
 Sleep 1
 DoEvents
 Next N
End With
End Sub

Hallo Stefan,

Ich werde mich entsprechend
deinen Enpfehlungen zunächst erst mal mit den Basics in VB und
VBA beschäftigen. Dann sehen wir weiter.

probier doch einfach mal, schwer ist es nicht und wir stehen hier für Fragen zur Verfügung. :smile:

Gruß, Rainer