| ||
|
Ergebnisse auf Deutsch für vba ganzes tabellenblatt markieren
|
| Szukaj:Słowo(a): vba ganzes tabellenblatt markieren |
Text in Tabelle schreiben bzw. Rastern Hallo, ich möchte einen Text aus einer text-Datei auslesen (wie dies funktioniert weiü ich) und diesen dann in eine Tabelle schreiben. Das Ganze soll so aussehen das jedes Zeichen in einer eigenen Zelle steht. Die Tabelle müsste sich dann natürlich dynamisch, also in Abhängigkeit des Textes aufbauen, aber das soll erst der nächste Schritt sein. Als erstes möchte einfach eine Tabelle angezeigt bekommen, welche den Text enthält. Nur leider scheine ich das DataTable und/oder DataGrid nicht zu kapieren... Das Ziel soll sein dass man bestimmte/mehrere Zellen markieren kann, um dann den Inhalt dieser Zellen auslesen und weiterverarbeiten zu können. Von der Optik her sollte es auch eher wie ein Text mit einem Raster aussehen, als eine wirkliche Tabelle (dies is aber erst mal zweitrangig). Hoffe es kann jemand helfen ! Danke vorab ! Viele Grüüe, ND P.S. : Ich nutze Visual Studio 2008 Prof. Ed. |
Gibt es in der Tabelle wo Daten beider Firmen vorhanden sind eine Spalte welche den Datensatz eindeutig der Firma X oder Y zuordnet, sollte das Problem mit Sortieren zu lösen sein (so sortieren, dass alle X untereinander stehen und diese dann löschen). Ansonsten muss diese Identifikation halt zuerst gemacht werden, z.B. mit Hilfe der SVERWEIS Formel. In einer noch leeren Spalte (in der Tabelle mit den Daten beider Firmen) könnte etwa stehen: SVERWEIS((A2;Tabelle1!A2:B22;2;FALSCH) Dies überprüft ob der Wert vom Feld A2 in der Tabelle 1 in der Matrix A2 bis B22 vorkommt. Falls ja, wird dieser Wert zurückgegeben. Gegebenenfalls ist diese Formel für soviele Spalten anzuwenden bis eine eindeutige Identifikation möglich ist (bspw. wenn das Vergleichsfeld bei der Firma X mehrmals den gleichen Wert hat). Nun können in einer weiteren Spalte einfach der Wert der SVERWEIS-Formel mit dem Wert der Zelle der Tabelle 2 verglichen werden, falls die beiden Werte identisch sind wird z.B. loeschen zurückgegeben und sonst nichts. WENN(A2=C2;"löschen";"") Nun noch die Tabelle nach der Spalte sortieren wo löschen drinsteht, diese Datensätze alle markieren und löschen! Ist umständlich und kompliziert aber müsste eigentlich funktionieren. Das ganze könnte man natürlich auch in ein VBA Programm packen... |
Dafür kannst DU den VBA Code prima verwenden. Musst halt noch ein wenig Feinarbeit reinstecken. Du kannst ja auch problemlos andere Anwendungen aus Excel/VBA heraus starten. Das, was per Copy.Picture Anweisung erstellt wird ist einfach eine BMP Datei aus dem markierten Bereich, die in die Zwischenablage kopiert wird. Die kann dann in jede Anwendung eingefügt werden, das muss kein Excel sein. Ganz komfortabel geht das ganze mit AutoIt, das ist ein Makrotool, mit dem man wirklich alles erledigen kann. Damit wäre es z.B. möglch, in Excel einen Screenshot zu machen, den per Zwischenablage in eine Grafikdatei zu speichern, das Ding an Outlook anzuhängen und an eine Adressliste zu versenden. Mit einem einzigen Mausklick. Man kann auch eine exe-Datei daraus kompilieren, so das Anwender nichts mehr am Makro selbst ändern können. Ich setze das Ding in der Firma für viele Sachen ein, die automatisiert ablaufen sollen und für die ein einfaches Script nicht geeignet ist. Schaus Dir mal an. Und als letzte Möglichkeit würde mir ein Druck der Tabelle ins PDF Format einfallen. Installiere dafür einfach Win2PDF (kann direkt beim Druck mailen) oder einen anderen PDF Drucker. Der Code dafür würde wie folgt ausehen: Code: Sub Win2PDF_Druck() Application.ActivePrinter = "Win2PDF auf Ne00:" ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:= _ "Win2PDF auf Ne00:", Collate:=True End Sub |
Hallo Namenskollege Klaus, ich wollte Dir gestern eine Makrocode posten und weil ich immer alles vorher ausprobiere was ich hier poste bin ich auf eine ulkige Art und Weise auf eine Ungleichbehandlung von Code aufmerksam geworden. Für Excel VBA gibt es einen Unterschied ob der Code in einem Modul steht oder in dem Arbeitsblatt. Ich habe für Dich einen Makrocode PikUp gebaut den Du ganz einfach für das Kopieren von einem Tabellenblatt in ein anderes verwenden kannst. Damit nichts schief geht probiere zunächst einmal mit einer leeren Arbeitsmappe aus und schreibe in die Spalte A von A5 bis A10 irgend einen Text. sodann stelle den Cursor in eine der Zeilen zwischen 5 und 10 und betätige den Button. Du brauchst nichts zu markieren, das Ding kopiert einfach von einem Blatt zum anderen. Die Quelladresse und die Zieladresse kannst Du beliebig ändern. Hier der Code: Sub PikUp_Click() Worksheets("Tabelle2").Range("A" & ActiveCell.Row).Value = _ Range("A" & ActiveCell.Row).Value Range("Tabelle1!A" & ActiveCell.Row + 1).Activate End Sub Viel Spaü beim Ausprobieren. MfG Klaus |
Hallo, habe es jetzt doch nochmal versucht. Alle AddOns deinstalliert, das Pluginsystem abgeschaltet, Dateien der vB4B4 hochgeladen und das Upgrade gestartet. Ergebnis: Schon wieder der Datenbankfehler bei Step 6. Zitat:
In der Tabelle "attachment" gibt es die rot markierten Spalten doch garnicht. Was also versucht dieses Upgradescript da ?:confused: Eine Neuinstallation des vB 3.8.4 mit anschliessendem Import der gesicherten Datenbank hat auch nichts gebracht, auch da gibt es die Tabelle "attachment" und zwar so wie sie vB4 nicht zu mögen scheint. Ein leeres vB3.8.4 auf vB4 upzugraden macht auch keinen Sinn, da sich dann weder User noch Posts im Forum befinden. Langsam gehen mir wirklich die Ideen aus. Und ein Upgrade wie in der "vb4_readme.html" beschrieben kann man mal ganz schnell vergessen.:( Gruss,Micha |
Zitat:
Hallo Christoph, Das Problem ist mir bekannt. Die alternative Lösung habe ich leider noch nicht gefunden ! Was mir dazu einfällt... Wenn Du die Zellen, in denen Eingaben gemacht werden, vom Schutz enthebst und dann einen Blattschutz drauflegst, dann kann man nicht mehr zuviel löschen. Allerdings ist es leider nicht möglich, alles zu markieren und dann ENTF zu drücken. Ein Makro könnte helfen... "On Error Resume Next" ist wichtig, um die Fehlerbehandlung bei einer gesperrten Zelle auszuschalten. Dann brauchst Du zwei Schleifen ala (kein VB-Code) For vSpalte = "A" to "ZZ" For vZeile = "1" to "200" Range(vSpalte + vZeile).Select ActiveCell.Value = "" Next vZeile Next vSpalte Das mit der Schleife und dem Markieren der jeweiligen Zelle muüt Du selber basteln ; Vielleicht hilft Dir das schon als Lösungsansatz... Wenn nicht, dann mach einen Thread in "Allgemein" oder "Plauderecke" auf, dann kann ich (und hoffentlich auch noch ein paar andere) versuchen, da noch ein bischen mehr Zeit und Aufwand reinzustecken ;) |
Angeregt von RidJokers Telefonscript (das noch nicht ganz fertig ist) hab ich auch mal ansatzweise versucht, ein Telefon-Tarife-Script auf den Weg zu bringen. Da ich so gut wie kein VB kann, bin ich natürlich gescheitert. Vielleicht können wir das hier mal zusammen versuchen? Also, das Script liest erstmal die Website von Teltarif aus (der Code ist mehr oder weniger identisch bei allen diesen Scripts). Die haben unter [Wegen Suchmaschinen ist der Link nur für registrierte Benutzer sichtbar. Jetzt registrieren...] eine kleine Tabelle "Jetzt am günstigsten" und mehr braucht man glaube ich auch nicht. Genau diese Tabelle wird in ein Tempfile geschrieben: Code: Function writefile() GetURL = "http://www.teltarif.de/festnetz/" Dim Http Set Http = CreateObject("Microsoft.XMLhttp") Http.Open "GET",GetURL,False Http.Send HtmlResult = Http.ResponseText Set Http = Nothing set fs=CreateObject("Scripting.FileSystemObject") set f=fs.CreateTextFile("teltarif.tmp",true) HtmlStart = InStr(HtmlResult, "City</FONT></TD>") + Len("City</FONT></TD>") HtmlEnd = InStr(HtmlStart, HtmlResult, "Diese Tabelle bei Ihnen</A></FONT></TD>") If HtmlStart > 0 AND HtmlEnd > 0 Then htmlresult = Mid(HtmlResult, HtmlStart, HtmlEnd - HtmlStart ) end if f.write(htmlresult) f.close set f=nothing set fs=nothing writefile = "Tempfile written" End Function Das funktioniert auch prima. Das Tempfile hat dann diesen Inhalt: Zitat:
Ich hab mal rot markiert, was jetzt an dynamischen Informationen aus dem Tempfile herausgezogen werden müsste: nämlich der jeweilige Anbieter und die entsprechende Nummer. Die Funktionen müssten dann natürlich so benannt werden, dass der User weiü, worum es sich handelt, also z.B.: "kurzCityAnbieter", "kurzCityNummer" usw. Wie man das jetzt aber weiter programmiert, weiü ich nicht. Vielleicht hat ja jemand Ahnung davon? |
Hallo Peter, >> Geschlechtsprüfung aufgrund des Namens? Das könnte bei "Maria" >> schwierig werden... > auch beim italienischen "Andrea" :-) .... und überhaupt bei fremdländischen Vornamen... >> Es ging hier ursprünglich weniger ums Suchen, sondern ums Sortieren... > Wenn nach Namensbestandteilen sortiert werden soll, dann müssen diese > Bestandteile eben für das Sortieren herausgeschnitten werden, z.B. bei > zusammengesetzten Namen. Dabei bleibt aber die Frage, welcher Teil des > zusammengesetzten Namens wichtig ist. Im Extremfall muss dann ein > Verzeichnis übergestülpt werden, damit ein zusammengesetzter Name doppelt > in der Sortierfolge erscheint. Das hieüe also, ggfs. müsste der sortierrelevante Namensbestandteil gesondert markiert werden. >> Vielleicht könnte man alles einfach wie's kommt in ein Feld packen, >> die Bestandteile mit Trennzeichen separieren und dazu ein weiteres >> Feld mit einer Kennung, wie der Namenskrempel herkunftslandestypisch >> zu interpretieren wäre. Und dann diese Interpretation lediglich im >> Programm vornehmen. Hm... Bleibt nur wieder das Problem der >> Sortierung... > IComparer Ein weiterer Grund, .NETt zu werden... ;-) (Obwohl man das Comparer-Pattern sicher auch in VB6 komplett zu Fuü implementieren könnte, wenn man denn wollte) > mit landestypischer Entscheidung! Das war ja mein Hintergrdanke zu dem Landeskennungsfeld. > Dabei bleibt dann aber wieder die Frage, wie z.B. die Reihenfolge eines > anderen Alphabetes in das lateinische zu intergrieren ist. Kommt das > kyrillische "a" direkt nach dem lateinischen "a" oder erst am Ende des > lateinischen Alphabetes oder vielleicht auch davor? Und was ist mit dem > russischen "f", welches im russischen Alphabet viel später als im > deutschen Alphabet kommt. Soweit ich weiü, gibt es Transskriptionsregeln, wie Eigennamen aus anderen Alphabeten (das griechische Alphabet ist ja auch betroffen, ganz zu schweigen etwa von asiatischen Namen) in lateinischer Schrift wiederzugeben sind. Danach könnte die Einsortierung erfolgen. Allerdings fällt mir auf, dass etwa russische Namen im Englischen anders transskribiert werden als im Deutschen. > Oulook sortiert z.B. erst alle Namen aus lateinischen Buchstaben nach > deutschem Alphabet (bei den lokalen Einstellungen auf meinem PC) und dann > alle russischen Namen nach russischem Alphabet. Vielleicht, weil die russischen Zeilen in der Unicode-Tabelle weiter hinten liegen? > Outlook Express streikt da aber schon. Na ja... > Ich weiü, dass die Gedanken bezüglich VB6 müüig sind, da die > Standard-Controls sowieso nicht unicodefähig sind. Und noch ein .NETter Grund... Viele Grüüe Harald M. Genauck ABOUT Visual Basic - das Webmagazin (Kein Link ?) |