2017-11-26 1 views
0

Total Newbie zu VBA - versucht, eine HTML-Tabelle mit Daten aus einer Excel-Tabelle automatisch zu erstellen.Erstellen Sie HTML-Tabellen mit Excel VBA

Ich habe Daten in Spalten I-M aus Zeilen 2 nach unten. Dies kann zwischen 1 Zeile und 500 Zeilen liegen.

Ich habe dann auch noch ein Stück Daten in P17-26, das statisch ist, aber offensichtlich Werte ändern.

hatte ich einen Blick auf Antworten zu diesem Thema: Dynamically create HTML table rows with VBA

Sub CreateAlternatorHtml() 

Dim wb As Workbook 
Dim ws As Worksheet 
Dim coll As New Collection 
Dim lngCounter As Long 
Dim strBeforeRows As String 
Dim strApplication As String 
Dim strBetweenRows As String 
Dim strSpecs As String 
Dim strAfterRows As String 
Dim strAll As String 

' get a worksheet reference 
Set wb = ActiveWorkbook 
Set ws = Sheets("Copy From Here") 


' test collection 
coll.Add 3 


' HTML before rows 
    strBeforeRows = "<style type=""text/css""> table.tableizer-table { border: 1px solid #CCC; font-family: Arial, Helvetica, sans-serif font-size: 12px;} .tableizer-table td { padding: 4px; margin: 3px; border: 1px solid #ccc;}.tableizer-table th { background-color: #104E8B; color: #FFF; font-weight: bold;}</style>" & _ 
    "<table width=""100%"" class=""tableizer-table"">" & _ 
    "<tr class=""tablezer-firstrow"">" & _ 
    "<th><p>Make</p></th>" & _ 
    "<th>Model</th>" & _ 
    "<th>Series</th>" & _ 
    "<th>Engine</th>" & _ 
    "<th>Years (mm/yy)</th></tr>" 


' iterate collection 
strApplication = "" 
For lngCounter = 1 To coll.Count 
    strApplication = strApplication & "<tr>" 
    strApplication = strApplication & "<td><div align=""center"">" & ws.Range("I" & coll(lngCounter)).Value & "</div></td>" 
    strApplication = strApplication & "<td><div align=""center"">" & ws.Range("J" & coll(lngCounter)).Value & "</div></td>" 
    strApplication = strApplication & "<td><div align=""center"">" & ws.Range("K" & coll(lngCounter)).Value & "</div></td>" 
    strApplication = strApplication & "<td><div align=""center"">" & ws.Range("L" & coll(lngCounter)).Value & "</div></td>" 
    strApplication = strApplication & "<td><div align=""center"">" & ws.Range("M" & coll(lngCounter)).Value & "</div></td>" 
    strApplication = strApplication & "</tr>" 
Next lngCounter 

' HTML between rows 
strBetweenRows = "<tr>" & _ 
    "<td>&nbsp;</td>" & _ 
    "<td>&nbsp;</td>" & _ 
    "<td>&nbsp;</td>" & _ 
    "<td>&nbsp;</td>" & _ 
    "<td>&nbsp;</td>" & _ 
    "</tr>" & _ 
    "<tr>" & _ 
    "<th colspan=""2"" class=""tableizer-firstrow"">Specifications</th>" & _ 
    "<td>&nbsp;</td>" & _ 
    "<td>&nbsp;</td>" & _ 
    "<td>&nbsp;</td></tr> <tr>" 


' Specs HTML 
strSpecs = "" 
    strSpecs = strSpecs & "<tr><td>Volts</td><td align=""right"" width=""120""><div align=""center"">" & ws.Range("P17").Value & "</div></td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr><tr>" 
    strSpecs = strSpecs & "<tr><td>Amps</td><td align=""right"" width=""120""><div align=""center"">" & ws.Range("P18").Value & "</div></td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr><tr>" 
    strSpecs = strSpecs & "<tr><td>Adjustment Hole (mm)</td><td align=""right"" width=""120""><div align=""center"">" & ws.Range("P19").Value & "</div></td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr><tr>" 
    strSpecs = strSpecs & "<tr><td>Pivot Hole (mm)<</td><td align=""right"" width=""120""><div align=""center"">" & ws.Range("P20").Value & "</div></td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr><tr>" 
    strSpecs = strSpecs & "<tr><td>Adjustment to Pivot (mm)</td><td align=""right"" width=""120""><div align=""center"">" & ws.Range("P20").Value & "</div></td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr><tr>" 
    strSpecs = strSpecs & "<tr><td>Pivot Length (mm)</td><td align=""right"" width=""120""><div align=""center"">" & ws.Range("P22").Value & "</div></td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr><tr>" 
    strSpecs = strSpecs & "<tr><td>Inside Feet To Feet (mm)</td><td align=""right"" width=""120""><div align=""center"">" & ws.Range("P23").Value & "</div></td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr><tr>" 
    strSpecs = strSpecs & "<tr><td>Pulley (mm)</td><td align=""right"" width=""120""><div align=""center"">" & ws.Range("P24").Value & "</div></td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr><tr>" 
    strSpecs = strSpecs & "<tr><td>No Of Grooves</td><td align=""right"" width=""120""><div align=""center"">" & ws.Range("P25").Value & "</div></td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr><tr>" 
    strSpecs = strSpecs & "<tr><td>Plug</td><td align=""right"" width=""120""><div align=""center"">" & ws.Range("P26").Value & "</div></td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr><tr>" 


' HTML after rows 
strAfterRows = "</tr></table>" 

' final HTML - concatenate the 3 string variables 
strAll = strBeforeRows & strApplication & strBetweenRows & strSpecs & strAfterRows 
Debug.Print strAll 
End Sub 

