Excel Frage


Indurus

Recommended Posts

"gefolgte Inhalte" =/= korrektes Deutsch

ich möchte ein makro in excel, mit dem teile einer zelle, getrennt durch leerzeichen, in separate zellen kopiert werden sollen

also "vorname nachname" ->

vorname

nachname

 

sollte eigentlich nicht schwer sein, aber ich kenne mich mit vba gar nicht aus

bearbeitet von Leper Messiah TR

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Sehr bekannt im ASB
Leper Messiah TR schrieb vor 1 Stunde:

ich möchte ein makro in excel, mit dem teile einer zelle, getrennt durch leerzeichen, in separate zellen kopiert werden sollen

also "vorname nachname" ->

vorname

nachname

 

sollte eigentlich nicht schwer sein, aber ich kenne mich mit vba gar nicht aus

Dafür brauchst du aber kein Makro. Spalten makieren, in denen "Vorname Nachname" enthalten ist. Danach auf "Daten" -> Text in Spalten. "Getrennt" passt -> "weiter >" -> Hakerl bei "Leerzeichen" -> Fertig stellen

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

"gefolgte Inhalte" =/= korrektes Deutsch

danke, das hilft schon mal weiter.

jetzt habe ich aber folgendes fundamentales problem:

ich muß einen aus einem pdf erstellten datensatz aus der erhaltenen "wurst" wieder in eine zeile bringen, und daraus eine gesamtliste. jetzt sind aber die einzelnen datensätze unterschiedlich lang (einige haben halt kategorien wie "kinder", die dann zu mehr einträgen führen). mir ist noch nicht klar, wie ich das angehen soll. eigentlich nicht einmal, ob das überhaupt möglich ist

also z.b.

Hahn, Hubert, 26, Arbeiter, Markus, 11, 3

Maier, Markus, 31, Angestellter, 4

also anders gesagt, nicht jeder datensatz enthält alle kategorien, es gibt aber auch keine leerfelder, also stimmen die positionen der einzelnen einträge nicht von datensatz zu datensatz überein

und das alles soll in einem one-click-makro geschehen :glubsch:

-) zweite frage: wie verwendet man activecell richtig? ich habe es schon geschafft, zellinhalte von einem dokument in ein anderes zu kopieren. jetzt möchte ich aber an meine cursorposition kopieren (und dann eine zeile nach unten rücken, nächstes dokument aufmachen, und so weiter, bis alle datensätze in einer tabelle stehen :D)

bearbeitet von Leper Messiah TR

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Posting-Maschine

das geht sofern alles durch ein bestimmtes Zeichen getrennt ist

also wie bei einem CSV zb

Datensatz1, Datensatz2, Datensatz3, usw...

wenns Datensatz2 nicht gibt sollte es trotzdem getrennt sein

Datensatz1, , Datensatz3

wenn du solche Quelldaten hast gehts sicher

sonst wüsst ich nicht wie

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

"gefolgte Inhalte" =/= korrektes Deutsch

ja trennung hin oder her, das wahre problem ist, wie ich die daten in der ausgabetabelle an die richtige position bringe. einfach von links nach rechts anorden ist eben nicht ausreichend, wenn unterschiedlich viele daten pro datensatz sind. aber ich habe gerade bemerkt, dass einige bezeichnungen (z.b. mitversicherter) fett geschrieben sind - das könnte der rettungsanker sein! theoretisch kann ich mir die sache mittlerweile zu 75% vorstellen, aber ich habe eben keine ahnung von vba!

und das alles, weil uns die personalabteilung den zugang zur auswertungssoftware für die daten, die wir ohnehin haben, nicht geben will :fuckthat:

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Surft nur im ASB
Leper Messiah TR schrieb vor 1 Stunde:

-) zweite frage: wie verwendet man activecell richtig? ich habe es schon geschafft, zellinhalte von einem dokument in ein anderes zu kopieren. jetzt möchte ich aber an meine cursorposition kopieren (und dann eine zeile nach unten rücken, nächstes dokument aufmachen, und so weiter, bis alle datensätze in einer tabelle stehen :D)

Grundsätzlich: Activecell ist bei deinem Vorhaben wohl der falsche Ansatz, weil du davor immer (mit der Maus) die gewünschte Zielzelle auswählen müsstest.

