AKTUALISIERT 3/30VBA: Array Zellenreferenz Mismatch Fehler
So stellte ich den Code und es läuft fehlerfrei jetzt aber das Problem ist, dass es nicht die richtigen Daten nicht ziehen. X beginnt im Grunde mit Zelle (X, 1) und geht von dort weiter. Wie verknüpfe ich X mit den ausgewählten Listbox-Optionen im Array?
OLD Nachricht: Ich habe eine Userform, die für die Mehrfachauswahl der Länder und auch Fragen zu diesem bestimmten Land erlaubt. Diese sind in arrCountries & arrQuestion jeweils gespeichert. Dies führt dann zu meinem Haupt-Sub, das einen Web-Query-Import von der CIA World Factbook-Site erfordert. Ich halte jedoch einen Fehlanpassungsfehler bekommen, die ich nicht zu klären, scheine wie zu umgehen:
Wenn ich es zu erraten, da ist, wenn ich aus der Listbox ist das Array ausfülle ist es nur eine Zugabe string und nicht die Zellreferenz, auf der sich der String befindet (oder ich liege völlig falsch).
Mein Arbeitsblatt hat beim Start nur 1 Blatt namens Länder und die Spalte A ist die URL und Spalte B ist der Name des Landes. Ich habe Public arrCountry(), Public ArrQuestion() und Public X als Variante definiert.
-Code hier:
Userform-Code, wenn in Ordnung klicken:
'Handles when the user clicks okay
Private Sub cbOkay_Click()
'Me.Hide
'Capture ticker selection(s) from list box.
Dim cI As Long
Dim cX As Long
Dim qI As Long
Dim qX As Long
'Stores the Countries selected into an array
If lbCountries.ListIndex <> -1 Then
For cI = 0 To lbCountries.ListCount - 1
If lbCountries.Selected(cI) Then
ReDim Preserve arrCountry(cX)
arrCountry(cX) = lbCountries.List(cI)
cX = cX + 1
End If
Next cI
End If
If cX = 0 Then MsgBox "Please select at least one country to analyse."
'MsgBox Join(arrCountry, vbCrLf)
'Stores the Questions selected into an array
If lbQuestions.ListIndex <> -1 Then
For qI = 0 To lbQuestions.ListCount - 1
If lbQuestions.Selected(qI) Then
ReDim Preserve arrQuestion(qX)
arrQuestion(qX) = lbQuestions.List(qI)
qX = qX + 1
End If
Next qI
End If
If qX = 0 Then MsgBox "Please select at least one question to analyse."
'MsgBox Join(arrQuestion, vbCrLf)
'Unload the form
Unload Me
cancel = False
End Sub
Die Meldungsfelder geben die richtig ausgewählt Listbox Elemente so weiß ich sie richtig gespeichert werden.
Der WebQuery-Code erhalte ich den Fehler auf:
AKTUALISIERT Code:
Sub webQueryimport(arrCountry())
Dim mystr As String
Dim X As Integer
Dim selected As Variant
For Each selected In arrCountry
X = X + 1
Worksheets("Countries").Select
Worksheets("Countries").Activate
mystr = Cells(X, 1)
Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = selected
With ActiveSheet.QueryTables.Add(Connection:=mystr, Destination:=Range("$A$1"))
.WebSelectionType = xlEntirePage 'this tells VBA what to select and import
.WebFormatting = xlWebFormattingNone 'this turns off web formatting, otherwise text is various sizes
.Refresh BackgroundQuery:=False 'if commented out, doesn't add any data
End With
Next selected
End Sub
Auch jetzt, dass die Schleife arbeitet und importieren:
Also habe ich einen Schleifenzähler hinzugefügt aber es beginnt immer mit dem A1, egal was in der Listbox und in arr ausgewählt wird. Länder
Irgendwelche Gedanken/Hilfe wäre großartig!
versuchen Sie, das gesamte 'X'-Array als eine Zeilennummer in' Cells (X, 1) 'zuzuordnen? Ich denke, du wolltest 'Cells (X (I), 1)' –
@Shairado verwenden - Ich dachte ursprünglich, dass du recht hast, aber ich bezweifle, dass 'X (I)' ein numerischer Wert ist - also vermute ich, dass der OP wird wirklich ein 'Find' oder so etwas tun müssen. Nicht sicher. Zu spät am Nachmittag, um klar zu denken. – YowE3K
oder wenn Sie nur auf das Array verweisen nicht 'X (I)' oder 'X (I, 1)' wenn es mehr als eine Dimension gibt.Sie haben auch Probleme bei der Benennung des Arbeitsblatts, wenn Sie wieder versuchen, den Namen auf das gesamte Array zu setzen. – Tom