#3 - Du giver stadig ikke svar på, hvor hver af de enkelte tekster som skal HTML kodes, befinder sig.
Selvom der laves en VBA kode, så er den jo ikke i stand til at finde de enkelte linjer, som skal være det ene, eller det andet. Et område i dit eks. er det <p>xxx</p> og i et andet er det så hvor der skal defineres en punkt markering <ul>
#4: Igen - nybegynder i HTLM. Er det disse koder, du ønsker defineret? Det er dem, der kommer med ud, hvis jeg eksportere en tekst fra vores PIM.
Koder: <p> = start afsnit </p> = slut afsnit <ul> = start liste </ul> = slut liste <li> = start element i liste </li> = slut element i i liste = tvunget mellemrum
Kolonne A er som teksten er pt. Kolonne B er som den skal rettes til (som den ud, hvis man eksporterer nuværende tekster fra vores PIM). Kolonne C er måske en løsning, hvis ikke man kan kode sig til kolonne A.
Linie 2 er eksempel. _____________________________________________________
Det tætteste, jeg er kommet på en kode er denne:
Sub createHTML() j = 1 x = Cells(j, 1) Do While x <> "" y = Split(x, Chr(10)) If UBound(y) > 0 Then For i = 1 To UBound(y) Cells(i, 1).Value = "<p>" & y(i) & "</p>" Next i Cells(i, 1).Value = "" End If j = j + 1 x = Cells(j, 1) Loop End Sub
Problemet med denne kode er, at den retter ændrer teksten fra ét felt 1 felt pr. linie (og den laver kun <p></p> kodning)
#6 - Der er jo flere aspekter i dit "problem". Som du med den viste kode, allerede har konstateret, så ved koden ikke hvor de forskellige tekster som skal HTML kodes, befinder sig.
At de står i én kolonne (A), og flere tekstlinjer i en (Excel) defineret linje, gør at dette opfattes af Excel, som én lang linje, og ikke separate linjer. Næste er, at de forskellige markeringer for ny HTML kodning, ikke er separeret ud (det var det jeg efterlyste).
Og kommer der så andre tekster som skal HTML kodes til ny formatering! ?
Hvis alt det skal laves, bliver det en længere VBA kode, som skal tage højde for flere ting, som stadig ikke er defineret.
Hvis alt dit indhold står i kolonne A, så prøv med nedenstående VBA-kode, som du skal indsætte i arkets kodemodul. Teksterne med html-tags skrives direkte til en tekstfil. Du skal selvfølgelig rette filstien til, så den passer med dine filmapper
Sub make_tags() Dim str_tag As String Dim str_tab As String Dim str_html As String Dim str_html_file As String Dim i_last_row As Integer Dim i_loop_row As Integer Dim i_file_no As Integer i_file_no = FreeFile() str_tag = "<p>" str_html_file = "C:\Users\xxx\OneDrive - XXX\Documents\Excel\Udvikling\test.html" Open str_html_file For Output As i_file_no With Me i_last_row = .Cells(.Rows.Count, 1).End(xlUp).Row For i_loop_row = 1 To i_last_row If Left(.Cells(i_loop_row, 1), 1) = Chr(149) Then str_tag = "<li>" str_tab = WorksheetFunction.Rept(" ", 4) End If If WorksheetFunction.Trim(.Cells(i_loop_row, 1)) <> "" Then Print #i_file_no, str_tab & str_tag & Replace(.Cells(i_loop_row, 1), Chr(149) & " ", " ", , , vbTextCompare) & Replace(str_tag, "<", "</", , , vbTextCompare) End If If str_tag <> "<li>" Then If Left(.Cells(i_loop_row + 1, 1), 1) = Chr(149) Then str_tag = "<ul>" Print #i_file_no, str_tab & str_tag GoTo next_i_loop_row End If ElseIf str_tag = "<li>" Then If Left(.Cells(i_loop_row + 1, 1), 1) <> Chr(149) Then str_tab = "" str_tag = "</ul>" Print #i_file_no, str_tab & str_tag GoTo next_i_loop_row End If End If next_i_loop_row: Next i_loop_row End With Close #i_file_no End Sub
Tusind tak, for din hjælp - det sætter jeg stor pris på :)
Jeg har rettet stien og indsat koden.
Først fik jeg fejl "Compile error: invalid use of Me keyword" på "With Me"- Jeg prøvede at læse mig frem til rettelse og indsatte mit navn i stedet. Jeg er ikke helt sikker på, at det er den korrekte måde at gøre det på, men fejlen forsvandt.
Nu får jeg fejl "Run-time error´424´: Object reqired" på "i_last_row = .Cells(.Rows.Count, 1).End(xlUp).Row"
Sub make_tags() Dim str_tag As String Dim str_tab As String Dim str_html As String Dim str_html_file As String Dim i_last_row As Integer Dim i_loop_row As Integer Dim i_file_no As Integer i_file_no = FreeFile() str_tag = "<p>" str_html_file = "L:\_MFN\Skrivebord\I gang\test.html" Open str_html_file For Output As i_file_no With Me i_last_row = .Cells(.Rows.Count, 1).End(xlUp).Row
#9 - Du skal indsætte koden i arkets kodemodul, hvorved "Me" bliver opfattet som "arket selv" af VBA. Når du står i Visual Basic-editoren, så dobbelt-klik på arket for at åbne dets kodemodul.
Ok - jeg havde ikke lige fået kigget på filen tidligere, så jeg havde ikke bemærket, at hver enkelt celle indeholdt al teksten adskilt af linjeskift.
Prøv med denne tilpassede kode:
Sub make_tags() Dim str_tag As String Dim str_tab As String Dim str_txt As String Dim str_html As String Dim str_html_file As String Dim i_last_row As Integer Dim i_loop_row As Integer Dim i_loop_arr As Integer Dim i_file_no As Integer Dim arr_split As Variant i_file_no = FreeFile() str_tag = "<p>" str_html_file = "L:\_MFN\Skrivebord\I gang\test.html" Open str_html_file For Output As i_file_no With Me i_last_row = .Cells(.Rows.Count, 1).End(xlUp).Row For i_loop_row = 1 To i_last_row If WorksheetFunction.Trim(.Cells(i_loop_row, 1)) <> "" Then arr_split = Split(.Cells(i_loop_row, 1), Chr(10), , vbTextCompare) For i_loop_arr = LBound(arr_split) To UBound(arr_split) If Left(arr_split(i_loop_arr), 1) = Chr(149) Then str_tag = "<li>" str_tab = WorksheetFunction.Rept(" ", 4) End If If WorksheetFunction.Trim(arr_split(i_loop_arr)) <> "" Then str_txt = Replace(arr_split(i_loop_arr), Chr(149) & " ", " ", , , vbTextCompare) str_txt = Replace(str_txt, Chr(149) & vbTab, " ", , , vbTextCompare) Print #i_file_no, str_tab & str_tag & str_txt & Replace(str_tag, "<", "</", , , vbTextCompare) str_txt = "" End If If str_tag <> "<li>" Then If i_loop_arr < UBound(arr_split) Then If Left(arr_split(i_loop_arr + 1), 1) = Chr(149) Then str_tag = "<ul>" Print #i_file_no, str_tab & str_tag End If End If ElseIf str_tag = "<li>" Then If i_loop_arr < UBound(arr_split) Then If Left(arr_split(i_loop_arr + 1), 1) <> Chr(149) Then str_tab = "" str_tag = "</ul>" Print #i_file_no, str_tab & str_tag str_tag = "<p>" End If Else If str_tag = "<li>" Then str_tab = "" str_tag = "</ul>" Print #i_file_no, str_tab & str_tag End If str_tab = "" str_tag = "<p>" End If End If Next i_loop_arr End If Next i_loop_row End With Close #i_file_no End Sub
#13 - okay. Havde egentlig fået den opfattelse, at HTML-dataene skulle leveres til et eksternt system, dvs. uden for Excel.
Den tilrettede kode neden for skriver HTML-dataene i kolonnen til højre for dine data.
Jeg har "udkommenteret" de linjer, som vedrører print af dataene til en fil.
Sub make_tags() Dim str_tag As String Dim str_tab As String Dim str_txt As String Dim str_html As String Dim str_html_file As String Dim i_last_row As Integer Dim i_loop_row As Integer Dim i_loop_arr As Integer 'Dim i_file_no As Integer Dim arr_split As Variant 'i_file_no = FreeFile() str_tag = "<p>" 'str_html_file = "L:\_MFN\Skrivebord\I gang\test.html" 'Open str_html_file For Output As i_file_no With Me i_last_row = .Cells(.Rows.Count, 1).End(xlUp).Row For i_loop_row = 1 To i_last_row If WorksheetFunction.Trim(.Cells(i_loop_row, 1)) <> "" Then arr_split = Split(.Cells(i_loop_row, 1), Chr(10), , vbTextCompare) For i_loop_arr = LBound(arr_split) To UBound(arr_split) If Left(arr_split(i_loop_arr), 1) = Chr(149) Then str_tag = "<li>" str_tab = WorksheetFunction.Rept(" ", 4) End If If WorksheetFunction.Trim(arr_split(i_loop_arr)) <> "" Then str_txt = Replace(arr_split(i_loop_arr), Chr(149) & " ", " ", , , vbTextCompare) str_txt = Replace(str_txt, Chr(149) & vbTab, " ", , , vbTextCompare) 'Print #i_file_no, str_tab & str_tag & str_txt & Replace(str_tag, "<", "</", , , vbTextCompare) str_html = str_html & str_tab & str_tag & str_txt & Replace(str_tag, "<", "</", , , vbTextCompare) & vbNewLine str_txt = "" End If If str_tag <> "<li>" Then If i_loop_arr < UBound(arr_split) Then If Left(arr_split(i_loop_arr + 1), 1) = Chr(149) Then str_tag = "<ul>" 'Print #i_file_no, str_tab & str_tag str_html = str_html & str_tab & str_tag & vbNewLine End If End If ElseIf str_tag = "<li>" Then If i_loop_arr < UBound(arr_split) Then If Left(arr_split(i_loop_arr + 1), 1) <> Chr(149) Then str_tab = "" str_tag = "</ul>" 'Print #i_file_no, str_tab & str_tag str_html = str_html & str_tab & str_tag & vbNewLine str_tag = "<p>" End If Else If str_tag = "<li>" Then str_tab = "" str_tag = "</ul>" 'Print #i_file_no, str_tab & str_tag str_html = str_html & str_tab & str_tag & vbNewLine End If str_tab = "" str_tag = "<p>" End If End If Next i_loop_arr End If .Cells(i_loop_row, 1).Offset(, 1) = str_html str_html = "" Next i_loop_row End With 'Close #i_file_no End Sub
#14 - helt perfekt. Du er min nye helt :). Tusind tak, for hjælpen!
Synes godt om
1 synes godt om dette
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.