Besser gehts mit "cells(x, y).insert". Damit kannst du einen vorher mittels "cells(x, y).copy" kopierten Wert in eine andere Zelle schreiben. Wenn du von einem Tabellenblatt in ein anderes kopieren möchtest, müssen die Befehle dementsprechend abgewandelt werden: "activeworkbook.sheets(z).cells(x, y).copy" bzw. "....insert". Wenn auch das Dokument berücksichtigt werden soll, mittels "workbooks(i).sheets(z).cells(x, y).copy".

Für dein eigentliches Vorhaben sehe ich leider schwarz, wenn du so gar keine Möglichkeiten zur Unterscheidung der einzelnen Datenfelder haben solltest.

Leper Messiah TR schrieb vor einer Stunde:

aber ich habe gerade bemerkt, dass einige bezeichnungen (z.b. mitversicherter) fett geschrieben sind

Versteh ich das richtig? Du hast also doch die Feldnamen dabei oder wie?

bearbeitet von lx99

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

"gefolgte Inhalte" =/= korrektes Deutsch
lx99 schrieb vor einer Stunde:

Grundsätzlich: Activecell ist bei deinem Vorhaben wohl der falsche Ansatz, weil du davor immer (mit der Maus) die gewünschte Zielzelle auswählen müsstest.

Besser gehts mit "cells(x, y).insert". Damit kannst du einen vorher mittels "cells(x, y).copy" kopierten Wert in eine andere Zelle schreiben. Wenn du von einem Tabellenblatt in ein anderes kopieren möchtest, müssen die Befehle dementsprechend abgewandelt werden: "activeworkbook.sheets(z).cells(x, y).copy" bzw. "....insert". Wenn auch das Dokument berücksichtigt werden soll, mittels "workbooks(i).sheets(z).cells(x, y).copy".

Für dein eigentliches Vorhaben sehe ich leider schwarz, wenn du so gar keine Möglichkeiten zur Unterscheidung der einzelnen Datenfelder haben solltest.

Versteh ich das richtig? Du hast also doch die Feldnamen dabei oder wie?

wenn bestimmtes zeichen gefunden (eine beliebige zahl wird man hoffentlich auch suchen können) -> springe zu nächstem block (fixer dienstnehmerstamm ist ein block, variabler der nächste etc.) und kopiere dort die daten bis zum nächsten fettgedruckten wort hin, oder so in der art.

und wenn ich z.b. 10 kinder oder 10 punkte die anstellung betreffend als maximum annehme, dann kopiert er mir bis zu 10 kinder hin, und der darauffolgende punkt (eben nach dem nächsten fetten wort oder anderem trigger) wird trotzdem an den richtigen ort kopiert. ist doch theoretisch denkbar, oder?

die feldnamen stehen halt mitten in der wurst. manche sachen stehen auch in spalte B, C etc.

stb.png

bearbeitet von Leper Messiah TR

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Harry Wijnvoord Fußballgott

Ich habe einen Weblink, wenn ich diesen in einen Browser eingebe kommt ein .xml zurück. Es liegt dort glaub ich nicht direkt ein .xml File, (der Link endet nämlich nicht auf .xml) sondern ich glaube der Link stößt ein Webservice an, das dann dieses .xml zurückgibt. Kann ich dieses .xml per Makro irgendwie automatisch runterladen und irgendwo lokal ablegen? (wenn ichs händisch mache öffnet sich der xml code im Browser und ich kanns per Speichern Unter dann irgendwo abspeichern. Das würd ich aber gerne automatisiert erledigen, da ich 1000e solcher Abrufe durchführen muss)


Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Surft nur im ASB
Leper Messiah TR schrieb am 31.1.2017 um 11:49 :

wenn bestimmtes zeichen gefunden (eine beliebige zahl wird man hoffentlich auch suchen können) -> springe zu nächstem block (fixer dienstnehmerstamm ist ein block, variabler der nächste etc.) und kopiere dort die daten bis zum nächsten fettgedruckten wort hin, oder so in der art.

und wenn ich z.b. 10 kinder oder 10 punkte die anstellung betreffend als maximum annehme, dann kopiert er mir bis zu 10 kinder hin, und der darauffolgende punkt (eben nach dem nächsten fetten wort oder anderem trigger) wird trotzdem an den richtigen ort kopiert. ist doch theoretisch denkbar, oder?

die feldnamen stehen halt mitten in der wurst. manche sachen stehen auch in spalte B, C etc.

Mal von vorne: in welcher Form liegen die auszuwertenden Daten vor? Plain Text? Textstreams lassen sich in Excel eigentlich gut zeilenweise einlesen und analysieren. Natürlich kann man auch nach bestimmen Ausdrücken suchen und abhängig davon verschiedenste Dinge unternehmen.

