Ich schreibe ein Skript, in dem ich eine Suche in einer Datenbank aktivieren und die Ergebnisse der Suchanfragen in einem anderen Arbeitsblatt (das ich Results genannt habe) darstellen soll Zugriff auf die gesamte Datenbank zur gleichen Zeit haben.Einfügen von Werten im dynamischen Bereich Excel VBA
Um dies zu tun, möchte ich Werte aus dem Arbeitsblatt "Datenbank" in das Arbeitsblatt "Ergebnisse" kopieren. Es ist mir gelungen, die richtigen Daten aus der "Datenbank" in Bezug auf bestimmte Suchkriterien auszuwählen. Ich tat dies mit dem folgenden Code:
With Sheets("Database")
.Range(.Cells(i, 1), .Cells(i, 9)).Copy
End With
Jetzt möchte ich die Ergebnisse in die „Ergebnisse“ Tabelle einfügen, und ich habe so getan, indem Sie das folgende Schreiben:
Sheets("Results").Range("B600").End(xlUp).Offset(1, 0).PasteSpecial xlPasteFormulasAndNumberFormats
Auf diese Weise I verstehe nicht ganz:
wenn ich den Pastenbereich genau zwischen der ersten leeren Reihe und B600 definiert habe oder;
Wenn ich nur den Anfang des Einfügebereichs definiere und die Suchergebnisse die 600. Zeile überschreiten, werden sie nach dieser Zeile eingefügt.
Ich frage dies, weil, wenn die Datenbank wächst, muss ich sicherlich eine Paste Bereich größer als B600 garantieren.
Ich habe recherchiert, aber kann nicht absolut sicher sein, was ich genau gemacht habe. Ich muss sagen, dass ich weiß, dass die erste leere Zeile in der Datenbank "Results" immer 12 sein wird. In diesem Fall weiß ich, dass ich grundsätzlich die Suchergebnisse aus der 12. Zeile einfügen möchte. Vielleicht gibt es einen einfacheren Weg, dies zu tun.
Dies ist der gesamte Code, als Referenz:
Private Sub SearchButton_Click()
'This is the search function
'1. declare variables
'2. clear old search results
'3. Find records that match criteria and paste them
Dim country As String
Dim Category As String
Dim Subcategory As String
Dim finalrow As Integer
Dim i As Integer 'row counter
'Erase any entries from the Results sheet
Sheets("Results").Range("B10:J200000").ClearContents
'Deformat any tables in the Results sheet
For Each tbl In Sheets("Results").ListObjects
tbl.Clear
Next
'Define the user-inputed variables
country = Sheets("Results").Range("D5").Value
Category = Sheets("Results").Range("D6").Value
Subcategory = Sheets("Results").Range("D7").Value
finalrow = Sheets("Database").Range("A" & Rows.Count).End(xlUp).Row
'If statement for search
'For every variable i, start comparing from row 2 until the final row
For i = 2 To finalrow
'If the country field is left empty
If country = "" Then
Sheets("Results").Range("B10:J200000").Clear
MsgBox "You must select a country in order to search the database. Please do so in the drop-down list provided."
Sheets("Results").Range("D5").ClearContents
Sheets("Results").Range("D6").ClearContents
Sheets("Results").Range("D7").ClearContents
Exit Sub
'If the country field is filled in and there results from the search made
ElseIf Sheets("Database").Cells(i, 1) = country And _
(Sheets("Database").Cells(i, 3) = Category Or Category = "") And _
(Sheets("Database").Cells(i, 4) = Subcategory Or Subcategory = "") Then
'Copy the headers of the table
With Sheets("Database")
.Range("A1:I1").Copy
End With
Sheets("Results").Range("B10:J10").PasteSpecial
'Copy the rows of the table that match the search query
With Sheets("Database")
.Range(.Cells(i, 1), .Cells(i, 9)).Copy
End With
Sheets("Results").Range("B600").End(xlUp).Offset(1, 0).PasteSpecial xlPasteFormulasAndNumberFormats
'Hides search form
Me.Hide
End If
Next i
'Toggle Results sheet
Sheets("Results").Activate
'Format results as a table
Set rng = Range(Range("B10"), Range("B10").End(xlUp).SpecialCells(xlLastCell))
Set table = Sheets("Results").ListObjects.Add(xlSrcRange, rng, , xlYes)
table.TableStyle = "TableStyleMedium13"
Range("B11").Select
'Make Excel window visible
Application.Visible = True
End Sub
Ihnen sehr für Ihre Hilfe danken.
werden Sie immer auf exakt den gleichen Bereich in der „Ergebnisse“ Arbeitsblatt einfügen sein? – user1
und was ist der Bereich der Daten im Arbeitsblatt "Datenbank"? – user1
'Sheets (" Ergebnisse "). Bereich (" B600 "). End (xlUp)' ist die erste Zelle über "B600", die Daten enthält. Die Frage ist, wo willst du ** die kopierten Daten einfügen? letzte belegte Reihe (unter "B600"), wo? –