Das ist, was ich bisher bekommen habe, und es produziert HTML, aber wie kann ich es in einer Schleife durch die Reihen erhalten , die in iM

<style type="text/css"> 
    table.tableizer-table { border: 1px solid #CCC; font-family: Arial, Helvetica, sans-serif font-size: 12px;} 
    .tableizer-table td { padding: 4px; margin: 3px; border: 1px solid #ccc;} 
    .tableizer-table th { background-color: #104E8B; color: #FFF; font-weight: bold;} 
</style> 
<table width="100%" class="tableizer-table"> 
<tr class="tablezer-firstrow"> 
    <th> 
     <p>Make</p> 
    </th> 
    <th>Model</th> 
    <th>Series</th> 
    <th>Engine</th> 
    <th>Years (mm/yy)</th> 
</tr> 
<tr> 
    <td> 
     <div align="center">Ford</div> 
    </td> 
    <td> 
     <div align="center">Focus</div> 
    </td> 
    <td> 
     <div align="center">LR</div> 
    </td> 
    <td> 
     <div align="center">2.0L 4cyl Petrol - EDD#</div> 
    </td> 
    <td> 
     <div align="center">06/02 - 04/05</div> 
    </td> 
</tr> 
<tr> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
</tr> 
<tr> 
    <th colspan="2" class="tableizer-firstrow">Specifications</th> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
</tr> 
<tr> 
<tr> 
    <td>Volts</td> 
    <td align="right" width="120"> 
     <div align="center">12</div> 
    </td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
</tr> 
<tr> 
<tr> 
    <td>Amps</td> 
    <td align="right" width="120"> 
     <div align="center">90</div> 
    </td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
</tr> 
<tr> 
<tr> 
    <td>Adjustment Hole (mm)</td> 
    <td align="right" width="120"> 
     <div align="center">8</div> 
    </td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
</tr> 
<tr> 
<tr> 
    <td>Pivot Hole (mm)<</td> 
    <td align="right" width="120"> 
     <div align="center">8</div> 
    </td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
</tr> 
<tr> 
<tr> 
    <td>Adjustment to Pivot (mm)</td> 
    <td align="right" width="120"> 
     <div align="center">8</div> 
    </td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
</tr> 
<tr> 
<tr> 
    <td>Pivot Length (mm)</td> 
    <td align="right" width="120"> 
     <div align="center"></div> 
    </td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
</tr> 
<tr> 
<tr> 
    <td>Inside Feet To Feet (mm)</td> 
    <td align="right" width="120"> 
     <div align="center">64</div> 
    </td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
</tr> 
<tr> 
<tr> 
    <td>Pulley (mm)</td> 
    <td align="right" width="120"> 
     <div align="center">53</div> 
    </td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
</tr> 
<tr> 
<tr> 
    <td>No Of Grooves</td> 
    <td align="right" width="120"> 
     <div align="center">6PV</div> 
    </td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
</tr> 
<tr> 
<tr> 
    <td>Plug</td> 
    <td align="right" width="120"> 
     <div align="center">RP222</div> 
    </td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
</tr> 
<tr></tr> 
</table> 
+0

Ich schrieb einen Klasse auf Code Review, die es HTML einfach erstellen macht: [HTML Erstellen eines Builder-Muster verwenden] (https://codereview.stackexchange.com/questions/178814/creating-html -building-a-builder-Muster) –

Antwort

1

Angenommen, Ihr Problem ist mit dem folgenden Code-Abschnitt:

' iterate collection 
strApplication = "" 
For lngCounter = 1 To coll.Count 
    strApplication = strApplication & "<tr>" 
    strApplication = strApplication & "<td><div align=""center"">" & ws.Range("I" & coll(lngCounter)).Value & "</div></td>" 
    strApplication = strApplication & "<td><div align=""center"">" & ws.Range("J" & coll(lngCounter)).Value & "</div></td>" 
    strApplication = strApplication & "<td><div align=""center"">" & ws.Range("K" & coll(lngCounter)).Value & "</div></td>" 
    strApplication = strApplication & "<td><div align=""center"">" & ws.Range("L" & coll(lngCounter)).Value & "</div></td>" 
    strApplication = strApplication & "<td><div align=""center"">" & ws.Range("M" & coll(lngCounter)).Value & "</div></td>" 
    strApplication = strApplication & "</tr>" 
Next lngCounter 

Ich sehe nicht wirklich, warum Sie eine Sammlung verwendet haben, da es nur ein Index/Zähler für Ihre Schleife zu sein scheint. Versuchen Sie Folgendes:

Dim MinRow As Intger 
Dim MaxRow As Integer 
Dim Counter As Integer 
MinRow = 2 ' from your question, this is the first row of data? 
MaxRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, "I").End(xlUp).Row ' Find the last populated row 

For Counter = MinRow to MaxRow 
    strApplication = strApplication & "<tr>" 
    strApplication = strApplication & "<td><div align=""center"">" & ws.Range("I" & Counter).Value & "</div></td>" 
    strApplication = strApplication & "<td><div align=""center"">" & ws.Range("J" & Counter).Value & "</div></td>" 
    strApplication = strApplication & "<td><div align=""center"">" & ws.Range("K" & Counter).Value & "</div></td>" 
    strApplication = strApplication & "<td><div align=""center"">" & ws.Range("L" & Counter).Value & "</div></td>" 
    strApplication = strApplication & "<td><div align=""center"">" & ws.Range("M" & Counter).Value & "</div></td>" 
    strApplication = strApplication & "</tr>" 
Next Counter 
Verwandte Themen