Aus deiner Beschreibung werd ich halt nicht wirklich schlau - wahrscheinlich auch deswegen, weil du nur einen kleinen Auszug der Daten gepostet hast. Eine Automatisierung kannst du nur dann erreichen, wenn du alle anzunehmenden Zustände logisch abbilden kannst.

Das fett markierte macht es halt schwieriger...stehen die Sachen dann in jedem File z.B. in den Spalten B und C?

Indurus schrieb vor 5 Stunden:

Ich habe einen Weblink, wenn ich diesen in einen Browser eingebe kommt ein .xml zurück. Es liegt dort glaub ich nicht direkt ein .xml File, (der Link endet nämlich nicht auf .xml) sondern ich glaube der Link stößt ein Webservice an, das dann dieses .xml zurückgibt. Kann ich dieses .xml per Makro irgendwie automatisch runterladen und irgendwo lokal ablegen? (wenn ichs händisch mache öffnet sich der xml code im Browser und ich kanns per Speichern Unter dann irgendwo abspeichern. Das würd ich aber gerne automatisiert erledigen, da ich 1000e solcher Abrufe durchführen muss)

Hört sich nach einem SOAP Webservice an...lässt sich prinzipiell ganz gut verarbeiten...hätte da schon was fertig, das man vielleicht nur adaptieren müsste.

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Harry Wijnvoord Fußballgott
lx99 schrieb vor 19 Stunden:

Mal von vorne: in welcher Form liegen die auszuwertenden Daten vor? Plain Text? Textstreams lassen sich in Excel eigentlich gut zeilenweise einlesen und analysieren. Natürlich kann man auch nach bestimmen Ausdrücken suchen und abhängig davon verschiedenste Dinge unternehmen.

Aus deiner Beschreibung werd ich halt nicht wirklich schlau - wahrscheinlich auch deswegen, weil du nur einen kleinen Auszug der Daten gepostet hast. Eine Automatisierung kannst du nur dann erreichen, wenn du alle anzunehmenden Zustände logisch abbilden kannst.

Das fett markierte macht es halt schwieriger...stehen die Sachen dann in jedem File z.B. in den Spalten B und C?

Hört sich nach einem SOAP Webservice an...lässt sich prinzipiell ganz gut verarbeiten...hätte da schon was fertig, das man vielleicht nur adaptieren müsste.

Das klingt schonmmal fein! Kannst du mir Fragmente bzw. eine Richtung in die das gehen sollte zukommenlassen bzw. empfehlen? Rudimentäre VBA Kenntnisse hätte ich!

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Surft nur im ASB
Indurus schrieb vor einer Stunde:

Das klingt schonmmal fein! Kannst du mir Fragmente bzw. eine Richtung in die das gehen sollte zukommenlassen bzw. empfehlen? Rudimentäre VBA Kenntnisse hätte ich!

Erstens mal sorry, ich glaub ich hab gestern ein wenig zu vorschnell geantwortet. Wenn du einfach nur die URL aufrufst und ein XML zurückbekommst, handelt es sich um REST und nicht um SOAP...das sollte das Ganze ein bissl vereinfachen.

Versuch das bitte mal:

Sub REST_Get()

Dim strUrl As String
Dim xmlHTTP As MSXML2.XMLHTTP60
Dim xmlDOC As MSXML2.DOMDocument60
Dim xmlStream As Object

Dim strFolder As String
Dim strXMLFileName As String

Set xmlHTTP = New MSXML2.XMLHTTP60
Set xmlDOC = New MSXML2.DOMDocument60

strFolder = "C:\Users\.....\Desktop\"
strXMLFileName = "TEST"

strUrl = "http://www.thomas-bayer.com/sqlrest/"

With xmlHTTP
    .Open "GET", strUrl, False
    .send
    xmlDOC.LoadXML .responseText
    Set xmlStream = CreateObject("ADODB.Stream")
    xmlStream.Type = 2 'Stream Type ... text/string
    xmlStream.Charset = "utf-8" 'charset
    xmlStream.Open 'Stream öffnen
    xmlStream.writetext xmlDOC.XML
    xmlStream.SaveToFile strFolder & strXMLFileName & ".xml", 2
End With

End Sub

Edit: @Indurus jetzt mit funktionierendem Code

bearbeitet von lx99
Funktionierenden Code eingefügt

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Harry Wijnvoord Fußballgott

@lx99 Danke dir viel mals! Funktioniert sehr gut, aber für mich leider nur eingeschränkt und ich glaube auch ich weiß woran es liegt. Mit folgendem Code (aus dem Web) kann ich das Ding das ich als .xml brauche als html speichern:
 

