Ik zit met een probleempje m.b.t. de AdvFilterCity macro. Deze macro zorgt ervoor dat wanneer ik hem uitvoer, mijn masterdata in verschillende subtabbladen wordt verzet. Op dit moment werkt dat uitstekend, wanneer ik hem namelijk uitvoer is het zo dat de tabbladen worden ge-update, met als hoofdcellen degene onder A. Nu zou graag een verandering erin willen maken zodat er nog een aantal tabbladen worden aangemaakt maar nu met als hoofdcellen degene onder D. Het lukt mij wel deze tabbladen te laten maken, maar in plaats van dat hij de cellen links van hem als informatie overneemt, neemt hij de cellen rechts van hem (waar dus niets in staat) over. Hoe krijg ik dus voor elkaar dat de cellen links van hem worden overgenomen? Hieronder is de oorspronkelijke code te vinden:
Hieronder een VB bestand. Op dit moment staan er dus 1 button, die ervoor zorgt dat de tabbladen van hetgeen wat onder A staat wordt ge-update. Nu wil ik dus een tweede button maken die de informatie van wat onder D staat als tabbladen pakt, en de rest van de informatie hier dan in zet; wat moet er dan aan de code worden veranderd?
Option Explicit
Sub FilterCities()
'last edited March 18, 2004
Dim myCell As Range
Dim wks As Worksheet
Dim DataBaseWks As Worksheet
Dim ListRange As Range
Dim dummyRng As Range
Dim myDatabase As Range
Dim TempWks As Worksheet
Dim rsp As Integer
Dim i As Long
'include bottom most header row
Const TopLeftCellOfDataBase As String = "A4"
'what column has your key values
Const KeyColumn As String = "A"
'where's your data
Set DataBaseWks = Worksheets("Master Data")
i = DataBaseWks.Range(TopLeftCellOfDataBase).Row - 1
rsp = MsgBox("Include headings?", vbYesNo, "Headings")
Set TempWks = Worksheets.Add
With DataBaseWks
Set dummyRng = .UsedRange
Set myDatabase = .Range(TopLeftCellOfDataBase, _
.Cells.SpecialCells(xlCellTypeLastCell))
End With
'rebuild the List
With DataBaseWks
Intersect(myDatabase, .Columns(KeyColumn)).AdvancedFilter _
Action:=xlFilterCopy, _
CopyToRange:=TempWks.Range("A1"), _
Unique:=True
'Add the heading to the criteria area
TempWks.Range("D1").Value = _
.Cells(.Range(TopLeftCellOfDataBase).Row, KeyColumn).Value
End With
With TempWks
Set ListRange = .Range("a2", .Cells(.Rows.Count, "A").End(xlUp))
End With
With ListRange
.Sort Key1:=.Cells(1), Order1:=xlAscending, _
Header:=xlNo, OrderCustom:=1, _
MatchCase:=False, Orientation:=xlTopToBottom
End With
'check for individual City worksheets
For Each myCell In ListRange.Cells
If WksExists(myCell.Value) = False Then
Set wks = Sheets.Add
On Error Resume Next
wks.Name = myCell.Value
If Err.Number <> 0 Then
MsgBox "Please rename: " & wks.Name
Err.Clear
End If
On Error GoTo 0
wks.Move After:=Sheets(Sheets.Count)
Else
Set wks = Worksheets(myCell.Value)
wks.Cells.Clear
End If
If rsp = 6 Then
DataBaseWks.Rows("1:" & i).Copy Destination:=wks.Range("A1")
End If
'change the criteria in the Criteria range
TempWks.Range("D2").Value = "=" & Chr(34) & "=" & myCell.Value & Chr(34)
'transfer data to individual City worksheets
If rsp = 6 Then
myDatabase.AdvancedFilter _
Action:=xlFilterCopy, _
CriteriaRange:=TempWks.Range("D12"), _
CopyToRange:=wks.Range("A1").Offset(i, 0), _
Unique:=False
Else
myDatabase.AdvancedFilter _
Action:=xlFilterCopy, _
CriteriaRange:=TempWks.Range("D12"), _
CopyToRange:=wks.Range("A1"), _
Unique:=False
End If
Next myCell
Application.DisplayAlerts = False
TempWks.Delete
Application.DisplayAlerts = True
MsgBox "Data has been sent"
End Sub
Function WksExists(wksName As String) As Boolean
On Error Resume Next
WksExists = CBool(Len(Worksheets(wksName).Name) > 0)
End Function
Hieronder een VB bestand. Op dit moment staan er dus 1 button, die ervoor zorgt dat de tabbladen van hetgeen wat onder A staat wordt ge-update. Nu wil ik dus een tweede button maken die de informatie van wat onder D staat als tabbladen pakt, en de rest van de informatie hier dan in zet; wat moet er dan aan de code worden veranderd?