2016-04-12 6 views
0

ich mit diesem Thema gestapelt haben:Ärger mit Array ohne genau Größe in VBS

Ich habe Arrays:

weatherList = Array("rainy", "dry") 
cityList = Array("Mumbai", "Delhi", "Goa", "Varanasi") 

Aber jetzt habe ich Wunsch alle Städte enthalten, nicht mehr nur 4 in der Anordnung und Ich weiß nicht, wie ich sie alle einbeziehen soll.

Anforderung ist es, durch jede Stadt zu gehen und das Wetter aufzulisten und es dann als PDF-Ausgabe zu erstellen. Aber Indien hat viele große Städte und ich kann sie nicht manuell in einer Reihe definieren und manchmal werde ich Informationen über Wetter und andere Bedingungen haben und manchmal nicht?

Kann mir jemand dabei helfen?

Danke, Marija

Antwort

0

Es ist wirklich nicht klar ist, welche Art von Zeichenfolge, die Sie zusammen zu verketten versuchen. Die für CommandList zur Verfügung gestellte wurde missgebildet. Es gab auch keine Definition oder Zuweisung für Registerkarte oder Count. Zumindest scheint es, dass Count in der Schleife erhöht werden sollte.

Diese Schleife wird durch die Kombinationen, die Erweiterung commandList und filelist auf dem Sprung. Sie werden enden mit jedem Array ein Element zu groß, so dass das Extra abgeschnitten ist.

weatherList = Array("rainy", "dry") 
cityList = Array("Mumbai", "Delhi", "Goa", "Varanasi") 
ReDim commandList(0) 
ReDim fileList(0) 

For c = LBound(cityList) To UBound(cityList) 
    For w = LBound(weatherList) To UBound(weatherList) 
     Debug.Print cityList(c) & ":" & weatherList(w) 
     'what is COUNT? what is TAB? 
     'commandList(UBound(commandList)) = """ & tabcmdPath & """ export --pagesize a4 --pagelayout landscape """ & workbook & "/" & tab & "?Weather=" & weather & "&Route" & city & """ --pdf -f """ & workbook & "\" & count & ".pdf""" 
     'what is COUNT? 
     'fileList(UBound(fileList)) = Workbook & "\" & Count & ".pdf" 

     ReDim Preserve commandList(UBound(commandList) + 1) 
     ReDim Preserve fileList(UBound(fileList) + 1) 

    Next w 
Next c 

ReDim Preserve commandList(UBound(commandList) - 1) 
ReDim Preserve fileList(UBound(fileList) - 1) 
+0

Hallo, ich habe Arbeitsmappe auf Server und muss es in pdf drucken. Dies ist nicht alles Code ... Die Anzahl war anfangs 0, auch die Registerkarte ist ein bestimmter Teil der Arbeitsmappe. Ich muss durch jede Stadt und für jedes Wetter gehen, um das in pdf zu drucken. Wie auch immer, ich werde versuchen, mein Skript zu ändern. – marija

+1

Der richtige Weg, um ein leeres Array über ReDim zu erstellen, ist: ReDim a (-1). –

+0

@ Ekkehard.Horner - guter Punkt. Dank dafür! – Jeeped

0

zum Aufbau eines cartesian product:

daß für Mengen A und B ist, ist das kartesische Produkt A × B die Menge der alle geordneten Paare (a, b), wobei a ∈ A und b ∈ B.

Sie sollten berechnen die Größe der resultierenden Array (wenn Sie es wirklich brauchen). Wie in:

>> w = Split("r d") 
>> c = Split("M D G V Z") 
>> n = (UBound(w) + 1) * (UBound(c) + 1) - 1 
>> ReDim p(n) 
>> i = 0 
>> For Each ew In w 
>>  For Each ec In c 
>>   e = Join(Array(i, ew, ec), "-") 
>>   WScript.Echo e 
>>   p(i) = e 
>>   i = i + 1 
>>  Next 
>> Next 
>> WScript.Echo p(UBound(p)) 
>> 
0-r-M 
1-r-D 
2-r-G 
3-r-V 
4-r-Z 
5-d-M 
6-d-D 
7-d-G 
8-d-V 
9-d-Z 
9-d-Z 
>> 
0

Ich habe flexiblere Lösung gefunden. Ich habe eine xlsx-Datei erstellt, die einmal pro Woche mit genau gemessenen Städten aktualisiert wird. Mein Skript wird diese xlsx-Datei lesen und Städte daraus ziehen. Auf diese Weise vermeide ich leere gedruckte PDF-Seiten. Danke allen!