Zitat

 

Dim sURL As String
 Dim appIE As Object
Dim sTxt As String
sURL =  "www.meineseite-blabla..."

Set appIE = CreateObject("InternetExplorer.Application")
appIE.navigate sURL
Do: Loop Until appIE.Busy = False
Do: Loop Until appIE.Busy = False
sTxt = appIE.document.DocumentElement.outerhtml
Set appIE = Nothing
Close
Open ThisWorkbook.Path & "\test.html" For Output As #1
Print #1, sTxt
Close
   MsgBox "Der Text wurde gespeichert unter:" & vbLf & _
      ThisWorkbook.Path & "\test.html"

 

Ich glaube der Unterschied zu deiner Version (die perfekt funktioniert aber in meinem speziellen Fall leider eine leere Seite zurück gibt) ist dass das in obigem Code als InternetExplorer Instanz (kenn mich da leider viel zu wenig aus) passiert und deshalb klappt, weil ich mich für den Dienst den ich abrufe vorher authentifizieren muss und ein Cookie abgespeichert wird, mit dem ich dann erst berechtigt bin.

Jetzt wieder die Frage an dich als Experten: Kann ich diesen Code, der mir ein html abspeichert in dem genau der .xml Code drinnen steht den ich brauche, so abändern, dass da gleich das xml rauskommt? Ich glaube nämlich ich muss das über diese CreateObject("InternetExplorer.Application")-Schiene spielen, da das sonst mit der Authentifizierung nicht klappt.

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Surft nur im ASB

Wenn dieser Code funktioniert, sollte es eigentlich reichen, wenn du

Indurus schrieb vor 8 Minuten:

Open ThisWorkbook.Path & "\test.html" For Output As #1

auf

Open ThisWorkbook.Path & "\test.xml" For Output As #1

abänderst.

Der Code macht nichts anderes, als den Seiteninhalt in ein Textfile zu schreiben (in deinem Beispiel halt mit der Dateiendung .html).

Noch eine Ergänzung: du kannst auch noch versuchen, die Anmeldeinformationen in meinem Code mitzugeben:

.Open "GET", strUrl, False, strUsr, strPw

 

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Harry Wijnvoord Fußballgott
lx99 schrieb vor einer Stunde:

Wenn dieser Code funktioniert, sollte es eigentlich reichen, wenn du

auf


Open ThisWorkbook.Path & "\test.xml" For Output As #1

abänderst.

Der Code macht nichts anderes, als den Seiteninhalt in ein Textfile zu schreiben (in deinem Beispiel halt mit der Dateiendung .html).

 

Ich habs jetzt mal mit .txt, .html und .xml probiert.

Wenn ich eine .txt datei erzeuge, dann steht da nicht nur der .xml code drinnen (also das was im Browser dargestellt wird), sondern der gesamte HTML-Code dieser Seite, also sämtliche Information über farbliche Darstellung usw., deshalb klappts glaube ich auch nicht, wenn ich die datei als .xml speichere, weil dann zwar die xml endung passt, aber im xml file halt kein gültiger xml code drinnen steht.

Der einzige weg wie ich das bekomme, was ich brauche ist, wenn ich den Link händisch im Internet-Exporer eingebe, dann wird das .xml im Browser korrekt angezeigt wie gewünscht. Wenn ich dann auf Datei->Speichern Unter klicke schlägt er gleich .xml vor, ich kanns abspeichern und hab dann eine funktionierende .xml.

Und diesen Vorgang "Link in Browser eingeben, Speichern Unter klicken und speichern" würde ich gerne das Makro machen lassen, weil ich das täglich 1000e male tun müsste.

Deinem Code den User und das Passwort mitzuschicken bringt glaub ich nichts, weil die authentifizierung zusätzlich zum user und pw über ein cookie im IE gesteuert wird. Deshalb klappt auch die Variante mit dem CreateObject("InternetExplorer.Application") bis auf das, dass ich da den html code der seite als text erhalte und nicht den text, der für den menschen auf der Seite wenn er sie abruft sichtbar ist!

Ich glaube es liegt an der Zeile

sTxt = appIE.document.DocumentElement.outerhtml

an diesem "outerhtml"!

 

bearbeitet von Indurus

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Lädt...


  • Folge uns auf Facebook

  • Partnerlinks

  • Unsere Sponsoren und Partnerseiten

  • Wer ist Online

    • Keine registrierten Benutzer online.